J'ai trois projets

demo-jca-api qui défini les interfaces
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
com.sample.adapter.HelloWorldConnectionFactory
com.sample.adapter.HelloWorldConnection

demo-jca qui implemente une resource JCA sur cette API
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
package com.sample.adapter.impl;
import com.sample.adapter.HelloWorldConnectionFactory;
 
public class HelloWorldConnectionFactoryImpl implements HelloWorldConnectionFactory
{...

enfin j'ai un war qui utilise cette ressource
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
      @Resource(name="java:/eis/HelloWorld")
      HelloWorldConnectionFactory helloFactory;  
      HelloWorldConnection hello = helloFactory.getConnection();
      return hello.helloWorld();

La ressource se déploie correctement sous Wildfly (debug pas à pas avec éclipse tout est ok)
le war démarre correctement.

lorsque j'appelle la méthode avec la code ci-dessus
j'ai l'exception suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Caused by: java.lang.ClassCastException: Cannot cast com.sample.adapter.impl.HelloWorldConnectionFactoryImpl to com.sample.adapter.HelloWorldConnectionFactory

J'ai changé mon code pour le faire à l’ancienne et voir ce qu'il se passait exactement.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
      Context context = new InitialContext();
      Object object = context.lookup("java:/eis/HelloWorld");
      Class<?> interf = object.getClass().getInterfaces()[0];
      if (HelloWorldConnectionFactory.class.isAssignableFrom(object.getClass())) {
         System.err.println("test");
      }
      HelloWorldConnectionFactory helloFactory = HelloWorldConnectionFactory.class.cast(object);  
      HelloWorldConnection hello = helloFactory.getConnection();
      return hello.helloWorld();

en mode débug cela m'a permis de voir que HelloWorldConnectionFactory.class et interf sont toutes les deux com.sample.adapter.HelloWorldConnectionFactory, mais n'ont pas le même id
et ne référence pas le même classloader.

Cela parait logique puisque interf est chargé par le module rar alors que HelloWorldConnectionFactory est chargé par le war.

mais du coup je ne trouve pas comment faire.

tout cela n'est pas dans un EAR. mon besoin est de partager le RAR entre plusieurs applications.

A+JYT