java - EJB 3 inyección en frijoles de primavera
spring java-ee (2)
He hecho una aplicación web mavenizada con seguridad de primavera, primavera ... Ahora, quiero agregar el módulo ejb para el acceso a la base de datos, estaba buscando en internet pero no encontré algo claro porque es la primera vez que uso EJB. Quiero usar algo como @EJB en mi controlador como "
@Stateless(name = "CustomerServiceImpl")
public class CustomerServiceImpl implements CustomerService
@EJB
private MyEjb myEjb;
y cómo puedo configurarlo en primavera si hay un tutorial o cualquier otra ayuda. Será genial y gracias
Para inyectar su ejb 3 bean en Spring Bean puede seguir los pasos a continuación. 1. Crea tu Spring Bean 2. Crea tu EJB con su Remote and Local Interface 3. Escribe Implementations class por ej.
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";
}
}
arriba está el ejemplo de EJB3 que usa tanto la interfaz remota como la local
Ahora creamos el Spring Bean en el que inyectamos este ejb.
package com.ejb;
@Service
public class MyService {
private MyEjbLocal ejb;
public void setMyEjbLocal(MyEjbLocal ejb){
this.ejb = ejb;
}
public MyEjbLocal getMyEjbLocal(){
return ejb;
}
}
Hemos agregado la instancia de ejb en primavera, sin embargo necesitamos inyectar esto en spring-config.xml de primavera. Hay 2 formas de inyectar el ejb en Spring Bean
- Primera forma
<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>
Nota: He utilizado la interfaz Local aquí, puede usar Remoto según su necesidad.
- Otra forma de inyectar el ejb es
<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" />
Entonces, cuando el bean se inicialice en ese momento, el ejb se inyectará en su bean de primavera.
Eche un vistazo aquí: http://docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#ejb-access-local
Puede inyectar EJB usando la inyección setter. Configure su bean de esta manera:
<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>
También puede usar la <jee:local-slsb>
para poder inyectar su EJB:
<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>