我目前正在開發在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