1

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

我得到的例外:

java.lang.IllegalStateException:ClassLoader [org.apache.geronimo.kernel.config.MultiParentClassLoader] 不提供“addTransformer(ClassFileTransformer)”方法。指定自定义 LoadTimeWeaver 或使用 Spring 的代理启动 Java 虚拟机:-javaagent:spring-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”建议,我找到了为 Tomcat 上的 Web 应用程序指定特殊类加载器的示例。它为此目的使用context.xml文件。尽管我的 Geronimo 使用 Tomcat,但我没有成功实现context.xml。正如在下一 本手册中所说, Geronimo的context.xml的替代方案是geronimo-tomcat.xml,但它的语法不提供更改类加载器的任何可能性。我还需要帮助!


4

1 回答 1

1

Toplink 需要加载时编织支持。我猜在 Geronimo 中可以通过使用META-INF/context.xml检测 jar 并将其放入lib文件夹来配置它,就像在 Tomcat 中一样,请参见此处

编辑:所以,您的问题是 Toplink 需要类转换支持。LocalContainerEntityManagerFactoryBean当 Toplink 的实体管理器<context:load-time-weaver />在Spring 的配置(因此,您有 3 个选项:

  1. 使用不需要类转换的 JPA 实现而不是 Toplink(例如,Hibernate)
  2. 不要在 Spring 配置文件中配置 Toplink 的实体管理器。使用 Geronimo 配置(我不知道如何)配置它并使用 JNDI 获取它。
  3. 对于疯子:为 Geronimo实现一个自定义的LoadTimeWeaverTransformerAgent.addTransformer() (我猜它会使用)。
于 2010-05-26T16:57:23.967 回答