1

我正在尝试将使用 JPA 2.0 和 EclipseLink 实现的 webapp 部署到 WebLogic 10.3.6 服务器。

在开发应用程序时,我使用了 Tomcat 服务器对其进行测试。由于 Tomcat 不是应用服务器,我使用 Spring 的加载时间编织器进行编织:

<bean id="emFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property value="classpath:META-INF/myPersistence.xml" name="persistenceXmlLocation" />
    <property name="dataSource" ref="dataSource" />
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
</bean>

Oracle 的文档说“动态字节码编织在符合 Java EE 5 的应用程序服务器(例如 Oracle WebLogic)中自动启用”,因此我loadTimeWeaver从实体管理器工厂 bean 中删除了该属性:

<bean id="emFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property value="classpath:META-INF/myPersistence.xml" name="persistenceXmlLocation" />
    <property name="dataSource" ref="dataSource" />
</bean>

但是当我尝试将我的 webapp 部署到 WebLogic 时,它会引发以下异常:

java.lang.IllegalStateException:在没有指定 LoadTimeWeaver 的情况下无法应用类转换器

我是否需要做一些事情来启用运行时编织,即使 Oracle 的文档说它默认启用?

也许是因为 WebLogic 10.3.6 实现了 Java EE 5 规范而不是 Java EE 6,因此它不支持开箱即用的 JPA 2.0:我需要安装一个补丁并将我的 persistence.xml 文件重命名为其他内容(在本例中为 myPersistence.xml),以便 WebLogic 找不到它。如果是这种情况,如何在服务器中启用运行时编织?

4

1 回答 1

2

解决了。我只需要将它添加到 applicationContext.xml:

<context:load-time-weaver />
于 2013-10-25T08:58:41.183 回答