websphere 7和(基于应用程序)open-jpa 2

时间:2011-08-24 23:49:49

标签: persistence openjpa websphere-7

我不想使用内置的Websphere 7 jpa插件,而是使用应用程序WEB-INF / lib / open-jpa 2和专有的持久性提供程序。我无法为Websphere安装OSGI和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 个答案:

答案 0 :(得分:4)

如果不安装功能包,那么你就是在打一场失败的战斗。虽然可以插入自己的JPA 实现,但是使用JPA API 是不可能的 - 因此WAS 7将您绑定到JPA的1.0版本(请参阅例如,here如何做到这一点 - 没有类加载器策略杂耍会改变它,虽然它起初看起来很诱人。)