我目前正在开发一个在 IBM Websphere Application Server 7 (Java EE 5) 上运行的小型 EJB 应用程序。该应用程序主要由一个 MDB 组成,用于侦听传入的 MQ 消息,这些消息被转换并存储在 DB 中。目前我正在使用很多单例/工厂来共享配置、映射、数据源查找等。但这实际上导致了一些非常难以测试的代码。解决方案可能是使用(简单)DI 框架,如 guice/spring 来注入不同的实例。问题是:在哪里放置初始化/设置代码?应用程序的主要入口点在哪里?如何将实例注入 MDB?
2 回答
可能值得考虑放弃使用 Guice,并尝试使用 Java EE 5 中已有的注入机制。
关于寻找合适的“启动点”,不幸的是,EJB 规范没有定义让 bean 在启动时运行的方式。但是,EE 规范的 web 配置文件确实有一个——您可以将 WAR 添加到您的应用程序,并设置一个 servlet 侦听器组件:
http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContextListener.html
您可以将其设置为在容器 (WebSphere) 加载和启动应用程序时启动。不过要注意类加载器问题。
使用 Spring,您可以通过 EJB3 拦截器来实现,请参阅http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html#ejb-implementation-ejb3
有关警告的有用信息在 javadoc 中,请务必阅读:http ://static.springsource.org/spring/docs/3.0.x/api/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.html