快速业务通道

Spring延迟加载EJB代理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Spring延迟加载EJB代理

时间:2010-12-26 BlogJava 蒋家狂潮

在Spring中提供了两个代理工厂Bean来代理EJB的访问:

- LocalStatelessSessionProxyFactoryBean - 用来访问本地EJB(EJB和它的客户端在同一个容器中)。

- SimpleRemoteStatelessSessionProxyFactoryBean - 用来访问远程EJB(EJB和它的客户端在独立的容器中)。

例如:

<bean id="businessComponent" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean" lazy-init=”true”> <property name="jndiName"> <value>ejb/location.business.comp</value> </property> <property name="businessInterface"> <value>com.test.LocationBusinessComponent</value> </property> </bean>

SimpleRemoteStatelessSessionProxyFactoryBean是个代理工厂Bean类,该Bean通过jndiName属性就可以查找到这个EJB的home接口。在容器启动的时 候,SimpleRemoteStatelessSessionProxyFactoryBean通过该JNDI来查找EJB 的远程Home接口,接着它会把这个接口缓存起来,这样每次在businessComponent上的方法被调用时,代理就会调用远程接口上的create()方法来取得这个EJB的引用,而不需要再进行同样的JNDI查找了。businessInterface属性等同与在其他远程服务代理工厂Bean中使用的serviceInterface,它表示这个EJB服务依附在LocationBusinessComponent接口上。

关于这个声明,一件需要注意的事情就是<Bean>元素的lazy-init属性。在《spring in action》中提到:当任何一个EJB代理工厂Bean在ApplicationContext中使用时,这一 点是相当重要的。这是因为在Spring配置文件被装载进来的时候,ApplicationContext风格的Bean工厂预先实例化了单实例的 Bean。这通常是一件好事,但它可能会导致EJB代理工厂Bean在EJB被绑定到名字服务之前,试图查找EJB的home接口。把lazy-init 设置为true,可确保这个EJB在装载时不会试图查找home接口,直到它首次被使用为止,这将会留有足够的时间来把EJB绑定到名称服务上。

经过尝试,lazy-init属性并不奏效,我的代码场景是通过一个init的servlet去载入一个引用了businessComponent的bean,设置了lazy-init属性之后,spring容器依然会在载入时初始化businessComponent。通过查阅spring的api后发现,最好的解决办法是设置lookupHomeOnStartup属性,将该属性为false,spring将会在第一次访问ejb时才去获取home接口。测试之后,该配置起作用了,更改后的配置如下:

<bean id="businessComponent" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> <property name="jndiName"> <value>ejb/location.business.comp</value> </property> <property name="businessInterface"> <value> com.test.LocationBusinessComponent</value> </property> <property name="lookupHomeOnStartup"> <value>false</value> </property> </bean>

更详细的信息可参考关于SimpleRemoteStatelessSessionProxyFactoryBean 的api:http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.html

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号