java spring java-ee ejb-3.0

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

  1. 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.

  1. 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>