Я использую плагин Jetty Maven для локального запуска веб-приложения и получаю исключение приведения классов, когда пытаюсь получить ресурс JNDI.
У меня есть конфигурация Jetty с объектом ресурса, который является компонентом конфигурации, который используется через JNDI. Этот класс находится в другом фляге на пути к классам, который находится в каталоге 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>
Внутри сервлета я беру объект вручную:
final MyConfigObject config = (MyConfigObject) applicationContext.getBean("MyConfigObject");
Но когда я пытаюсь получить доступ к сервлету, я получаю:
java.lang.ClassCastException: my.config.MyConfigObject cannot be cast to my.config.MyConfigObject
Я почти уверен, что проблема в загрузке классов, но я не уверен на 100%. Загрузчик классов MyConfigObject является загрузчиком классов солнца по умолчанию, в то время как текущий загрузчик классов потока имеет значение WebAppClassLoader
. Мой файл находится в WEB-INF / lib, и я даже добавил его вручную в extraClasspath в конфигурации плагина maven:
<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>
Я застрял на этом этапе. Кто-нибудь знает, как решить эту проблему?