4

我目前正在開發在IBM Websphere Application Server 7(Java EE 5)上運行的小型EJB應用程序。該應用程序主要由一個MDB組成,用於監聽傳入的MQ消息並將其轉換並存儲在數據庫中。目前我正在使用大量的Singleton/Factories來共享配置,映射,數據源查找等。但是這實際上導致了一些非常難以測試的代碼。解決方案可能使用像guice/spring這樣的(簡單)DI框架來注入不同的實例。問題是:在哪裏放置初始化/設置代碼?應用程序的主要入口在哪裏?我怎樣才能將實例注入MDB?在EJB/MDB應用程序中的DI

回答

1
+0

嗨,謝謝你的建議。不幸的是,我正在使用Guice作爲DI。但是我也可以讓你的攔截器。我會嘗試...這裏的問題,在哪裏以及如何啓動「單個」AppContext/Injector以及如何在攔截器中訪問它?由一個單身?? – Ingo 2011-07-14 14:39:02

+0

@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

2

它可能是值得考慮的,從釜底抽薪使用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問題。

+0

問題是,JEE 5注入只適用於EJB,而不適用於純java類。關於啓動點。是的,我認爲可以使用ServletContextListener,但由於我沒有一個Web應用程序......爲此創建一個Servlet?不過,我至少爲WebSphere找到了一個解決方案,使用StartupBeans和Interceptors。但是,我仍然認爲我必須使用「Singleton」來訪問Injector ... – Ingo 2011-09-09 10:04:26

+0

添加一個servlet並不會真的有太多的工作,特別是因爲你在JEE 5上。如果你認爲你是使用StartupBeans更好,繼續,但通常我會試圖阻止人們使用專有擴展。如果有一天你最終需要支持JBoss等等,你將需要重新設計。如果可能的話,使用WAS8,它支持JEE6/EJB3.1,它定義了一個單例bean。 – Renan 2011-09-10 02:43:18

+0

+對攔截器的使用,他們是一個遊戲改變者。所以EJB規範花了很長時間來包含它們,真讓人傷心。 – Renan 2011-09-10 02:44:29

相關問題