我刚开始研究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 ,但它的语法不提供更改类加载器的任何可能性。我还需要帮助!
答案 0 :(得分:1)
Toplink需要加载时织入支持。 我想在Geronimo中可以使用 META-INF/context.xml
配置并将检测jar放入lib
文件夹,如Tomcat中所示,请参阅here。
编辑:因此,您的问题是Toplink需要类转换支持。当在Spring的配置(LocalContainerEntityManagerFactoryBean
)中配置Toplink的实体管理器时,它尝试使用Spring对类转换的支持(<context:load-time-weaver />
),但是Spring没有对Geronimo中的类转换的内置支持。所以,你有3个选择:
TransformerAgent.addTransformer()
)。