我目前正在开发在IBM Websphere Application Server 7(Java EE 5)上运行的小型EJB应用程序。该应用程序主要由一个MDB组成,用于监听传入的MQ消息并将其转换并存储在数据库中。目前我正在使用大量的Singleton/Factories来共享配置,映射,数据源查找等。但是这实际上导致了一些非常难以测试的代码。解决方案可能使用像guice/spring这样的(简单)DI框架来注入不同的实例。问题是:在哪里放置初始化/设置代码?应用程序的主要入口在哪里?我怎样才能将实例注入MDB?在EJB/MDB应用程序中的DI
回答
它可能是值得考虑的,从釜底抽薪使用Guice,并尝试使用Java EE 5中已有的注入机制。
关于寻找合适的“启动点”,不幸的是,EJB规范没有定义在启动时可以运行bean的方式。然而,EE规范的Web Profile中确实有一个 - 你可以一个WAR添加到您的应用程序,并设置一个servlet侦听器组件:
http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContextListener.html
您可以将其设置为启动时加载应用程序并由容器(WebSphere)启动。不过要注意classloader问题。
问题是,JEE 5注入只适用于EJB,而不适用于纯java类。关于启动点。是的,我认为可以使用ServletContextListener,但由于我没有一个Web应用程序......为此创建一个Servlet?不过,我至少为WebSphere找到了一个解决方案,使用StartupBeans和Interceptors。但是,我仍然认为我必须使用“Singleton”来访问Injector ... – Ingo 2011-09-09 10:04:26
添加一个servlet并不会真的有太多的工作,特别是因为你在JEE 5上。如果你认为你是使用StartupBeans更好,继续,但通常我会试图阻止人们使用专有扩展。如果有一天你最终需要支持JBoss等等,你将需要重新设计。如果可能的话,使用WAS8,它支持JEE6/EJB3.1,它定义了一个单例bean。 – Renan 2011-09-10 02:43:18
+对拦截器的使用,他们是一个游戏改变者。所以EJB规范花了很长时间来包含它们,真让人伤心。 – Renan 2011-09-10 02:44:29
- 1. 如何在应用程序中组织DI框架的使用?
- 2. 在混合助推应用程序中的角度DI
- 3. 在应用程序中使用DI与共享库
- 4. OWIN可以在ASP.NET MVC应用程序中替换DI吗?
- 5. 不能从Guice中的Spring Cache中驱逐DI应用程序
- 6. Windows移动应用程序中的IoC/DI容器
- 7. 仅在应用程序启动时使用DI容器?
- 8. 如何在使用Ninject for DI的MVC应用程序中使用AsyncController?
- 9. 在AngularJS应用程序中使用DI时出现奇怪的行为
- 10. 用于多个ASP.Net应用程序的一个DI容器
- 11. 用于.Net应用程序的IoC和DI框架
- 12. 我的新Webpack应用程序出现DI错误
- 13. DI与应用程序中从别处调用的单元测试?
- 14. Autofac DI在控制台应用程序中无法正常工作
- 15. 在传统应用系统中应用DI实践
- 16. 在Android应用程序中调用应用程序的API
- 17. 在我的Android应用程序中使用Maps应用程序
- 18. 如何防止在Java EE应用程序无法启动时,春DI失败
- 19. 加载应用程序中的应用程序作为单应用程序中的子应用程序
- 20. 我应该在Spring 4应用程序中使用DI作为Jersey API客户端吗?
- 21. 在Android应用程序中的Flash应用程序集成
- 22. 在iOS应用程序中的应用程序存储大小
- 23. 在我的Android应用程序中打开vimeo应用程序?
- 24. 在MVC应用程序中的应用程序根?
- 25. 一个在应用程序中登录的web应用程序
- 26. 在我的应用程序中打开外部应用程序
- 27. 应用程序与应用程序在Django中的接口
- 28. DI框架可以在EJB应用程序中提供单例作用域。 (不同的类加载器使用)?
- 29. 应用程序测试应该在应用程序包中
- 30. ADK FTDI USB驱动程序
嗨,谢谢你的建议。不幸的是,我正在使用Guice作为DI。但是我也可以让你的拦截器。我会尝试...这里的问题,在哪里以及如何启动“单个”AppContext/Injector以及如何在拦截器中访问它?由一个单身?? – Ingo 2011-07-14 14:39:02
@Ingo我自己并没有使用Guice,但这里有一些帖子描述了使用(session)bean作为Guice注入器'持有者':[http://attias.myftp.org/attias/index.php/Guice_and_EJB ],[http://musingsofaprogrammingaddict.blogspot.com/2009/03/guice-tutorial-part-3-integrating-guice.html],[http://a-developer-life.blogspot.com/2010/11 /injecting-into-ejb3-with-google-guice.html] – francisnovilla 2011-07-19 10:27:04