2009-09-02 13 views
2

私は、複数のJDBCデータソースとJTAを持つプロジェクトに取り組んでいます。ビルドツールとしてMavenを使用しています。開発中にJettyプラグイン(6.1.20)を使用してアプリケーションを実行したいと考えています。Mavenビルド環境でのAtomikos + Jetty - Classloaderの問題?

Atomikosをトランザクションマネージャとして使用するようにJettyを設定しようとしています。私はAtomikos documentation from Jettyに従っていますが、Jettyの起動は失敗し、クラスローダの問題のように見えます。

ここに私の構成の関連ビットがあります。私pom.xml

runtimeスコープの依存関係:

<dependency> 
    <groupId>com.atomikos</groupId> 
    <artifactId>transactions-jta</artifactId> 
    <version>3.5.7</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>com.atomikos</groupId> 
    <artifactId>transactions-jdbc</artifactId> 
    <version>3.5.7</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>javax.transaction</groupId> 
    <artifactId>jta</artifactId> 
    <version>1.1</version> 
    <scope>runtime</scope> 
</dependency> 

マイ/WEB-INFに位置jetty-env.xmlは(突堤で自動検出):最後にtxのインスタンス化に失敗したビットがあれば、ある

<New id="userTxImpl" class="com.atomikos.icatch.jta.UserTransactionImp" /> 

<New id="tx" class="org.mortbay.jetty.plus.naming.Transaction"> 
    <Arg> 
     <Ref id="userTxImpl" /> 
    </Arg> 
</New> 

私はそれを残して、桟橋はうまく始まります(もちろん、JNDI経由でUserTransactionを公開しません)。

STACKTRACE

2009-09-02 18:42:18.910::WARN: Config error at <New id="tx" class="org.mortbay.jetty.plus.naming.Transaction"><Arg> 
      <Ref id="userTxImpl"/> 
     </Arg></New> 
2009-09-02 18:42:18.910::WARN: Failed startup of context [email protected]{/administrator,C:\workspace\administrator\src\main\webapp} 
java.lang.IllegalStateException: No Constructor: <New id="tx" class="org.mortbay.jetty.plus.naming.Transaction"><Arg> 
      <Ref id="userTxImpl"/> 
     </Arg></New> on [email protected]{/administrator,C:\workspace\administrator\src\main\webapp} 
    at org.mortbay.xml.XmlConfiguration.newObj(XmlConfiguration.java:631) 
    at org.mortbay.xml.XmlConfiguration.configure(XmlConfiguration.java:256) 
    at org.mortbay.xml.XmlConfiguration.configure(XmlConfiguration.java:190) 
    at org.mortbay.jetty.plus.webapp.EnvConfiguration.configureWebApp(EnvConfiguration.java:130) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1247) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:124) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
    at org.mortbay.jetty.Server.doStart(Server.java:224) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:383) 
    at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210) 
    at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184) 
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:579) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:498) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmentForProject(DefaultLifecycleExecutor.java:265) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:191) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:149) 
    at org.apache.maven.DefaultMaven.execute_aroundBody0(DefaultMaven.java:223) 
    at org.apache.maven.DefaultMaven.execute_aroundBody1$advice(DefaultMaven.java:304) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:1) 
    at org.apache.maven.embedder.MavenEmbedder.execute_aroundBody2(MavenEmbedder.java:904) 
    at org.apache.maven.embedder.MavenEmbedder.execute_aroundBody3$advice(MavenEmbedder.java:304) 
    at org.apache.maven.embedder.MavenEmbedder.execute(MavenEmbedder.java:1) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:176) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:408) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:351) 
    at org.codehaus.classworlds.Launcher.main(Launcher.java:31) 

org.mortbay.jetty.plus.naming.Transactionjavax.transaction.UserTransaction取るコンストラクタを持っているように、これは、クラスローダの問題のように見える、とcom.atomikos.icatch.jta.UserTransactionImpjavax.transaction.UserTransactionを実装して、まだ突堤はそれが適切なコンストラクタを使用する必要はありません文句を言います。

私は明らかに何かが不足していますが、それは何ですか?

ありがとうございます!

答えて

6

UserTransactionクラスが複数配置されている場合があります。これらが異なるクラスローダーからロードされた場合、この種のエラーが発生する可能性があります。

UserTransactionのJettyのライブラリを確認し、アプリケーションのライブラリを確認してください。あなたは1つのコピーを持つべきです。

+1

独自のUserTransactionに付属するjboss-j2eeへの間接的依存が問題でした。本当にありがとう!私は怒っていると思った。 – Henning

4

私はJTA jarを「実行時」の要件として指定するのではなく、「提供」要件として指定するべきだと考えています。 servlet-apiおよびJMSと同様に、個々の実装者は独自のAPIのコピーを提供し、Sun jarを提供することで、それらを混乱させる可能性があります。

2

私はこれがすでに答えられていることを認識していますが、私が経験した悲しみを他の人に救うために私の経験を振りたいと思います。

私も同様の問題がありましたが、geronimo-jtaのバージョンの競合が原因でした。具体的には、アトミックコに依存していたものは、桟橋で使用されていたものと合わないものでした。私は、例えば、atomikosから1を除外しなければならなかった:

com.atomikos 取引-必需-すべて 3.5.9 org.apache.geronimo.specs のgeronimo-jta_1.0.1B_spec

0

テイラーのように、私はまったく同じ問題で数時間を爆破しました。私はJPAプロバイダとしてHibernateを使用しており、それ自体のJTA User TranactionにはMavenの脆弱性がありました。この依存関係を除外すると、私はその問題を過ぎてしまった。

関連する問題