2017-02-03 3 views
1

Dans mon scénario, j'essaie d'utiliser des adaptateurs JCA pour me connecter à un stockage externe - juste pour essayer cette fonctionnalité de J2EE. J'utilise JBoss EAP 7 et son implémentation condensée ironjacamar.JCA Connector Classloading

i déployer un adapter.rar, qui contient un adapter.jar (ce qui comprend les Connection et ConnectionFactory Interfaces et toutes les implémentations) et META-INF/ironjacamar.xml.

Je Déployez ensuite un fichier app.war, contenant un Bean avec un champ annoté:

@RequestScoped 
public class Bean { 
... 
    @Resource(lookup = "java:/eis/StorageConnectionFactory") 
     private StorageConnectionFactory connectionFactory; 
} 

La guerre contient également la adapter.jar comme bibliothèque - comme il a besoin de connaître de toutes les classes à l'exécution (noClassDefFound etc.)

à mon grand étonnement, le connecteur lui-même semble fonctionner - comme l'exception est d'obtenir:

java.lang.IllegalArgumentException: Impossible de définir le champ conn.StorageConnectionFactoryImpl Bean.connectionFactory à conn.H smConnectionFactoryImp

et sur les interfaces même omettant:

@Resource(lookup = "java:/eis/StorageConnectionFactory") 
    private StorageConnectionFactoryImpl connectionFactory; 

encore

java.lang.IllegalArgumentException: Can not set conn.StorageConnectionFactoryImpl field Bean.connectionFactory to conn.HsmConnectionFactoryImp 

Je vois que le problème est que le adaptateur.rar ne partage Nto le même classloader que le app.war et les deux contiennent les classes correspondantes, conduisant à une sorte de ClassCastException - comment puis-je résoudre ce problème correctement?

Répondre