2011-08-24 17 views
5

我想不使用內置的Websphere 7 jpa插件,而是使用應用程序WEB-INF/lib/open-jpa 2和專有的持久性提供程序。我無法安裝Websphere的OSGI和JPA 2功能包。websphere 7和(基於應用程序)open-jpa 2

最初,我只是試圖加載persistence.xml(版本=「2」不支持)而得到一個sax解析錯誤。這個錯誤是由open-jpa 1.2.3中的一個類拋出的。當我運行websphere/appserver/bin/wsjpaversion.bat時,會顯示open-jpa 1.2.3 jar文件。默認情況下,它會覆蓋應用程序中的open-jpa 2 jar。我創建了一個共享庫,其中包含open-jpa 2 jar,並檢查此配置選項:'爲此共享庫使用隔離的類加載器'。我將我的應用程序類加載器設置爲最後加載父對象,併爲其分配新的共享庫資源。 '版本2'錯誤消失了,但還有另一個問題。當我嘗試初始化一個EntityManager我得到一個錯誤:

Caused by: javax.persistence.PersistenceException: Failed to load provider from META-INF/services 
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:121) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:91) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200) 
    ... 2 more 
Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider 
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:110) 
    ... 11 more 

一個細節:persistence.xml中內,provider元素被設置爲私有PersistenceProviderImpl不是缺省的WebSphere持久性提供。那麼這個websphere默認來自哪裏以及如何阻止它呢? (另一個重要的注意事項:當我完全刪除persistence.xml中,我得到了同樣的錯誤

謝謝

+1

不知道這是否會有所幫助,但你可以改變的類加載器的政策PARENT_LAST(不推薦作爲默認,但如果你是被迫您可能不得不這樣做) –

+0

我有同樣的問題。任何解決方案 –

回答

4

無需安裝的功能包,你註定要失敗。雖然有可能在自己的JPA 實施堵塞,這是不可能做到這一點與JPA API —所以是7聯繫你到1.0版本JPA(見的,例如,here如何做到這一點—沒有階級加載器政策雜耍會改變這種情況,儘管它起初似乎很誘人)。

+0

沒錯這是不值得的麻煩。 Websphere 7的jpa 1太交織在一起了。我認爲,如果你讓自己的持久性提供解析器和排除這是從classpath加載默認的WebSphere持久性提供它是可能的,但對我來說這是不值得的麻煩。 –

+2

@MorganDowell這是最主要的原因,我公司堅持以JPA 1.0,即使是在新的應用程序 - 在我們的服務器承載許多應用程序,新老的同時,我們不得不建立完全不同的服務器組只爲使用JPA 2,這是不是出於經濟原因可行的應用。 – MaDa

相關問題