Posted on 2006-07-19 18:39
Earth 閱讀(352)
評論(0) 編輯 收藏 所屬分類:
Life
去掉與Hibernate有關的HibernateUtil,HibernateFilter, 以及所有的Hibernate配置和映射文件~_~
IUserDAO, IMessageDAO等DAO接口基本不變,只需要在類前面加上@Remote~_~
DAO接口的實現基本不變,只需要在類前面加上@Stateless,并定義一個叫javax.persistence.EntityManager的萬能類(和Spring中的
getHibernateTemplate()差不多但是比它還要簡單~_~)
DAO接口的EJB3實現像下面這樣
@Stateless
public
?
class
?MessageDAO?
implements
?IMessageDAO?{
????@PersistenceContext(type
=
PersistenceContextType.TRANSACTION,?unitName?
=
?
"
message
"
)
????
private
?EntityManager?manager;
????
public
?
void
?saveMessage(Message?m)?{
????????manager.persist(m);
????}
????
public
?
void
?updateMessage(Message?m)?{
????????
if
?(manager.find(Message.
class
,?m.getId())?
==
?
null
)?{
????????????
throw
?
new
?RuntimeException(
"
Unable?to?update?
"
?
+
?m
????????????????????
+
?
"
?because?there?is?no?prior?version
"
);
????????}
????????manager.merge(m);
????}
????
public
?List?getMessages()?{
????????String?sql?
=
?
"
select?m?from?Message?m
"
;
????????
return
?manager.createQuery(sql).getResultList();
????}
????
public
?
void
?deleteMessage(String?id,?String?userId)?{
????????Message?msg?
=
?getMessage(id);
????????
if
?(msg?
==
?
null
)?{
????????????
throw
?
new
?MessageDAOException(
"
Can't?find?the?message?u?wanna?del!
"
);
????????}
????????
if
?(
!
msg.getUser().getId().equals(userId))?{
????????????
throw
?
new
?MessageDAOException(
"
U?cannot?del?others'?message!
"
);
????????}
????????
if
?(manager.contains(msg))?{
????????????manager.remove(msg);
????????}?
else
?{
????????????removeMessage(msg.getId());
????????}
????}
????
public
?
void
?removeMessage(String?id)?{
????????manager.createQuery(
"
DELETE?FROM?Message?m?WHERE?m.id?=?:mid
"
)
????????????????.setParameter(
"
mid
"
,?id).executeUpdate();
????}
????
public
?Message?getMessage(String?id)?{
????????
return
?(Message)?manager.find(Message.
class
,?id);
????}
}
(看看是不是比Hibernate3.0簡單,好像Hibernate3.2和這個一樣,偶還沒試過3.2)
最后最關鍵的是實體定義和映射,到regsaga上面看了篇講解Annotation的文章
(
http://wiki.redsaga.com/confluence/display/HART/Mapping+entity+bean+associations+relationships
)
原來Hibernate和EJB3的注解出自同門,我好像又明白了一點什么~_~
改完了,要開始測試了,真是激動人心。
確保D:\jboss-4.0.4.GA\server\default\lib\mysql-connector-java-3.1.12-bin.jar
然后拷貝D:\jboss-4.0.4.GA\docs\examples\jca\mysql-ds.xml
到D:\jboss-4.0.4.GA\server\default\deploy并做小部分修改
~_~。
好像還要加一個persistence.xml一起打在jar包里邊。寫一個Ant任務吧,大家都這么做(還沒有在Eclipse下打包并發布的經驗,只會
JBuilder~_~)
幾番周折,給Ant加了打jar包打war包以及deploy的任務。
啟動JBoss-4.0.4-GA,出了些錯誤,一一改正。。
JUnit測試通過了,但打開JSP頁面注冊時報錯
18:31:28,859 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.reflect.UndeclaredThrowableException
?at $Proxy177.saveUser(Unknown Source)
?at org.apache.jsp.regist_jsp._jspService(regist_jsp.java:64)
?at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
?at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
?at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
?at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
?at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
?at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
?at cn.hxex.message.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:127)
?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
?at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
?at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
?at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
?at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
?at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
?at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
?at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
?at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
?at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
?at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
?at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
?at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
?at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
?at java.lang.Thread.run(Thread.java:595)
Caused by: java.io.NotSerializableException: cn.hxex.message.model.User
?at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075)
?at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1245)
?at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1069)
?at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)
?at java.rmi.MarshalledObject.<init>(MarshalledObject.java:92)
?at org.jboss.aop.joinpoint.MethodInvocation.writeExternal(MethodInvocation.java:318)
?at org.jboss.serial.persister.ExternalizePersister.writeData(ExternalizePersister.java:58)
?at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.describeObject(ObjectDescriptorFactory.java:275)
?at org.jboss.serial.objectmetamodel.DataContainer$DataContainerOutput.writeObject(DataContainer.java:386)
?at org.jboss.serial.io.MarshalledObjectForLocalCalls.<init>(MarshalledObjectForLocalCalls.java:38)
?at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:57)
?at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
?at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
?... 29 more
始終沒法解決,非常傷心,也很郁悶。決定先放棄一段時間。。。。。。。。