异常:
Caused by: java.rmi.MarshalException: Failed to communicate. Problem during marshalling/unmarshalling; nested exception is: java.io.InvalidClassException: org.hibernate.exception.NestableDelegate; local class incompatible: stream classdesc serialVersionUID = -6787310117729693199, local class serialVersionUID = 1009500911220254726 at org.jboss.remoting.transport.socket.SocketClientInvoker.handleException(SocketClientInvoker.java:127) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:658) at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:141) at org.jboss.remoting.Client.invoke(Client.java:1858) at org.jboss.remoting.Client.invoke(Client.java:718) at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.remoting.ClusterChooserInterceptor.invoke(ClusterChooserInterceptor.java:90) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor.invoke(ClusteredIsLocalInterceptor.java:55) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessClusteredProxy.invoke(StatelessClusteredProxy.java:113) ... 53 more Caused by: java.io.InvalidClassException: org.hibernate.exception.NestableDelegate; local class incompatible: stream classdesc serialVersionUID = -6787310117729693199, local class serialVersionUID = 1009500911220254726 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:245) at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:133) at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:120) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:914) at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:602) at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:141)
根据异常信息初步判断是远程调用时,类对象在打包、解包过程中发生的异常。
但是这段异常常常让人产生误解,难道本地与远程服务器的类不一样,所以不能正确转换?
local class incompatible: stream classdesc serialVersionUID = -6787310117729693199, local class serialVersionUID = 1009500911220254726
其实我这个错误时这样产生的,Web层(jetty) 调用EJB服务, EJB层调用Hibernate持久层,有如下代码
try { return getSkuDao().save(sku); } catch(RuntimeException e){ logger.error(e.getMessage(),e); throw e; }
恰恰此时hibernate层因为执行HQL报错,错误往上抛,但是上面的代码没有捕获到该异常,所以服务端没有打印出异常信息;于是继续往上抛,到web层不能解析该异常,所以真正的错误信息没被打印出来,反而报了解析异常。要想知道到底是什么错误,catch时就应该写成Exception或Throwable。这样看到了错误就方便修改了。
相关推荐
Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入...虽然现代的Java框架如Spring、EJB等提供了更高级别的分布式服务,但理解RMI的基本原理对于深入学习Java分布式系统仍然是必要的。
javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....
Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....
“Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity”,查找资料发现是缺少jar包. 添加此包就OK了。 更多说明:https://blog.csdn.net/kingmax54212008/article/details/82762624
EJB规范由Java Community Process(JCP)制定,是Java EE(Java Platform, Enterprise Edition)的一部分。"精通EJB第二版"是深入学习这一技术的重要参考资料,它涵盖了EJB的最新发展和最佳实践。 在EJB 2.x时代,...
【标题】"EJB开发——Java 2 SDK.rar_java ppt" 涉及的主要知识点是企业级Java Bean(Enterprise JavaBeans,简称EJB)的开发,以及与Java 2 Software Development Kit(SDK)相关的编程概念。这个标题暗示了一个PPT...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行远程对象的调用。RMI使得开发者可以像调用本地对象一样调用网络上的对象,极大地简化了...
RMI与EJB(Enterprise JavaBeans)、JMS(Java Message Service)等其他分布式技术相比,RMI更适合轻量级、低延迟的场景,而EJB更适合企业级应用,提供了更全面的服务,如事务管理、安全性等。JMS则适用于异步消息...
在`ejb.rar`这个压缩包中,`EJB3.pdf`可能包含了对EJB 3.0规范的详细解释,这是EJB的一个重大改进版本,引入了更简洁的API和注解,降低了EJB的使用门槛,使其更接近普通Java SE的编程体验。而`部署描述符.txt`可能是...
《经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》由李刚著作,是Java EE领域一本专业且实用的书籍。本书可作为《轻量级java ee企业应用实战》的姊妹篇,介绍了Java EE规范的三大主要规范JSF...
5. **JRE中的RMI工具**:Java运行环境提供了一些命令行工具来支持RMI开发,如`rmiregistry`启动RMI注册表,`rmic`编译远程接口的stub和skeleton,`rmid`管理RMI的daemon等。 6. **安全性**:RMI虽然提供了便利,但...
6. `java.rmi`和`java.rmi.CORBA`:RMI-IIOP相关API,RMI-IIOP是RMI的一种扩展,它使用CORBA协议进行通信,常用于EJB环境。 定位远程对象的过程通常涉及使用RMI命名服务,如通过JNDI(Java Naming and Directory ...
6. `java.rmi`: RMI-IIOP的相关API,RMI-IIOP结合了RMI和CORBA协议,用于EJB环境。 7. `java.rmi.CORBA`: 提供RMI-IIOP的轻量级API,以及与RMI-IIOP运行时的交互接口。 定位远程对象的过程通常涉及RMI的命名服务,...
综上所述,Java RMI是一种强大的分布式计算工具,它不仅能够简化分布式Java应用程序的开发,还能够在多种环境中实现高效的远程服务调用。然而,它的局限性也意味着在某些场景下可能需要考虑其他替代方案。
JRMP是专为Java对象定制的协议,这意味着RMI对于非Java语言开发的应用系统支持有限。具体来说,RMI只能支持客户端和服务器端都是Java程序的远程调用,无法与其他非Java语言编写的应用进行通信。 #### 4. RMI的使用...
《Apress.Pro.EJB.3.Java.Persistence.API.May.2006》是一部关于企业级JavaBeans(EJB)3.0版本的专著,主要聚焦于Java持久性API(JPA)。EJB 3.0是Java EE平台的一个重要组成部分,它极大地简化了企业级应用的开发...
**EJB(Enterprise JavaBean)** 是Java Enterprise Edition(JavaEE)的重要组成部分,它提供了一种规范化的框架来开发和部署企业级的分布式应用程序。EJB标准由Java Community Process(JCP)制定,旨在简化服务器...
Java Remote Method ...总的来说,这个压缩包提供了一个全面的学习路径,从基础到精通,帮助初学者掌握Java RMI技术,从而能够开发出跨网络的高效分布式应用。通过结合文档和实际编程练习,可以有效提升RMI的技能。
EJB是Java企业级应用开发的一部分,它提供了一种标准的方式来创建可部署的、分布式的企业级组件。考虑到SocketTimeoutException通常出现在网络通信中,EJBTest001可能包含了使用EJB进行网络通信的代码,其中可能触发...