在项目中看到后台报了这个警告。分析之。
原因是组件接口中的参数为Node类型,而Node不是序列化。
EJB远程调用要求参数必须序列化。但是EJB还可以本地调用,其前提条件就是调用者和被调用着必须在一个JVM中,也就是在一个应用中吧。
所以,weblogic检测到参数没有序列化,所以强制使用本地调用,即call-by-reference。
其实即使参数进行了序列化,我们自己也可以在weblogic-ejb-jar.xml中配置属性
<enable-call-by-reference>true</enable-call-by-reference>
来让服务器进行本地引用的调用,以此来提高性能,省去网络传输的消耗。
当然,前提是调用者和被调用着在一个jvm中。
throws java.rmi.RemoteException' in EJB 'DynamicValidationEJB' contains a parameter of type: 'org.dom4j.Node' which is not Serializable. Though the EJB 'DynamicValidationEJB' has call-by-reference set to false, this parameter is not Serializable and hence will be passed by reference. A parameter can be passed using call-by-value only if the parameter type is Serializable.>
以下是转载:
远程接口采用Call-by-value 是传值,传值就要对参数进行copy,所以要求参数必须是可序列化,性能也比较低。因此参数在ejb内部改变对外部对象没有影响。
本地接口采用Call-by-reference 是传引用,可以提高性能,不过这样作,有可能改变参数的值,此时的参数可以是非序列化的
如果采用本地接口就必须采用Call-by-reference,不是可以,是必须
如果采用远程接口,必须用Call-by-Value,但是调用关系完全在一个VM内的时候,
WebLogic可以优化成Call-by-reference,这时后远程调用就自动退化为本地调用,性能上有提高。那个警告就是说你禁止了这个优化,可以不理。建议打开优化提升性能。
如果开发的应用将web和ejb部署成一个ear文件,那么ejb和ejb之间的调用,web和ejb之间的调用都是采用Call-By-Reference的方式,能大大提高效率。
如果你不采用这种方式,那么你使用的是remote的方式,无论处于一个JVM中,都是采用Call-By-Value的方式调用的。
1。可以使用call-by-reference的条件,必须在同一个application中。
2。call-by-reference的设置,在weblogic.xml中
<weblogic-enterprise-bean>
<entity-descriptor>
<ejb-name>testBean</ejb-name>
...
<enable-call-by-reference>True</enable-call-by-reference>
</entity-descriptor>
</weblogic-enterprise-bean>
分享到:
相关推荐
EJB中ejb-jar文件配置详解 EJB(Enterprise JavaBean)是一种Java技术,用于开发企业级应用程序。EJB容器提供了许多功能,如事务处理、安全认证、资源管理等,以便开发者更方便地开发企业级应用程序。在EJB中,ejb-...
ejb-api-3.0-sources ejb3.0资源文件,源代码文件
7. **ejb-3_0-pfd-spec-simplified.pdf**:这份文档重点讲解EJB 3.0的简化模型,如何通过注解实现更简洁的编码风格,以及如何利用依赖注入和容器服务来提高开发效率。 理解并熟练掌握EJB 3.0规范,对于开发高效、...
maven-ejb-plugin-2.1.jar
标签:agent-ejb-3.0.1-sources.jar,agent,ejb,3.0.1,sources,jar包下载,依赖包
jar包,官方版本,自测可用
在EJB-JBoss-Web的实例中,开发者可以创建和管理EJB组件,这些组件通常包括会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean(Message-Driven Beans)。会话bean负责业务逻辑,实体bean持久化...
3. **选择部署描述符**:可以选择使用标准的`ejb-jar.xml`或特定服务器的配置文件。 4. **配置JNDI**:设置命名服务,使得客户端能够查找并访问EJB组件。 5. **测试与调试**:确保应用按预期工作。 #### 五、JPA在...
在使用Hibernate3的时候,发现程序编译好了,在运行时总是抛出java.lang.NoClassDefFoundError: javax/persistence/EntityListeners异常,经查找是因为缺少ejb3-persistence.jar包。应该是这个~
ejb-jar元素是EJB发布描述器的根元素,它包含一个可选的EJB-JAR文件的描述,可选显示的名称,可选小图标的文件名,可选的大图标的文件名,必须的所有被包含的enterprise bean 的结构信息 ,可选的应用装配描述器,可选的...
标签:agent-ejb-3.0.0-sources.jar,agent,ejb,3.0.0,sources,jar包下载,依赖包
maven-ejb-plugin-2.3.jar
maven-ejb-plugin-2.2.jar
maven-ejb-plugin-2.2.1.jar
maven-ejb-plugin-2.0.jar
maven-ejb-plugin-1.7.jar
maven-ejb-plugin-1.7.3.jar
ejb3-persistence-1.0.2.GA-sources.jar ejb3 jbpm5 源码
ejb3-persistence-1.0.2.GA.jar
标签:agent-ejb-3.0-beta-1.jar,agent,ejb,3.0,beta,1,jar包下载,依赖包