我正在用Spring MVC 3.0創建一個新的Java webapp,並且想盡可能多地使用標準Java EE 6的東西。 (我在Glassfish 3.1.1上)。真正的驅動程序想要使用MVC Web框架而不是JSF。使用Spring MVC 3.0和@EJB註釋而沒有mappedName?
所以我正在尋找將EJB注入到我的Spring控制器的最佳方法。我取得了一些成功,但我並不滿意它的外觀,我希望能找到更好的方法。
這個工作,由通過JNDI查找EJB:
// 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
}
但我不滿意的需要「mappedName」在控制器中的@EJB批註。
有沒有更好的方法來做到這一點?
好消息是,我可以在EJB和Spring bean中使用相同的@Inject註釋,唯一的區別是哪個框架正在創建對象並執行注入。
這只是將問題推到XML,這感覺更糟的國際海事組織。 – wrschneider
@ wrschneider99爲什麼?你想擺脫* mappedName *參數,所以你明白了。這不是問題嗎?否則,你可以在代碼中執行JNDI查找,這將是完全可移植的,但很難看。 – MaDa
我希望有某種方式可以按照約定來發生JNDI查找,這樣一個顯式的mappedName是不必要的。或者,如果有必要,我不介意將配置推送到無狀態註釋,以利用Spring對EJB註釋解釋所固有的任何默認值。 – wrschneider