详解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>
下面,我们将详细说明在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>
相关文章推荐
- PropertyChangeListener简单理解
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring Boot 开发微服务
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 依附品牌做代理 把握创业新机遇
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式