Comunicación remota de JNDI: Wildfly a JBoss AS 5.1.0.GA

Arquitectura: Cliente Windows -> Servicios Wildfly JAX-RS -> Sistema heredado JBoss 5.1.0.GA.

Obtengo una excepción java.lang.ClassCastException: javax.naming.Reference no se puede convertir en com.interfaces.GroupBookingManagerRemote al comunicarse aquí entre los Servicios JAX-RS de Wildfly y el sistema heredado JBoss 5.1.0.GA.

Como me estoy comunicando desde Wildfly a JBoss COMO 5.1.0.GA, estoy intentando conectar usando JNDI.

En mi Wildfly Server Maven pom incluyo:

 jboss jnp-client 4.2.2.GA  

Esto me da acceso a las clases e interfaces org.jnp. * Requeridas.

Simplemente utilizo el siguiente código para conectarme a mi máquina remota y recuperar un GroupBookingManager. Sin embargo, el problema aparece cuando bash convertir la clase en la interfaz GroupBookingManagerRemote.

 Properties env = new Properties(); env.setProperty(Context.PROVIDER_URL, "jnp://myremoteserver:1099"); env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); InitialContext initialContext = new InitialContext(env); Object ref = initialContext.lookup("MyEARFile/GroupBookingManager/remote"); if (ref != null) { bookingManager = (GroupBookingManagerRemote) ref; // java.lang.ClassCastException: javax.naming.Reference cannot be cast } 

Tengo un archivo myclient.jar que he añadido a mi aplicación Wildfly que contiene la interfaz remota GroupBookingManagerRemote.

¿Alguien ve algún problema con lo que he hecho?

Gracias,

Darren

Gracias por tu ayuda Gimby,

Encontré la respuesta después de un poco más de confusión.

Desde Wildfly 8.1.0 (cliente) -> JBoss AS 5

No necesitas ningún jarrón JBoss 5.

En primer lugar, necesita una referencia a la interfaz que desea utilizar en el lado del cliente. Esto puede estar en un your-project-client.jar. Si usa Maven, puede crear un repository y construir la estructura de directorios de Maven usando mvn

 mvn install:install-file -DlocalRepositoryPath=DirectoryName -DcreateChecksum=true -Dpackaging=jar -Dfile=Path-to-you-project-client.jar -DgroupId=YourGroupId -DartifactId=YourartifactId -Dversion=1.0 

Luego, para conectarse a la máquina remota y convertir la interfaz de nuevo a su interfaz, use:

 final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory.class.getName()); env.put(Context.PROVIDER_URL, "remote://remoteserver:4447"); InitialContext initialContext = new InitialContext(env); 

Esto usa el control remoto Wildfly: // que se encuentra en nombres remotos y ejb en wildfly-ejb-client-bom

  org.wildfly wildfly-ejb-client-bom 8.1.0.Final compile pom  

Y también requiero esta dependencia para la comunicación.

  org.jboss.xnio xnio-nio 3.2.2.Final compile  

y este para la denominación remota.

  org.jboss jboss-remote-naming 2.0.1.Final  

También tenga en cuenta que el puerto no es el puerto de uso para JBoss 5 JNDI: 1099 este es el puerto remoto predeterminado: 4447

 Object ref = initialContext.lookup("ejb:Your-EAR/YourClass/remote!" + YouClass.class.getName()); 

A continuación, puede emitir su referencia a su interfaz y utilizarla normalmente.

Espero que esto tenga sentido.