无法使用Geronimo检索“entityManagerFactory”

时间:2010-05-26 16:28:50

标签: java spring jpa toplink-essentials geronimo

我刚开始研究Spring框架。我目前的目标是通过Geronimo服务器上的JPA(TopLink **提供程序)从我的bean访问数据库。但我无法克服获取entityManagerFactory的问题。

我得到的例外:

  

java.lang.IllegalStateException:   类加载器   [org.apache.geronimo.kernel.config.MultiParentClassLoader]   不提供   'addTransformer(ClassFileTransformer)'   方法。指定自定义   LoadTimeWeaver或启动Java   Spring的代理虚拟机:   -javaagent:弹簧agent.jar中

我访问它的方式:

    <context:load-time-weaver />

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

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
    <bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <tx:annotation-driven />

如果有人可以在不使用“-javaagent:spring-agent.jar”选项的情况下帮助我,我将非常感激。


搜索解决方案。第一次尝试。

在“axtavt”advice之后,我找到了为Tomcat上的Web应用程序指定特殊类加载器的示例。它为此目的使用 context.xml 文件。虽然我的Geronimo使用Tomcat,但我没有成功实现 context.xml 。如下所述 manual Geronimo的 context.xml 的替代方法是 geronimo-tomcat.xml ,但它的语法不提供更改类加载器的任何可能性。我还需要帮助!


1 个答案:

答案 0 :(得分:1)

Toplink需要加载时织入支持。 我想在Geronimo中可以使用META-INF/context.xml配置并将检测jar放入lib文件夹,如Tomcat中所示,请参阅here

编辑:因此,您的问题是Toplink需要类转换支持。当在Spring的配置(LocalContainerEntityManagerFactoryBean)中配置Toplink的实体管理器时,它尝试使用Spring对类转换的支持(<context:load-time-weaver />),但是Spring没有对Geronimo中的类转换的内置支持。所以,你有3个选择:

  1. 使用不需要类转换而不需要Toplink的JPA实现(例如,Hibernate)
  2. 不要在Spring配置文件中配置Toplink的实体管理器。使用Geronimo配置(我不知道如何)配置它并使用JNDI获取它。
  3. 对于疯子:为Geronimo实现自定义LoadTimeWeaver(我想,它会使用TransformerAgent.addTransformer())。