私はjetty mavenプラグインを使用してWebアプリケーションをローカルで実行しています。JNDIリソースをプルしようとすると、クラスキャスト例外が発生します。Jettyクラスロードの問題
私はJNDI経由で利用される構成Beanであるリソースオブジェクトを持つjetty configを持っています。
<Configure class="org.mortbay.jetty.Server">
<New class="org.mortbay.jetty.plus.naming.Resource">
<Arg>config/MyConfigObject</Arg>
<Arg>
<New class="my.config.ConfigObject">
<Set name="foo">bar</Set>
</New>
</Arg>
</New>
</Configure>
これは春を経由して取得されます:
は、サーブレットの内部<bean id="MyConfigObject" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/config/MyConfigObject" />
</bean>
、私は手動でオブジェクトをつかんだこのクラスはlibディレクトリにあるクラスパス上の別のjarファイルに格納されています。
final MyConfigObject config = (MyConfigObject) applicationContext.getBean("MyConfigObject");
しかし、私は、サーブレットにアクセスしようとすると、私が手:
java.lang.ClassCastException: my.config.MyConfigObject cannot be cast to my.config.MyConfigObject
私はこの問題がクラスの読み込みに起因すると確信していますが、私は100%確実ではありません。 MyConfigObjectのクラスローダはデフォルトのsunクラスローダであり、スレッドの現在のクラスローダはjettyのWebAppClassLoader
です。私のjarファイルは、WEB-INF/libにある、と私も設定をプラグインのmavenでextraClasspathに手動で追加しました:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<jettyConfig>${basedir}/test/jetty.xml</jettyConfig>
<webAppSourceDirectory>${basedir}/target/${project.artifactId}</webAppSourceDirectory>
<webXml>${basedir}/war/WEB-INF/web.xml</webXml>
<webAppConfig>
<extraClasspath>${basedir}/target/${project.artifactId}/WEB-INF/lib/myConfigJar-1.0.jar</extraClasspath>
</webAppConfig>
</configuration>
<dependencies>
<dependency>
<groupId>testing</groupId>
<artifactId>myConfigJar</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
私は一種の立ち往生この時点でです。誰もこれを解決する方法を知っていますか?
これは有望ですね。私はそれを修正しようと桟橋にすべての種類の瓶を投げた。これはプロジェクトの依存関係、プラグインの依存関係、libフォルダにあり、extraClasspathに含まれています。私はそれを試みます。 – hisdrewness
私はこれを見てからしばらくしてきましたが、私はプラグインの依存関係をjarファイルにするだけで、pom(と基本的にlibはそれが私の戦争がどのように構築されているか)から依存関係を削除するか、提供する。 – hisdrewness