Sto creando una nuova webapp Java con Spring MVC 3.0 e voglio utilizzare il più possibile Java EE 6 standard. (Sono su Glassfish 3.1.1.) Il vero driver sta volendo utilizzare un framework web MVC piuttosto che JSF.Utilizzo dell'annotazione Spring MVC 3.0 e @EJB wtihout mappedName?
Quindi sto cercando il modo migliore per iniettare EJB nei miei controller Spring. Ho avuto un certo successo ma non sono contento di come appare e speravo di trovare un modo migliore.
questo ha funzionato, trovando la via EJB 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
}
Ma io sono infelice con la necessità della "mappedName" sul l'annotazione @EJB nel controller.
C'è un modo migliore per farlo?
La buona notizia, tuttavia, è che posso usare la stessa annotazione @Inject negli EJB e nei bean Spring e l'unica differenza è quale framework sta creando l'oggetto e facendo l'iniezione.
Questo semplicemente spinge il problema in XML, che si sente peggio IMO. – wrschneider
@ wrschneider99 Perché? Volevi sbarazzarti del parametro * mappedName * e così l'hai ottenuto. Non era questa la domanda? Altrimenti si potrebbe fare la ricerca JNDI nel codice e questo sarebbe completamente portatile, ma brutto. – MaDa
Speravo che ci fosse un modo in cui la ricerca JNDI potesse avvenire per convenzione, in modo tale che un nome mappato esplicito non fosse necessario. O se necessario, non mi dispiacerebbe spingere la configurazione sull'annotazione Stateless, per sfruttare tutti i valori predefiniti inerenti all'interpretazione di Spring dell'annotazione EJB. – wrschneider