Estoy haciendo una nueva aplicación web Java con Spring MVC 3.0 y quiero usar todo el material estándar de Java EE 6 que pueda. (Estoy en Glassfish 3.1.1.) El verdadero controlador es querer usar un framework web MVC en lugar de JSF.¿Utilizando Spring MVC 3.0 y la anotación @EJB sin mappedName?
Así que estoy buscando la mejor manera de inyectar EJB en mis controladores Spring. Tuve cierto éxito, pero no estoy contento con su aspecto y esperaba encontrar una mejor manera.
Esto funcionó, encontrando el EJB a través de JNDI:
// EJB
@Stateless
public class Service {
@PersistenceContext(name="MAIN")
private EntityManager em;
public void doSomething() { .... }
}
// Spring
@Controller
public class HomeController {
@EJB(mappedName="java:global/springtest/Service")
private Service service;
// controller methods use service
}
Pero estoy satisfecho con la necesidad de "mappedName" en la anotación @EJB en el controlador.
¿Hay una mejor manera de hacerlo?
La buena noticia, sin embargo, es que puedo usar la misma anotación @Inject en EJBs y Spring beans y la única diferencia es qué marco está creando el objeto y haciendo la inyección.
Eso solo lleva el problema a XML, que se siente peor IMO. – wrschneider
@ wrschneider99 ¿Por qué? Querías deshacerte del parámetro * mappedName * y así lo conseguiste. ¿Esa no era la pregunta? De lo contrario, podría hacer la búsqueda JNDI en el código y eso sería totalmente portátil, pero feo. – MaDa
Tenía la esperanza de que hubiera alguna forma de que la búsqueda JNDI pudiera ocurrir por convención, de modo que un mappedName explícito fuera innecesario. O si es necesario, no me importaría llevar la configuración a la anotación sin estado, para aprovechar cualquier defecto inherente a la interpretación de Spring de la anotación EJB. – wrschneider