我已经用 spring、spring security 制作了一个 mavenized web 应用程序......现在,我想添加用于数据库访问的 ejb 模块,我在互联网上寻找,但我没有找到明确的东西,因为这是我第一次与 EJB。 我想在我的 Controller 中使用@EJB之类的东西 喜欢”
@Stateless(name = "CustomerServiceImpl")
public class CustomerServiceImpl implements CustomerService
@EJB
private MyEjb myEjb;
如果有教程或任何其他帮助,我如何在 spring 上下文中配置它。会很棒,谢谢你
最佳答案
要将您的 ejb 3 bean 注入(inject)到 spring bean 中,您可以按照以下步骤操作。 1. 创建你的 Spring bean 2. 使用远程和本地接口(interface)创建 EJB 3.编写实现类 例如
package com.ejb;
@Local
public interface MyEjbLocal{
public String sendMessage();
}
package com.ejb;
@Remote
public interface MyEjbRemote{
public String sendMessage();
}
@Stateless(mappedName = "ejb/MessageSender")
public class MyEjbImpl implements MyEjbLocal, MyEjbRemote{
public String sendMessage(){
return "Hello";
}
}
以上是同时使用远程和本地接口(interface)的EJB3的例子
现在我们创建注入(inject)这个 ejb 的 Spring bean。
package com.ejb;
@Service
public class MyService {
private MyEjbLocal ejb;
public void setMyEjbLocal(MyEjbLocal ejb){
this.ejb = ejb;
}
public MyEjbLocal getMyEjbLocal(){
return ejb;
}
}
我们已经在 spring 中添加了 ejb 的实例,但是我们需要将它注入(inject)到 spring 的 spring-config.xml 中。 在spring bean中注入(inject)ejb有两种方法
- 第一种方式
<bean id ="myBean" class="org.springframework.ejb.access.LocalStetelessSessionProxyFactoryBean">
<property name="jndiName" value="ejb/MessageSender#com.ejb.MyEjb=Local />
<property name="businessInterface" value="com.ejb.MyEjbLocal" />
</bean>
注意:我这里使用的是本地界面,您可以根据需要使用远程。
- 另一种注入(inject)ejb的方法是
<jee:remote-slsb id="messageSender"
jndi-name="ejb/MessageSender#com.ejb.MyEjbLocal"
business-interface="com.ejb.MyEjbLocal"
home-interface="com.ejb.MyEjbLocal"
cache-home="false" lookup-home-on-startup="false"
refresh-home-on-connect-failure="true" />
因此,当 bean 被初始化时,ejb 将被注入(inject)到您的 spring bean 中。
关于java - EJB 3 注入(inject) spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23008810/