GWT Hibernate程序中的错误2 [英] errors in GWT Hibernate program 2
问题描述
我设法解决这个问题,从发布 stackoverflow关于GWT的帖子。该帖子指出,因为JDBC不应在客户端,而是服务器端。
我正在尝试制作一个简单的网页应用程序,使用GWT RPC与Hibernate,MySql& eclipse IDE我已经有一个简单的版本的hibernate程序运行&现在我试图用GWT RPC做同样的事情。
尽管使用hibernate与RPC可能有一些不同的做法。首先我将jar / libs添加到war / web.inf / lib中,然后再将它们添加到classpath中,而在src中创建一个简单的文件夹,把所有的jar /然后添加到类路径中的简单的hibernate应用程序。它继续,编译器然后提出关于cfg.xml&映射hibernate文件包中的文件(包含pojo文件)。我把它们移动到src文件夹&错误消失但是现在的错误是关于会话创建。这次将Util文件移动到src没有起作用。
这是我的项目的目录结构:
src
hbm.xml
cfg.xml
hibDomain(hibernate包)
rppctest.client(GWT包)
rppctest.server(GWT包)
我在Windows 7上使用MySQL。
这里是错误消息&我的代码。
错误
94 [btpool0-2] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
/ pre>
126 [btpool0-2] INFO org.hibernate.cfg.Environment - 没有找到hibernate.properties
173 [btpool0-2] INFO org.hibernate.cfg.Environment - 字节码提供程序名称:javassist
282 [btpool0-2] INFO org.hibernate.cfg.Environment - 使用JDK 1.4 java.sql.Timestamp处理
751 [btpool0-2] INFO org.hibernate.cfg.Configuration - 从资源配置:/hibernate.cfg.xml
751 [btpool0-2] INFO org.hibernate.cfg.Configuration - 配置资源:/ hibernate .cfg.xml
3657 [btpool0-2] INFO org.hibernate.cfg.Configuration - 从资源读取映射:user.hbm.xml
4018 [btpool0-2] INFO org.hibernate.cfg。 HbmBinder - 映射类:com.hib.User - >用户
初始SessionFactory创建failed.org.hibernate.InvalidMappingException:无法从资源user.hbm.xml解析映射文档
在端口8888上启动Jetty
[WARN]调度传入的RPC调用时发生异常
go .lang.IllegalArgumentException'抛出一个意外的异常:java.lang.ExceptionInInitializerError
com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
在com.google .gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
在com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPos t(AbstractRemoteServiceServlet.java:62)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
在org.mortbay .jetty.handler.ContextHandler.handle(ContextHandler.java:729)
在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
在org.mortbay.jetty.handler .handlerWrapper.Att (HandlerWrapper.java:152)
在org.mortbay.jetty.Server.handle(Se rver.java:324)
在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
在org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:843)
在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
在org.mortbay .Jetty.HttpConnection.handle .run(QueuedThreadPool.java:488)
导致:java.lang.ExceptionInInitializerError
在hibDomain.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
在hibDomain.HibernateUtil。< clinit> ;(HibernateUtil.java:7)
在rpctest.server.RpctestServiceImpl.addUser(RpctestServiceImpl.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun。 reflect.NativeMethodAccesso rImpl.invoke(未知来源)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
在com.google。 gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
... 22更多
导致:org.hibernate.InvalidMappingException:无法从资源user.hbm中解析映射文档。org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1621)中的
$ org.hibernate.cfg.Configuration.addResource(Configuration.java:602)中的$ x $ .html.bat (Configuration.java:1542)
在org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
在org.hibernate.cfg.Configuration.configure(Configuration.java:1448)
在hibDomain.HibernateUtil。 buildSessionFactory(HibernateUtil.java:11)
... 29更多
导致:org.hibernate.MappingException:类com.hib.User在查找属性时找不到:firstName
在org .hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:97)
在org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:302)
在org.hibernate.cfg.HbmBinder.createProperty (HbmBinder.java:2193)
在org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2170)
在org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2060)
在org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:381)
在org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:295)
在org.hibernate。 cfg.HbmBinder.bindRoot(HbmBinder.java:166)
在org.hibernate.cfg.Configuration.add(Configuration.java:702)
在org.hibernate.cfg.Configuration.addInputStream(配置。 java:537)
在org.hibernate.cfg.Configuration.addResource(Configuration.java:599)
... 36更多
导致:java.lang.ClassNotFoundException:com.hib.User
at java.lang.ClassLoader.findClass(未知源)
在java.lang.ClassLoader.loadClass(未知源)
在java.lang.ClassLoader.loadClass(未知源)
在org。 mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:352)
在org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)
在java.lang.Class。 forName0(Native Method)
在java.lang.Class.forName(未知来源)
在org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:123)
在org.hibernate .util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:93)
... 46更多
[ERROR] 500 - POST / rpctest / testService(127.0.0.1)57个字节
请求头
接受:* / *
X-GWT-排列:HostedMode
X-GWT-Modu le-Base:http://127.0.0.1:8888/rpctest/
内容类型:text / x-gwt-rpc; charset = utf-8
引用:http://127.0.0.1:8888/Rpctest.html?gwt.codesvr=127.0.0.1:9997
接受语言:en-us
接受-Encoding:gzip,deflate
用户代理:Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; Trident / 5.0)
主机:127.0.0.1:8888
内容长度: 168
连接:Keep-Alive
缓存控制:无缓存
响应头
内容类型:文本/简单
入门课程
package rpctest.client;
import rpctest.shared.FieldVerifier;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
/ **
*入口点类定义< code> onModuleLoad()< / code> ;.
* /
public class Rpctest实现EntryPoint {
final TextBox firstName = new TextBox();
final TextBox lastName = new TextBox();
final Button ans = new Button(Add User);
final label label1 = new Label(First Name);
final label label2 = new Label(Last Name);
// final Label errorLabel = new Label();
private VerticalPanel mainpanel = new VerticalPanel();
private HorizontalPanel addpanel1 = new HorizontalPanel();
private HorizontalPanel addpanel2 = new HorizontalPanel();
private final RpctestServiceAsync calNumbers = GWT
.create(RpctestService.class);
/ **
*这是入口点方法。
* /
public void onModuleLoad(){
addpanel1.add(label1);
addpanel1.add(firstName);
addpanel2.add(label2);
addpanel2.add(lastName);
mainpanel.add(addpanel1);
mainpanel.add(addpanel2);
mainpanel.add(ans);
ans.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event){
String name1 = firstName.getValue();
String name2 = lastName.getValue();
calNumbers.addUser(name1,name2,
new AsyncCallback< String>(){
public void onFailure(Throwable catch){
//向用户显示RPC错误消息
Window.alert(检查输入);
}
@Override
public void onSuccess(String result){
// TODO自动生成的方法stub
Window.alert(User is - >+ result);
}
});}
});
//我们可以向窗口小部件添加样式名称
//sendButton.addStyleName(\"sendButton);
//将nameField和sendButton添加到RootPanel
//使用RootPanel.get()获取整个body元素
/*RootPanel.get( nameFieldContainer)添加(名称字段)。
*
RootPanel.get(sendButtonContainer)。add(sendButton);
RootPanel.get(errorLabelContainer)。add(errorLabel); * /
RootPanel.get()。add(mainpanel);
}
}
界面
package rpctest.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath(testService)
public interface RpctestService extends RemoteService {
String addUser(String firstName,String lastName)throws IllegalArgumentException;
}
包rpctest.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface RpctestServiceAsync {
void addUser(String firstName,String lastName,
AsyncCallback< String> callback);
}
实施
package rpctest.server;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import hibDomain.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import hibDomain.User;
import hibDomain.Task;
import rpctest.client.RpctestService;
public class RpctestServiceImpl extends RemoteServiceServlet implements RpctestService {
public String addUser(String name1,String name2)
throws IllegalArgumentException {
事务trns = null;
会话session = HibernateUtil.getSessionFactory()。openSession();
try {
trns = session.beginTransaction();
用户user = new User();
user.setFirstName(name1);
user.setLastName(name2);
session.save(user);
session.getTransaction()。commit();
} catch(RuntimeException e){
if(trns!= null){
trns.rollback();
}
e.printStackTrace();
} finally {
session.flush();
session.close();
}
return name1;
}
}
Hibernate文件
包hibDomain;
public class User {
private Integer id;
private String firstName;
private String lastName;
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
映射文件 p>
<?xml version =1.0?>
<!DOCTYPE hibernate-mapping PUBLIC
- // Hibernate / Hibernate映射DTD 3.0 // EN
http://hibernate.sourceforge.net/hibernate-mapping-3.0 .dtd>
< hibernate-mapping>
< class name =com.hib.Usertable =users>
< id name =idtype =intcolumn =id>
< generator class =native/>
< / id>
< property name =firstName>
< column name =first_name/>
< / property>
< property name =lastName>
< column name =last_name/>
< / property>
< / class>
< / hibernate-mapping>
cfg文件
<?xml version =1.0encoding =utf-8?>
<!DOCTYPE hibernate-configuration PUBLIC
- // Hibernate / Hibernate配置DTD 3.0 // EN
http://www.hibernate.org/dtd/hibernate-configuration -3.0.dtd>
< hibernate-configuration>
< session-factory>
<! - 数据库连接设置 - >
< property name =connection.driver_class> com.mysql.jdbc.Driver< / property>
< property name =connection.url> jdbc:mysql:// localhost / userdata< / property>
< property name =connection.username> root< / property>
< property name =connection.password>< / property>
<! - JDBC连接池(使用内置) - >
< property name =connection.pool_size> 1< / property>
<! - SQL方言 - >
< property name =dialect> org.hibernate.dialect.MySQLDialect< / property>
<! - 启用Hibernate的自动会话上下文管理 - >
< property name =current_session_context_class>线程< / property>
<! - 禁用二级缓存 - >
< property name =cache.provider_class> org.hibernate.cache.NoCacheProvider< / property>
<! - 将所有执行的SQL回显到stdout - >
< property name =show_sql> true< / property>
<! - 启动时删除并重新创建数据库模式 - >
< property name =hbm2ddl.auto> update< / property>
<! - 映射文件 - >
<映射资源=user.hbm.xml/>
< mapping resource =task.hbm.xml/>
< / session-factory>
< / hibernate-configuration>
Util
包hibDomain;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory(){
try {
//从hibernate.cfg.xml创建SessionFactory
返回新的Configuration()。configure()。buildSessionFactory();
}
catch(Throwable ex){
//确保记录异常,因为它可能被吞下
System.err.println(初始SessionFactory创建失败。 + ex);
抛出新的ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
解决方案hibernate类文件(User)位于hibDomain包中。你所做的映射是com.hib.User。将其更改为hibDomain.User,并将其可能工作。
I manage to solve this problem getting hint from post stackoverflow post about GWT. The post tells that as JDBC shouldn'e be on client side, rather on server side.
I am trying to make a simple web application that adds a user to database using GWT RPC with Hibernate, MySql & eclipse IDE. I have already a simple version of hibernate program running & now I am trying to do same using GWT RPC.
Though probably there are certain different practices when using hibernate with RPC. Firstly I had to put jars/libs to war/web.inf/lib add before adding them to classpath, while I made a simple folder in src, put all jars/libraries to that & then added to classpath for simple hibernate app. It continues, compiler then raised error about unavailability of cfg.xml & mapping files which were in the hibernate files package(that contain pojo files). I moved them to src folder & error gone. But now error is about session creation. This time moving Util file to src did not work.
This is directory structure of my project:
src hbm.xml cfg.xml hibDomain(hibernate package) rppctest.client (GWT package) rppctest.server (GWT package)
I am using MySQL on Windows 7. Here are the error messages & my code.
errors
94 [btpool0-2] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA 126 [btpool0-2] INFO org.hibernate.cfg.Environment - hibernate.properties not found 173 [btpool0-2] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist 282 [btpool0-2] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling 751 [btpool0-2] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml 751 [btpool0-2] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml 3657 [btpool0-2] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : user.hbm.xml 4018 [btpool0-2] INFO org.hibernate.cfg.HbmBinder - Mapping class: com.hib.User -> users Initial SessionFactory creation failed.org.hibernate.InvalidMappingException: Could not parse mapping document from resource user.hbm.xml Starting Jetty on port 8888 [WARN] Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String rpctest.client.RpctestService.addUser(java.lang.String,java.lang.String) throws java.lang.IllegalArgumentException' threw an unexpected exception: java.lang.ExceptionInInitializerError at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) Caused by: java.lang.ExceptionInInitializerError at hibDomain.HibernateUtil.buildSessionFactory(HibernateUtil.java:16) at hibDomain.HibernateUtil.<clinit>(HibernateUtil.java:7) at rpctest.server.RpctestServiceImpl.addUser(RpctestServiceImpl.java:19) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) ... 22 more Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource user.hbm.xml at org.hibernate.cfg.Configuration.addResource(Configuration.java:602) at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1621) at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1589) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1568) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1542) at org.hibernate.cfg.Configuration.configure(Configuration.java:1462) at org.hibernate.cfg.Configuration.configure(Configuration.java:1448) at hibDomain.HibernateUtil.buildSessionFactory(HibernateUtil.java:11) ... 29 more Caused by: org.hibernate.MappingException: class com.hib.User not found while looking for property: firstName at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:97) at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:302) at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2193) at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2170) at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2060) at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:381) at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:295) at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:166) at org.hibernate.cfg.Configuration.add(Configuration.java:702) at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:537) at org.hibernate.cfg.Configuration.addResource(Configuration.java:599) ... 36 more Caused by: java.lang.ClassNotFoundException: com.hib.User at java.lang.ClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:352) at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:123) at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:93) ... 46 more [ERROR] 500 - POST /rpctest/testService (127.0.0.1) 57 bytes Request headers Accept: */* X-GWT-Permutation: HostedMode X-GWT-Module-Base: http://127.0.0.1:8888/rpctest/ Content-Type: text/x-gwt-rpc; charset=utf-8 Referer: http://127.0.0.1:8888/Rpctest.html?gwt.codesvr=127.0.0.1:9997 Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) Host: 127.0.0.1:8888 Content-Length: 168 Connection: Keep-Alive Cache-Control: no-cache Response headers Content-Type: text/plain
entry point class
package rpctest.client; import rpctest.shared.FieldVerifier; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; /** * Entry point classes define <code>onModuleLoad()</code>. */ public class Rpctest implements EntryPoint { final TextBox firstName = new TextBox(); final TextBox lastName = new TextBox(); final Button ans = new Button("Add User"); final Label label1 = new Label("First Name"); final Label label2 = new Label("Last Name"); //final Label errorLabel = new Label(); private VerticalPanel mainpanel = new VerticalPanel(); private HorizontalPanel addpanel1 = new HorizontalPanel(); private HorizontalPanel addpanel2 = new HorizontalPanel(); private final RpctestServiceAsync calNumbers = GWT .create(RpctestService.class); /** * This is the entry point method. */ public void onModuleLoad() { addpanel1.add(label1); addpanel1.add(firstName); addpanel2.add(label2); addpanel2.add(lastName); mainpanel.add(addpanel1); mainpanel.add(addpanel2); mainpanel.add(ans); ans.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String name1 = firstName.getValue(); String name2 = lastName.getValue(); calNumbers.addUser(name1,name2, new AsyncCallback<String>() { public void onFailure(Throwable caught) { // Show the RPC error message to the user Window.alert("check your inputs"); } @Override public void onSuccess(String result) { // TODO Auto-generated method stub Window.alert("User is ->"+result); } });} }); // We can add style names to widgets //sendButton.addStyleName("sendButton"); // Add the nameField and sendButton to the RootPanel // Use RootPanel.get() to get the entire body element /*RootPanel.get("nameFieldContainer").add(nameField); * RootPanel.get("sendButtonContainer").add(sendButton); RootPanel.get("errorLabelContainer").add(errorLabel);*/ RootPanel.get().add(mainpanel); } }
interfaces
package rpctest.client; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @RemoteServiceRelativePath("testService") public interface RpctestService extends RemoteService { String addUser(String firstName,String lastName) throws IllegalArgumentException; } package rpctest.client; import com.google.gwt.user.client.rpc.AsyncCallback; public interface RpctestServiceAsync { void addUser(String firstName, String lastName, AsyncCallback<String> callback); }
Implementation
package rpctest.server; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import hibDomain.HibernateUtil; import org.hibernate.Session; import org.hibernate.Transaction; import hibDomain.User; import hibDomain.Task; import rpctest.client.RpctestService; public class RpctestServiceImpl extends RemoteServiceServlet implements RpctestService { public String addUser(String name1, String name2) throws IllegalArgumentException { Transaction trns = null; Session session = HibernateUtil.getSessionFactory().openSession(); try { trns = session.beginTransaction(); User user = new User(); user.setFirstName(name1); user.setLastName(name2); session.save(user); session.getTransaction().commit(); } catch (RuntimeException e) { if(trns != null){ trns.rollback(); } e.printStackTrace(); } finally{ session.flush(); session.close(); } return name1; } }
Hibernate files
package hibDomain; public class User { private Integer id; private String firstName; private String lastName; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
mapping file
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hib.User" table="users" > <id name="id" type="int" column="id" > <generator class="native"/> </id> <property name="firstName"> <column name="first_name" /> </property> <property name="lastName"> <column name="last_name"/> </property> </class> </hibernate-mapping>
cfg file
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/userdata</property> <property name="connection.username">root</property> <property name="connection.password"></property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- Mapping files --> <mapping resource="user.hbm.xml"/> <mapping resource="task.hbm.xml"/> </session-factory> </hibernate-configuration>
Util
package hibDomain; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }
解决方案Your hibernate class file (User) is in "hibDomain" package. where as the mapping you are making is for "com.hib.User". change this to hibDomain.User and it might work.
这篇关于GWT Hibernate程序中的错误2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!