В моем сценарии я пытаюсь использовать адаптеры JCA для подключения к внешнему хранилищу - просто попробовать эту функцию J2EE.JCA Connector Classloading
Я использую JBoss EAP 7 и его упакованную реализацию ironjacamar.
я развернуть adapter.rar
, который содержит adapter.jar
(это содержит Connection
и ConnectionFactory
Интерфейсы и все реализации) и META-INF/ironjacamar.xml
.
Я тогда развернуть app.war
файл, содержащий Bean с аннотированным полем:
@RequestScoped
public class Bean {
...
@Resource(lookup = "java:/eis/StorageConnectionFactory")
private StorageConnectionFactory connectionFactory;
}
Война также содержит adapter.jar как библиотеки - как он должен знать все классы во время выполнения (NoClassDefFound и т.д.)
к моему удивлению, сам разъем, кажется, работает - как получить исключение:
java.lang.IllegalArgumentException: Невозможно установить conn.StorageConnectionFactoryImpl поле Bean.connectionFactory к conn.H smConnectionFactoryImp
и ommitting интерфейсы даже:
@Resource(lookup = "java:/eis/StorageConnectionFactory")
private StorageConnectionFactoryImpl connectionFactory;
еще
java.lang.IllegalArgumentException: Can not set conn.StorageConnectionFactoryImpl field Bean.connectionFactory to conn.HsmConnectionFactoryImp
Я вижу, что проблема в том, что adapter.rar делает Nto одни и те же загрузчик классов как app.war и оба содержат соответствующие классы, что приводит к своего рода ClassCastException - как правильно решить эту проблему?