`

EJB开发,Caused by: java.rmi.MarshalException: Failed to communicate.

 
阅读更多

 

异常:

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。这样看到了错误就方便修改了。

 

 

 

 

 

 

分享到:
评论

相关推荐

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入...虽然现代的Java框架如Spring、EJB等提供了更高级别的分布式服务,但理解RMI的基本原理对于深入学习Java分布式系统仍然是必要的。

    java的ejb.jar包

    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....

    EJB.rar_ejb_site:www.pudn.com

    EJB规范由Java Community Process(JCP)制定,是Java EE(Java Platform, Enterprise Edition)的一部分。"精通EJB第二版"是深入学习这一技术的重要参考资料,它涵盖了EJB的最新发展和最佳实践。 在EJB 2.x时代,...

    javax.ejb.jar下载

    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....

    EJB开发——Java 2 SDK.rar_java ppt

    【标题】"EJB开发——Java 2 SDK.rar_java ppt" 涉及的主要知识点是企业级Java Bean(Enterprise JavaBeans,简称EJB)的开发,以及与Java 2 Software Development Kit(SDK)相关的编程概念。这个标题暗示了一个PPT...

    java RMI实现代码

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行远程对象的调用。RMI使得开发者可以像调用本地对象一样调用网络上的对象,极大地简化了...

    ejb3-persistence(找不到javax.persistence.Entity问题解决)

    “Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity”,查找资料发现是缺少jar包. 添加此包就OK了。 更多说明:https://blog.csdn.net/kingmax54212008/article/details/82762624

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    JAVA RMI

    RMI与EJB(Enterprise JavaBeans)、JMS(Java Message Service)等其他分布式技术相比,RMI更适合轻量级、低延迟的场景,而EJB更适合企业级应用,提供了更全面的服务,如事务管理、安全性等。JMS则适用于异步消息...

    ejb.rar_site:www.pudn.com

    在`ejb.rar`这个压缩包中,`EJB3.pdf`可能包含了对EJB 3.0规范的详细解释,这是EJB的一个重大改进版本,引入了更简洁的API和注解,降低了EJB的使用门槛,使其更接近普通Java SE的编程体验。而`部署描述符.txt`可能是...

    java_rmi.zip

    5. **JRE中的RMI工具**:Java运行环境提供了一些命令行工具来支持RMI开发,如`rmiregistry`启动RMI注册表,`rmic`编译远程接口的stub和skeleton,`rmid`管理RMI的daemon等。 6. **安全性**:RMI虽然提供了便利,但...

    JAVA rmi教学课件

    6. `java.rmi`和`java.rmi.CORBA`:RMI-IIOP相关API,RMI-IIOP是RMI的一种扩展,它使用CORBA协议进行通信,常用于EJB环境。 定位远程对象的过程通常涉及使用RMI命名服务,如通过JNDI(Java Naming and Directory ...

    JAVA RMI入门教程

    6. `java.rmi`: RMI-IIOP的相关API,RMI-IIOP结合了RMI和CORBA协议,用于EJB环境。 7. `java.rmi.CORBA`: 提供RMI-IIOP的轻量级API,以及与RMI-IIOP运行时的交互接口。 定位远程对象的过程通常涉及RMI的命名服务,...

    java RMI技术讲解

    综上所述,Java RMI是一种强大的分布式计算工具,它不仅能够简化分布式Java应用程序的开发,还能够在多种环境中实现高效的远程服务调用。然而,它的局限性也意味着在某些场景下可能需要考虑其他替代方案。

    java-RMI技术讲解

    JRMP是专为Java对象定制的协议,这意味着RMI对于非Java语言开发的应用系统支持有限。具体来说,RMI只能支持客户端和服务器端都是Java程序的远程调用,无法与其他非Java语言编写的应用进行通信。 #### 4. RMI的使用...

    Apress.Pro.EJB.3.Java.Persistence.API.May.2006.zip

    《Apress.Pro.EJB.3.Java.Persistence.API.May.2006》是一部关于企业级JavaBeans(EJB)3.0版本的专著,主要聚焦于Java持久性API(JPA)。EJB 3.0是Java EE平台的一个重要组成部分,它极大地简化了企业级应用的开发...

    EJB3.rar_site:www.pudn.com

    **EJB(Enterprise JavaBean)** 是Java Enterprise Edition(JavaEE)的重要组成部分,它提供了一种规范化的框架来开发和部署企业级的分布式应用程序。EJB标准由Java Community Process(JCP)制定,旨在简化服务器...

    java_in_rmi.rar_Java RMI_RMI java_rmi _精通rmi

    Java Remote Method ...总的来说,这个压缩包提供了一个全面的学习路径,从基础到精通,帮助初学者掌握Java RMI技术,从而能够开发出跨网络的高效分布式应用。通过结合文档和实际编程练习,可以有效提升RMI的技能。

    java.net.SocketTimeoutException: Receive timed out

    EJB是Java企业级应用开发的一部分,它提供了一种标准的方式来创建可部署的、分布式的企业级组件。考虑到SocketTimeoutException通常出现在网络通信中,EJBTest001可能包含了使用EJB进行网络通信的代码,其中可能触发...

Global site tag (gtag.js) - Google Analytics