- 浏览: 371411 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (148)
- java (89)
- flex (7)
- sns (3)
- jquery mobile gwt html5 (1)
- VirtualBox Centos 安装 (2)
- tomcat (1)
- nginx (2)
- centOS (7)
- memcache (2)
- hadoop (3)
- hbase (3)
- install (1)
- cloudera (3)
- tools (0)
- gen code (0)
- Mysql (2)
- KinderEditor (1)
- flash chart (1)
- ntsysv (1)
- hibernate search (2)
- compass (1)
- lucence (2)
- hibernate (1)
- jboss cache (0)
- 二级缓存 (1)
- maven (1)
- debian (1)
- go (1)
- golang (2)
- html5 (1)
最新评论
-
llh1985:
wave牛人~~求联系~~~邮箱llh1985@163.com ...
GWT Wave 开源代码运行跑通分析(1) -
zhengliming123:
[img][img][*][*][/flash][*]|[/i ...
hibernate Search 学习研究 附件是maven工程 -
di1984HIT:
写得很嗯好啊。
CentOS 安装 hadoop hbase 使用 cloudera 版本。(一) -
itfanr:
楼主写的真好 本地godoc
Golang 1.0 文档使用。godoc ,go 命令 学习 ,本地运行 gotour -
phe441:
灰常感谢楼主,爱死你了
URL rewrite 3.2 jar 和 文档 pdf 下载
想这个Google的app 都是可以先自己放一个免费的程序到服务器上面.
就是一个高兴的事情.
前几天研究了下GWT.关于做界面还是非常容易的.
java的代码想怎么写就怎么写.非常的高效率.
现在研究下如何将数据保存.
参考官方的文档.是通过JDO实现的.我也没有想太多.直接照着官方的文档写了个demo.
1.定义一个JDO对象.
package com.test.demo.jdo; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class LoginUser { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private String userName; @Persistent private String passwd;
get set 方法和构造函数省略.
这里要说下.ID如果是要自增的话.id一定要用Long.而不能用String.
否则会报:ID自增错误.
然后用GWT写个对话框.
final DialogBox dialogBox = new DialogBox(false, true); // false:是否自动隐藏.(单击DialogBox之外的部分.true:是否是模式对话框. dialogBox.setTitle("登录对话框"); dialogBox.setText("登录对话框"); Grid grid = new Grid(3, 3); grid.setWidget(0, 0, new HTML("登录名:")); final TextBox userName = new TextBox(); userName.setValue("demo"); grid.setWidget(0, 1, userName); grid.setWidget(1, 0, new HTML("密码:")); final PasswordTextBox userPasswd = new PasswordTextBox(); userPasswd.setValue("demo"); grid.setWidget(1, 1, userPasswd); final Button submit = new Button("新增"); submit.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { // dialogBox.hide(); // GWT. loginUserAction.saveLoginUser(userName.getValue(), userPasswd .getValue(), new AsyncCallback<Void>() { public void onSuccess(Void result) { // TODO Auto-generated method stub System.out.println("save !"); Window.alert("save!"); } public void onFailure(Throwable caught) { // TODO Auto-generated method stub } }); } }); final Button cancle = new Button("长度"); cancle.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { loginUserAction.findLoginUserSize(new AsyncCallback<Integer>() { public void onSuccess(Integer result) { // TODO Auto-generated method stub Window.alert(result + ""); } public void onFailure(Throwable caught) { // TODO Auto-generated method stub } }); } }); grid.setWidget(2, 0, submit); grid.setWidget(2, 1, cancle); dialogBox.add(grid); dialogBox.center(); dialogBox.show(); // 将面板添加到dialog里面
private final LoginUserActionAsync loginUserAction = GWT .create(LoginUserAction.class);
在GWT里面调用jdo 保存数据和查询数据记录数.
http://toeoso.appspot.com/Login.html
public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF() {} public static PersistenceManagerFactory get() { return pmfInstance; } }
看了下官方写了一个PMF类.我也拷贝了下.
public void deleteLoginUserById(String id) { } public void saveLoginUser(String userName, String userPasswd) { PersistenceManager pm = PMF.get().getPersistenceManager(); try { LoginUser loginUser = new LoginUser(userName, userPasswd); //loginUser.setId(Math.abs(new Random().nextInt())+""); pm.makePersistent(new LoginUser(userName, userPasswd)); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } finally { pm.close(); } } public int findLoginUserSize() { PersistenceManager pm = PMF.get().getPersistenceManager(); try { javax.jdo.Query query = pm.newQuery(LoginUser.class); List<LoginUser> results = (List<LoginUser>) query.execute("Smith"); return results.size(); }catch (Exception e) { e.printStackTrace(); return 0; } finally { pm.close(); } }
用了下PMF.每次都要申请一个.然后在关闭下.不知道这么写对不对.
拷贝了下日志:
启动的时候创建了数据库表.
2009-9-19 11:22:00 com.google.apphosting.utils.jetty.JettyLogger info 信息: jetty-6.1.x 2009-9-19 11:22:00 com.google.apphosting.utils.jetty.JettyLogger info 信息: Started SelectChannelConnector@0.0.0.0:8080 The server is running at http://localhost:8080/ 2009-9-19 11:23:09 org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints INFO: Bundle "org.datanucleus.jpa" has an optional dependency to "org.datanucleus.enhancer" but it cannot be resolved 2009-9-19 11:23:09 org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints INFO: Bundle "org.datanucleus" has an optional dependency to "org.eclipse.equinox.registry" but it cannot be resolved 2009-9-19 11:23:09 org.datanucleus.plugin.NonManagedPluginRegistry resolveConstraints INFO: Bundle "org.datanucleus" has an optional dependency to "org.eclipse.core.runtime" but it cannot be resolved 2009-9-19 11:23:09 org.datanucleus.PersistenceConfiguration setProperty INFO: Property datanucleus.rdbms.sql.allowAllSQLStatements unknown - will be ignored 2009-9-19 11:23:09 org.datanucleus.PersistenceConfiguration setProperty INFO: Property datanucleus.rdbms.stringDefaultLength unknown - will be ignored 2009-9-19 11:23:09 org.datanucleus.PersistenceConfiguration setProperty INFO: Property datanucleus.appengine.autoCreateDatastoreTxns unknown - will be ignored 2009-9-19 11:23:09 org.datanucleus.ObjectManagerFactoryImpl logConfiguration INFO: ================= Persistence Configuration =============== 2009-9-19 11:23:09 org.datanucleus.ObjectManagerFactoryImpl logConfiguration INFO: DataNucleus Persistence Factory - Vendor: "DataNucleus" Version: "1.1.4" 2009-9-19 11:23:09 org.datanucleus.ObjectManagerFactoryImpl logConfiguration INFO: DataNucleus Persistence Factory initialised for datastore URL="appengine" driver="" userName="" 2009-9-19 11:23:09 org.datanucleus.ObjectManagerFactoryImpl logConfiguration INFO: =========================================================== 2009-9-19 11:23:09 org.datanucleus.PersistenceConfiguration setProperty INFO: Property datanucleus.query.cached unknown - will be ignored 2009-9-19 11:23:10 org.datanucleus.jdo.metadata.JDOMetaDataManager <init> INFO: Registering listener for metadata initialisation 2009-9-19 11:23:10 org.datanucleus.jdo.metadata.JDOAnnotationReader processClassAnnotations INFO: Class "com.test.demo.jdo.LoginUser" has been specified with JDO annotations so using those. 2009-9-19 11:23:10 org.datanucleus.store.appengine.MetaDataValidator validate INFO: Performing appengine-specific metadata validation for com.test.demo.jdo.LoginUser 2009-9-19 11:23:10 org.datanucleus.store.appengine.MetaDataValidator validate INFO: Finished performing appengine-specific metadata validation for com.test.demo.jdo.LoginUser 2009-9-19 11:23:10 org.datanucleus.store.StoreDataManager registerStoreData INFO: Managing Persistence of Class : com.test.demo.jdo.LoginUser [Table : <class name="LoginUser" identity-type="application" objectid-class="javax.jdo.identity.LongIdentity" persistence-modifier="persistence-capable" > <inheritance strategy="new-table"> </inheritance> <field name="id" persistence-modifier="persistent" primary-key="true" null-value="none" default-fetch-group="true" embedded="false" value-strategy="identity" unique="false"> </field> <field name="passwd" persistence-modifier="persistent" null-value="none" default-fetch-group="true" embedded="true" unique="false"> </field> <field name="userName" persistence-modifier="persistent" null-value="none" default-fetch-group="true" embedded="true" unique="false"> </field> </class> , InheritanceStrategy : new-table] 2009-9-19 11:23:10 org.datanucleus.store.StoreDataManager registerStoreData INFO: Managing Persistence of Class : com.test.demo.jdo.LoginUser [Table : <class name="LoginUser" identity-type="application" objectid-class="javax.jdo.identity.LongIdentity" persistence-modifier="persistence-capable" > <inheritance strategy="new-table"> </inheritance> <field name="id" persistence-modifier="persistent" primary-key="true" null-value="none" default-fetch-group="true" embedded="false" value-strategy="identity" unique="false"> </field> <field name="passwd" persistence-modifier="persistent" null-value="none" default-fetch-group="true" embedded="true" unique="false"> </field> <field name="userName" persistence-modifier="persistent" null-value="none" default-fetch-group="true" embedded="true" unique="false"> </field> </class> , InheritanceStrategy : new-table] 2009-9-19 11:23:11 com.google.appengine.api.datastore.dev.LocalDatastoreService load INFO: Time to load datastore: 141 ms 2009-9-19 11:23:11 org.datanucleus.jdo.metadata.JDOMetaDataManager$MetaDataRegisterClassListener registerClass INFO: Listener found initialisation for persistable class com.test.demo.jdo.LoginUser 2009-9-19 11:23:49 org.datanucleus.ObjectManagerImpl close INFO: Outstanding nontx update being committed to datastore save ! 2009-9-19 11:24:11 com.google.appengine.api.datastore.dev.LocalDatastoreService$PersistDatastore persist INFO: Time to persist datastore: 0 ms 2009-9-19 11:52:28 org.datanucleus.ObjectManagerImpl close INFO: Outstanding nontx update being committed to datastore save ! 2009-9-19 11:52:31 com.google.appengine.api.datastore.dev.LocalDatastoreService$PersistDatastore persist INFO: Time to persist datastore: 62 ms
我在运行的时候遇到了
点击按钮的时候怎么也不响应.报后台类错误.
2009-9-19 10:56:15 com.google.apphosting.utils.jetty.JettyLogger warn
警告: EXCEPTION
java.lang.ClassNotFoundException: com.demo.test.server.LoginUserActionImpl
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:142)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.mortbay.util.Loader.loadClass(Loader.java:91)
at org.mortbay.util.Loader.loadClass(Loader.java:71)
at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:233)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:612)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
at org.mortbay.jetty.Server.doStart(Server.java:217)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86)
at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
其实就是配置没有写对.类下面的这个和web.xml里面的要一致.
@RemoteServiceRelativePath("LoginUserAction")
public interface LoginUserAction extends RemoteService {
void saveLoginUser(String userName,String userPasswd);
void deleteLoginUserById(String id);
int findLoginUserSize();
}
<servlet>
<servlet-name>LoginUserAction
</servlet-name>
<servlet-class>com.test.demo.server.LoginUserActionImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginUserAction
</servlet-name>
<url-pattern>/com.test.demo.Login/LoginUserAction
</url-pattern>
</servlet-mapping>
叫什么是无所谓了..而且在代码里面也不用.
只不过是GWT自己去找而已.
想着也挺方便的.
附件是代码.新增是将数据保存.长度是获得有几条数据.
- test003_2009_09_20.zip (4.5 MB)
- 下载次数: 53
发表评论
-
在CSDN上面也开通了博客
2013-02-27 22:41 906在CSDN上面也开通了博客 CSDN 现在发布文章 ... -
resin 服务器学习 配置 单点和 集群
2011-12-08 00:45 2064使用的 resin 4 服务器 ... -
CentOS 安装 Memcache 服务器. java 做客户端.
2011-11-07 18:35 37051,下载安装第三方源: CentOS 6 或 R ... -
CentOS rpm 安装 java 环境 tomcat nginx.
2011-11-03 19:17 7494首先测试更新. yum update ... -
android 源文件 zip包下载.地址
2011-06-20 15:19 1877android 源文件 zip包下载. 网络上面提供了 ... -
读取 jpa 的配置文件.添加自己的属性.
2011-06-15 16:03 1795package com.freewebsys.sns.c ... -
构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码
2011-05-05 11:44 1596构建富客户端程序 GWT2.3 + Guice3.0 + ... -
Guice 3.0 学习 persist jpa
2011-03-18 17:39 1536guice 3.0 的 persist 实现 使用的是 ... -
自己弄 开源 CMS 内容发布系统 主要表设计。
2011-03-10 11:34 3838--CMS栏目表 CREATE TABLE ... -
坚信 Debian是比Ubuntu更稳定的操作系统
2011-03-07 14:28 2304坚信 Debian是比Ubuntu更稳定的操作系统 自 ... -
eclipse 3.6 sp2 减肥记录
2011-03-04 09:46 1668喜欢 eclipse 但是 发现 eclipse 的功能很多 ... -
记录 2010 01 12 开始 给 自己 2 年 的时间 去弄 一个 gwt sns
2011-01-13 12:57 1313记录 2010 01 12 开始 给 自己 2 ... -
mac os x86 下 intel 无限驱动下载
2011-01-09 10:45 1413是在 googlecode 的项目 http://co ... -
Macos 下面 开源软件 下载
2011-01-06 16:06 1893macos 常用 软件 下载 macos 官方网站下载 ... -
Ubuntu 更新文件 桌面 菜单丢失, 打算 换 mac os
2011-01-04 11:32 2023ubuntu 是 2009 年 安装 ... -
做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 spring hibernate 如何 ?
2010-12-27 12:48 1466做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 ... -
Goolge appengine 又可以用了。高兴啊。。
2010-12-15 09:37 739突然想访问下自己的应用。 发现 自己的 appengi ... -
将google app engine 进行 本地化 可写文件 创建线程 去除白名单
2010-12-10 17:36 1912最近 看到 appgeng 被 ... -
设计 一个 oa 当中 的日历显示 跳转 上月 下月
2010-12-01 13:36 1350主要就是利用 java的Calendar 类 ... -
设计实现 一个 基于extjs2.0 做皮肤的 struts2 样式
2010-11-29 14:37 1815想法在 一年前 产生的。 首先使用 extjs2.0 ...
相关推荐
5. **Source Code**: 提供的源代码文件列表 "Packt.Google.App.Engine.Java.and.GWT.Application.Development.Source.Code" 可能包含了项目的各个部分,如MVC结构、DAO(数据访问对象)、业务逻辑层、GWT客户端组件...
《基于Google App Engine(GAE)的Java和GWT应用开发》这本书深入探讨了如何使用 Java 和 GWT 在 GAE 上构建强大且可扩展的 Web 应用程序。通过对 GAE 的介绍、Java 和 GWT 的应用技巧以及构建交互式 Web 应用程序的...
gwt-2.7.0.part3.rar 第三部分,大家记得下载前两部分啊
根据给定的文件信息,我们可以深入探讨几个关键的IT知识点:Google App Engine、Java、GWT(Google Web Toolkit)以及云应用开发。 ### 一、Google App Engine Google App Engine是一种用于构建和托管Web应用程序...
gwt-2.7.0.part2.rar 官网下载最新版,提供给大家使用
gwt-2.0.4.part2.rar gwt-2.0.4.part2.rar
基于Google.App.Engine(GAE)的Java和GWT应用开发
gwt-2.0.4.part1.rar gwt
gwt-2.0.4.part3.rargwt-2.0.4.part3.rar
ANDROID: ...Packtpub.-.Google App Engine Java and GWT Application Development (2010).pdf API: Apress.-.Beginning Google Maps API V3 (2009).pdf Googlecode.-.Google Maps API Reference.pdf
gwt-2.7.0.part1.rar最新版本,亲测可用。因为文件太大,只能分开放
gwt-site, gwtproject.org 网站的网页来源 文档GWT文档是在 http://www.gwtproject.org/doc/latest/DevGuide.html 发布的。引用Markdown 处理器:https://github.com/sirthias/pegdow
gwt-2.5.1—part1.rar part2:http://download.csdn.net/detail/u011029071/5992583
gwt-model-0.1beta.jar
gwt-2[1].4.0--jar.rar
标题 "org.jresearch.commons.gwt.utils.shared-1.0.45.zip" 提供的信息表明,这是一个与Java开发相关的开源项目,具体来说是`org.jresearch`组织下的一个 Commons GWT (Google Web Toolkit) 工具集。GWT 是一个用于...
atmosphere-gwt20-client-1.1.0.rc2.jar
atmosphere-gwt20-common-1.1.0.rc2.jar
atmosphere-gwt20-jersey-1.1.0.rc2.jar