我正在使用jetty maven插件在本地運行Web應用程序,並且在嘗試拉入JNDI資源時收到類轉換異常。Jetty Classloading問題
我有一個資源對象的jetty配置,它是通過JNDI使用的配置bean。這個類位於classpath中的不同的罐子是在lib目錄:
<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>
這是通過Spring檢索:
<bean id="MyConfigObject" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/config/MyConfigObject" />
</bean>
裏面一個servlet的,我抓住手動對象:
final MyConfigObject config = (MyConfigObject) applicationContext.getBean("MyConfigObject");
但是,當我嘗試訪問該servlet,我得到:
java.lang.ClassCastException: my.config.MyConfigObject cannot be cast to my.config.MyConfigObject
我很確定問題是由於類加載,但我不是100%確定的。 MyConfigObject的類加載器是默認的sun類加載器,而線程的當前類加載器是jetty的WebAppClassLoader
。我的罐子是在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 2012-02-08 06:17:41
我看了這一段時間已經有一段時間了,但是我通過對jar的插件依賴性來解決它,並且從pom中移除了依賴關係(並且本質上是lib,因爲這是我的戰爭的構建方式),或者設置依賴關係作用域提供。 – hisdrewness 2012-03-20 14:09:27