您的位置:首页 > 编程语言 > Java开发

详解Spring应用作为EJB客户端调用EJB方法

2016-04-07 15:15 549 查看
Spring框架最初是作为对EJB应用的替代出现的,但是EJB3的改进使得EJB得到了重生。那么,Spring框架与EJB能否联合使用呢,答案是肯定的。

下面,我们将详细说明在Spring应用中如何访问EJB服务。

通常,访问EJB服务就是调用EJB对象的方法。这首先要进行JNDI查找获取EJB对象的接口,然后调用create()创建EJB对象,最后调用EJB对象的方法。

为了避免上述过程的代码重复,EJB应用往往使用Service Locator设计模式和Business Delegate设计模式。

Spring框架中,对无状态会话EJB的访问进行了优化,通过Spring框架提供的EJB代理对象,可以避免EJB调用模式的不足,简化对EJB的调用。

假设EJB组件都实现了com.mycom.MyComponent接口。

1.访问本地无状态会话EJB

<bean id="myComponent"
class="org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean">
<property name="jndiName" value="ejb/myBean"/>
<property name="businessInterface" value="com.mycom.MyComponent"/>
</bean>

<bean id="myController" class="com.mycom.myController">
<property name="myComponent" ref="myComponent"/>
</bean>说明:LocalStatelessSessionProxyFactoryBean代理了EJB对象,被代理的EJB对象实现了com.mycom.MyComponent接口。
           com.mycom.myController类作为EJB客户端引用了EJB组件。

为了实现XML配置对代理对象的透明性,与上述定义等价的配置如下:

<jee:local-slsb id="myComponent" jndi-name="ejb/myBean"
business-interface="com.mycom.MyComponent"/>

<bean id="myController" class="com.mycom.myController">
<property name="myComponent" ref="myComponent"/>
</bean>注意<jee:local-slsb>的用法。

2.访问远程无状态会话EJB
<bean id="myComponent"
class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
<property name="jndiName" value="ejb/myBean"/>
<property name="businessInterface" value="com.mycom.MyComponent"/>
</bean>

<bean id="myController" class="com.mycom.myController">
<property name="myComponent" ref="myComponent"/>
</bean>

同样,与之等价的<jee:remote-slsb>配置如下:
<jee:remote-slsb id="myComponent" jndi-name="ejb/myBean"
business-interface="com.mycom.MyComponent"/>

<bean id="myController" class="com.mycom.myController">
<property name="myComponent" ref="myComponent"/>
</bean>

3.访问EJB3的无状态会话EJB的其他方法
前述方法适用于所有EJB组件,对EJB3的无状态会话EJB的访问,还可以使用通用的JNDI代理对象。

org.springframework.jndi.JndiObjectFactoryBean

<jee:jndi-lookup>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息