EJB 3注入spring bean

elp*_*zio 5 java spring java-ee ejb-3.0

我已经制作了一个带有弹簧,弹簧安全性的mavenized Web应用程序......现在,我想添加ejb模块进行数据库访问,我正在互联网上查找,但我没有找到清楚的东西,因为这是我第一次使用EJB.我想在我的控制器中使用@EJB之类的东西,比如"

@Stateless(name = "CustomerServiceImpl")
public class CustomerServiceImpl implements CustomerService 


@EJB
private MyEjb myEjb;
Run Code Online (Sandbox Code Playgroud)

如果有教程或任何其他帮助,我如何在spring上下文中配置它.这将是伟大的,谢谢你

Vis*_*ote 5

要在spring bean中注入ejb 3 bean,您可以按照以下步骤操作.1.创建Spring bean 2.使用远程和本地接口创建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";   
 }
}
Run Code Online (Sandbox Code Playgroud)

上面是EJB3的示例,它使用远程和本地接口

现在我们创建Spring bean,我们在其中注入这个ejb.

package com.ejb;

@Service
public class MyService {

   private MyEjbLocal ejb;

   public void setMyEjbLocal(MyEjbLocal ejb){
        this.ejb = ejb;
  }

  public MyEjbLocal getMyEjbLocal(){
       return ejb;
  }
}
Run Code Online (Sandbox Code Playgroud)

我们在spring中添加了ejb的实例,但是我们需要在spring的spring-config.xml中注入它.有两种方法可以在spring bean中注入ejb

  1. 第一道路
<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>
Run Code Online (Sandbox Code Playgroud)

注意:我在这里使用了Local接口,您可以根据需要使用Remote.

  1. 注入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" />
Run Code Online (Sandbox Code Playgroud)

因此当bean在那时被初始化时,ejb将被注入你的spring bean中.