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

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>







你可能感兴趣的:(设计模式,spring,代理,ejb)