Java @远程JNDI通信:Wildfly到JBoss AS 5.1.0.GA

Java @远程JNDI通信:Wildfly到JBoss AS 5.1.0.GA,java,maven,jboss,jndi,wildfly-8,Java,Maven,Jboss,Jndi,Wildfly 8,架构: Windows客户端->Wildfly JAX-RS服务->JBoss 5.1.0.GA遗留系统 我得到了一个java.lang.ClassCastException:javax.naming.Reference在Wildfly JAX-RS服务和JBoss 5.1.0.GA遗留系统之间进行通信时无法转换为com.interfaces.GroupBookingManagerRemote 当我从Wildfly通信到JBossAS5.1.0.GA时,我尝试使用JNDI进行连接 在我的Wild

架构: Windows客户端->Wildfly JAX-RS服务->JBoss 5.1.0.GA遗留系统

我得到了一个java.lang.ClassCastException:javax.naming.Reference在Wildfly JAX-RS服务和JBoss 5.1.0.GA遗留系统之间进行通信时无法转换为com.interfaces.GroupBookingManagerRemote

当我从Wildfly通信到JBossAS5.1.0.GA时,我尝试使用JNDI进行连接

在我的Wildfly服务器Maven pom中,我包括:

<dependency>
    <groupId>jboss</groupId>
    <artifactId>jnp-client</artifactId>
    <version>4.2.2.GA</version>
</dependency>
我有一个myclient.jar文件,已添加到包含远程接口GroupBookingManagerRemote的Wildfly应用程序中

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
}
有人认为我所做的有什么问题吗

谢谢


Darren

谢谢你的帮助Gimby

我自己经过一番周旋后找到了答案

从Wildfly 8.1.0(客户端)->JBoss AS 5

您不需要任何JBoss5 JAR

首先,您需要一个对希望在客户端使用的接口的引用。这可以在your-project-client.jar中。如果使用Maven,您可以创建一个存储库,并使用mvn构建Maven目录结构

mvn install:install-file -DlocalRepositoryPath=DirectoryName -DcreateChecksum=true -Dpackaging=jar -Dfile=Path-to-you-project-client.jar -DgroupId=YourGroupId -DartifactId=YourartifactId -Dversion=1.0
然后,为了连接到远程计算机并将接口转换回您的接口,您可以使用:

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);
这将使用远程命名中的Wildfly remote://和Wildfly ejb客户端bom中的ejb

<dependency>
    <groupId>org.wildfly</groupId>
    <artifactId>wildfly-ejb-client-bom</artifactId>
    <version>8.1.0.Final</version>
    <scope>compile</scope>
    <type>pom</type>
</dependency> 
然后,您可以将引用转换为接口,并将其正常使用


希望这是有意义的。

伙计,这是一台时光机器的回归。。。可能您不强制转换对象,但需要执行PortableRemoteObject.窄带(ref,GroupBookingManagerRemote.class);(不知道它是否正确,我从非常旧的公司wiki文章中找到了它)不幸的是,这给了我以下信息:java.lang.ClassCastException:javax.naming.Reference不能强制转换为org.omg.CORBA.object。那么可能是依赖项错了。这个版本很奇怪——看起来您使用的是JBoss 4.2.2对JBoss 5.1的依赖关系。JBoss总是有一个通用的JBoss作为客户端依赖项,用于从客户端连接到JBoss服务器,请尝试使用它。嗨,Gimby,我明白你的意思了,但是在maven中,我只能找到版本4.2.2作为最新的jnp客户端。但你忽略了我的另一半评论。
<dependency>
    <groupId>org.jboss.xnio</groupId>
    <artifactId>xnio-nio</artifactId>
    <version>3.2.2.Final</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.jboss</groupId>
    <artifactId>jboss-remote-naming</artifactId>
    <version>2.0.1.Final</version>
</dependency>                   
Object ref = initialContext.lookup("ejb:Your-EAR/YourClass/remote!" + YouClass.class.getName());