Я пытаюсь перенести приложение, которое использует шов 2.1.2, от JBoss 5.2 до JBoss 6.4 EAP. Я добавил все зависимые от шва библиотеки в качестве зависимостей maven, и теперь у меня есть развертывание приложения без каких-либо ошибок, и шов-контекст, кажется, успешно создан (и некоторые из потоков работают как ожидалось).IllegalArgumentException при впрыскивании компонента шва
Я наткнулся на проблему, и я надеюсь, что кто-то может помочь с советом.
Мой EAR имеет следующую структуру:
myapp.ear
|
|--- warpck.war
|
|--- ejb.jar
|
|--- client1.jar
|
|--- client2.jar
|
|--- commons.jar
|
|--- loggers.jar
В client1.jar У меня есть следующие Java Bean определены:
@Name(CustomClient.NAME)
@AutoCreate
public class CustomClientImpl implements CustomClient {
...
}
CustomClient интерфейс выглядит следующим образом:
public interface CustomClient extends GeneratedSoapClients {
String NAME = "customClient";
}
Во время развертывания у меня есть следующий журнал:
09:14:44,574 INFO [org.jboss.seam.Component] (ServerService Thread Pool -- 81) Component: customClient, scope: EVENT, type: JAVA_BEAN, class: myapp.client.impl.CustomClientImpl
... так что я предполагаю, что компонент зарегистрирован правильно в контексте шва.
Проблема заключается в том, что я пытаюсь внедрить этот компонент в один из классов из пакета ejb.jar. Я получаю следующее сообщение об ошибке:
09:14:49,319 ERROR [org.jboss.as.ejb3.invocation] (http-/127.0.0.1:8080-1) JBAS014134: EJB Invocation failed on component CustomAdapterWs for method public myapp.webservice.v5.CustomResponse myapp.webservice.impl.CustomAdapterWs.customInformation(myapp.webservice.v5.CustomInformation): javax.ejb.EJBException: java.lang.IllegalArgumentException: could not set field value: CustomAdapterController.customClient
Caused by: java.lang.IllegalArgumentException: could not set field value: CustomAdapterController.customClient
at org.jboss.seam.Component.setFieldValue(Component.java:1927) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.Component.access$600(Component.java:126) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.Component$BijectedField.set(Component.java:2940) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.Component.injectAttributes(Component.java:1736) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.Component.inject(Component.java:1554) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) [jboss-seam-2.1.2.jar:2.1.2]
at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185) [jboss-seam-2.1.2.jar:2.1.2]
Caused by: java.lang.IllegalArgumentException: Could not set field value by reflection: CustomAdapterController.customClient on: myapp.controller.CustomAdapterController with value: class myapp.client.impl.CustomClientImpl_$$_javassist_seam_2
Caused by: java.lang.IllegalArgumentException: Can not set myapp.client.CustomClient field myapp.controller.CustomAdapterController.customClient to myapp.client.impl.CustomClientImpl_$$_javassist_seam_2
CustomAdapterController:
@Name(CustomAdapterController.NAME)
@AutoCreate
public class CustomAdapterController {
public static final String NAME = "CustomAdapterController";
@In(value = CustomClient.NAME)
private CustomClient customClient;
Зависимость Javassist, что я использую (он добавляется в EAR ПОМ):
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
JBoss-deployment- structure.xml:
<jboss-deployment-structure>
<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
<deployment>
<exclusions>
<module name="org.hibernate" slot="main"/>
<module name="org.javassist" slot="main"/>
</exclusions>
<dependencies>
<module name="javax.faces.api" slot="1.2" export="true"/>
<module name="com.sun.jsf-impl" slot="1.2" export="true"/>
<module name="org.apache.log4j" export="true"/>
<module name="org.dom4j" export="true"/>
<module name="org.apache.commons.logging" export="true"/>
<module name="org.apache.commons.collections" export="true"/>
</dependencies>
</deployment>
<sub-deployment name="warpck.war">
<exclusions>
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
</exclusions>
<dependencies>
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
</dependencies>
</sub-deployment>
<sub-deployment name="ejb.jar">
<dependencies>
<module name="client1.jar"/>
</dependencies>
</sub-deployment>
</jboss-deployment-structure>
Все компоненты, определенные в ejb.jar, вводятся правильно. Проблема возникает каждый раз, когда я пытаюсь ввести компонент, определенный в пакете differenect. Может ли кто-нибудь сказать мне, что мне здесь не хватает?