J2EE综合:Java EJB容器的存取和实现(二)

2014-11-23 22:05:09 · 作者: · 浏览: 1
ring的确是更好的选择。

不过,需要特别注意的是,使用了Spring并不是说我们就不能用EJB了,实际上,Spring大大简化了从中访问和实现EJB组件或只实现(EJB组件)其功能的复杂性。另外,如果通过Spring来访问EJB组件服务,以后就可以在本地EJB组件,远程EJB组件,或者是POJO(简单Java对象)这些变体之间透明地切换服务的实现,而不需要修改客户端的代码。

本章,我们来看看Spring是如何帮助我们访问和实现EJB组件的。尤其是在访问无状态SessionBean(SLSBs)的时候,Spring特别有用,现在我们就由此开始讨论。

访问EJB1.1.概念要调用本地或远程无状态SessionBean上的方法,通常客户端的代码必须进行JNDI查找,得到(本地或远程的)EJBHome对象,然后调用该对象的"create"方法,才能得到实际的(本地或远程的)EJB对象。前后调用了不止一个EJB组件上的方法。

为了避免重复的底层调用,很多EJB应用使用了服务定位器(ServiceLocator)和业务委托(BussinessDelegate)模式,这样要比在客户端代码中到处进行JNDI查找更好些,不过它们的常见的实现都有明显的缺陷。例如:

通常,若是依赖于服务定位器或业务代理单件来使用EJB,则很难对代码进行测试。

在仅使用了服务定位器模式而不使用业务委托模式的情况下,应用程序代码仍然需要调用EJBHome组件的create方法,还是要处理由此引入的异常。导致代码仍然保留了与EJBAPI的耦合性以及EJB编程模型的复杂性。

实现业务委托模式通常会导致大量的冗余代码,因为我们不得不编写很多方法,而它们所做的仅仅是调用EJB组件的同名方法。

Spring采用的方法是允许创建并使用代理对象,一般是在Spring的ApplicationContext或BeanFactory里面进行配置,这样就和业务代理类似,只需要少量的代码。我们不再需要另外编写额外的服务定位器或JNDI查找的代码,或者是手写的业务委托对象里面冗余的方法,除非它们可以带来实质性的好处。

1.2.访问本地的无状态SessionBean(SLSB)

假设有一个web控制器需要使用本地EJB组件。我们遵循前人的实践经验,于是使用了EJB的业务方法接口(BusinessMethodsInterface)模式,这样,这个EJB组件的本地接口就扩展了非EJB特定的业务方法接口。让我们假定这个业务方法接口叫MyComponent.

<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)