【问题标题】:Failed to retrieve "entityManagerFactory" using Geronimo使用 Geronimo 检索“entityManagerFactory”失败
【发布时间】:2010-05-26 16:28:49
【问题描述】:

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

我得到的异常:

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


【问题讨论】:

    标签: java spring jpa toplink-essentials geronimo


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨,这似乎是正确的方法,但我找不到 context.xml 的任何替代方法。我更新了我的问题。
    • 您好!由于使用 Hibernate,我有一个问题。我在哪里可以找到“org.hibernate.ejb.HibernatePersistence”类?我决定使用 maven 并将以下工件作为依赖项“org.hibernate:hibernate-entitymanager”。 Maven 在我的项目中添加了三个与休眠相关的 jar。其中两个使用注释连接,第三个是核心,但它们都不包含必需的类“org.hibernate.ejb.HibernatePersistence”。我遵循的说明:docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/…
    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 2019-09-25
    • 2016-04-30
    • 1970-01-01
    • 2016-09-21
    • 2018-10-07
    • 2015-02-27
    • 2014-04-02
    相关资源
    最近更新 更多