1

Springフレームワークの勉強を始めたばかりです。現在の目標は、Bean から Geronimo サーバー上の JPA (TopLink** プロバイダー) を介してデータベースにアクセスすることです。しかし、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 では、Tomcat のように、instrumentation jar を使用してフォルダーに配置することで構成できると思います。ここを参照してください。META-INF/context.xmllib

編集:あなたの問題は、Toplink がクラス変換のサポートを必要とすることです。Toplink のエンティティー・マネージャーが Spring の構成で構成されている場合 ( LocalContainerEntityManagerFactoryBean)、Spring のクラス変換サポートを使用しようとします<context:load-time-weaver />が ( )、Spring には Geronimo のクラス変換のサポートが組み込まれていません。したがって、3 つのオプションがあります。

  1. Toplink の代わりにクラス変換を必要としない JPA 実装を使用します (Hibernate など)。
  2. Spring 構成ファイルで Toplink のエンティティーマネージャーを構成しないでください。Geronimo 構成を使用して構成し (方法はわかりません)、JNDI を使用して取得します。
  3. マニア向け: Geronimo 用のカスタムLoadTimeWeaverを実装します(これは を使用すると思いますTransformerAgent.addTransformer())。
于 2010-05-26T16:57:23.967 に答える