2012-04-19 99 views
5

我有一個使用JPA/Hibernate和Google Guice的應用程序。 Guice在ServletContextListener引導,它自己設置EntityManagerFactoryJBoss AS7自動加載JPA

該應用在Tomcat 7上正常工作,但是當我部署到JBoss AS7時,它失敗了,因爲JBoss決定在調用我的ServletContextListener之前自動設置JPA。

我該如何讓JBoss自動初始化JPA,而不是等我的ServletContextListener這麼做?

更新

根據詹姆斯下面提供的鏈接:

在應用部署,檢測JPA使用(例如persistence.xml中或@ PersistenceContext /單位註釋)並注入Hibernate依賴關係進入應用程序部署。

https://docs.jboss.org/author/display/AS71/JPA+Reference+Guide#JPAReferenceGuide-Introduction

我需要弄清楚如何禁用此「自動檢測」功能。

更新#2

JPA的集裝箱管理,可以通過添加以下屬性persistence.xml中被禁用:

<property name="jboss.as.jpa.managed" value="false" /> 

根據this topic,截至2012年2月,這一功能僅夜間可用。

+0

這是很老,但我遇到了同樣的問題。我的額外問題是,我沒有使用persistence.xml,而是用java代碼聲明實體管理器工廠,似乎在那裏添加屬性被忽略,並沒有什麼區別。任何想法,如果它可以用這種方法解決? – andreadi 2014-04-24 10:43:10

+0

@andreadi不知道。我只是在AS7上測試了一個應用程序,但從未在該項目中使用它。你最好打賭可能會問你一個新的問題與你的具體情況。 – 2014-04-24 14:20:11

回答

2

JBoss AS7是一個完整的Java EE服務器。這意味着JPA實現與它捆綁在一起。在Tomcat中,您必須提供您自己的JPA實現,並且基本上像運行Java SE一樣運行JPA。

我建議您閱讀AS7的JPA reference文檔。

你也得到了CDI,所以沒有真正的需要Guice。你也許可以使用吉斯代替CDI,但老實說,我不能告訴你我是如何:-)

+0

我以前使用過Oracle WebLogic 11g,默認情況下它並沒有爲你強制加載JPA,所以JBoss會這麼做似乎很奇怪。儘管我會檢查鏈接。 – 2012-04-19 16:21:39

+0

它可能會看到你的persistence.xml並加載Hibernate和JPA API。我很確定大多數EE服務器都這樣做,但我不能保證。我做了一些搜索,並沒有真正發現如何禁用它。您可能可以禁用JPA子系統並將Hibernate與應用程序捆綁在一起。 – 2012-04-19 16:26:28

+0

我還沒有找到任何方法來禁用此功能。如果沒有其他人提供有關如何禁用JPA自動檢測的信息,我會在下週初回到辦公室時接受它。感謝您對此的幫助,您的鏈接至少說明了發生的事情。 – 2012-04-20 20:18:53