5

我不想使用内置的 Websphere 7 jpa 插件,而是使用应用程序 WEB-INF/lib/open-jpa 2 和专有的持久性提供程序。我无法为 Websphere 安装 OSGI 和 JPA 2 功能包。

最初,我只是尝试加载persistence.xml(不支持version="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 时,我得到了同样的错误

谢谢

4

1 回答 1

4

如果不安装功能包,您将面临一场失败的战斗。虽然可以插入您自己的 JPA实现,但使用 JPA API则无法做到这一点——因此 WAS 7 将您绑定到 JPA 的 1.0 版本(例如,请参阅此处如何完成——无类加载器策略杂耍会改变这一点,尽管一开始看起来很诱人)。

于 2011-09-11T23:19:23.230 回答