J B*_*lay 5 java db2 websphere serialization ejb-3.0
我有一个部署在两个EAR中的java Web应用程序 - 一个用于UI层(包含WAR模块),另一个用于业务层(包含EJB模块).这两个层都部署到WebSphere Application Server 7.这些层通过EJB 3.0无状态会话bean连接.通过JNDI查找bean.
我们使用Hibernate来实现持久性和DB2数据库.
返回远程EJB调用时,客户端发生以下错误:
java.rmi.MarshalException: CORBA MARSHAL 0x4942f896 No; nested exception is:
org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : Mismatched serialization UIDs : Source (RepId RMI:java.util.Date:AC117E28FE36587A:686A81014B597419) = 686A81014B597419 whereas Target (RepId RMI:com.ibm.db2.jcc.DBTimestamp:AA774DBE96ECCE99:7AFCE1FB570D419C) = 7AFCE1FB570D419C vmcid: IBM minor code: 896 completed: No
Run Code Online (Sandbox Code Playgroud)
的java.util.Date对象上字段被从休眠返回作为com.ibm.db2.jcc.DBTimestamp字段,其延伸java.sql.Timestamp,其延伸java.util.Date.因为它是java.util.Date可序列化的子类,所以不应该这样处理吗?
我和一位经验丰富的人谈过,他说可能的原因是DBTimestampWeb和业务层WAS服务器之间的JVM版本或类版本不同.两台服务器都具有相同的JVM,WAS和JAR版本.
我还有一个本地WAS 7服务器,其中两个层都部署到同一台服务器.仍然通过对localhost的JNDI调用远程解析EJB.该应用程序在我的本地服务器上运行正常 我所知道的唯一区别是WAS的不同微版本,以及将这两个层部署到同一台服务器.
问题的原因是什么?是DBTimestamp在Web层上找不到类,还是类的版本不同?或者它是多态性的问题,还是完全不同的东西?
除了答案之外,我还要感谢任何有关调试的建议 - 我没有想法.
我通过将相关的 DB2 驱动程序 JAR 打包到 Web 层 EAR 中,设法“修复”了该问题。
因此,问题的原因是该类在 Web 层的类路径上不可用。我需要调查环境的设置以找出它不可用的原因,但至少现在问题已经清楚了。
| 归档时间: |
|
| 查看次数: |
12271 次 |
| 最近记录: |