在J2SE的客户端使用JNDI查找部署在JBOSS上的EJB3.0

本文解决了一个常见的技术难题:如何让部署在JBOSS上的EJB被J2SE客户端正确调用。作者详细记录了从遇到ClassNotFoundException异常到最终解决问题的过程,并分享了需要导入的关键jar包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题缠了我好久,写好了EJB却总是无法在J2SE的客户端进行调用。在JBOSS的JNDIView中也能看到我那部署好的EJB,可是每当运行下面的代码却总是报同样的异常。

InitialContextctx=newInitialContext();
HelloWorldfileservice
=(HelloWorld)ctx.lookup(HelloWorld.class.getName());
javax.naming.CommunicationException[Rootexceptionisjava.lang.ClassNotFoundException:org.jboss.proxy.ejb.EJBMetaDataImpl(nosecuritymanager:RMIclassloaderdisabled)]
atorg.jnp.interfaces.NamingContext.lookup(NamingContext.java:
713)
atorg.jnp.interfaces.NamingContext.lookup(NamingContext.java:
572)
atjavax.naming.InitialContext.lookup(InitialContext.java:
351)
attest.ServiceTest.main(ServiceTest.java:
33)
Causedby:java.lang.ClassNotFoundException:org.jboss.proxy.ejb.EJBMetaDataImpl(nosecuritymanager:RMI
classloaderdisabled)
atsun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:
371)
atsun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:
165)
atjava.rmi.server.RMIClassLoader$
2.loadClass(RMIClassLoader.java:620)
atjava.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:
247)
atsun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:
197)
atjava.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:
1538)
atjava.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:
1460)
atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
1693)
atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:
1299)
atjava.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:
1912)
atjava.io.ObjectInputStream.readSerialData(ObjectInputStream.java:
1836)
atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
1713)
atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:
1299)
atjava.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:
1912)
atjava.io.ObjectInputStream.readSerialData(ObjectInputStream.java:
1836)
atjava.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
1713)
atjava.io.ObjectInputStream.readObject0(ObjectInputStream.java:
1299)
atjava.io.ObjectInputStream.readObject(ObjectInputStream.java:
339)
atjava.rmi.MarshalledObject.get(MarshalledObject.java:
135)
atorg.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:
57)
atorg.jnp.interfaces.NamingContext.lookup(NamingContext.java:
637)
...
3more

发现org.jboss.proxy.ejb.EJBMetaDataImpl这个class无法找到,估计很可能是有一些必要的包没有导进去。google了一下,有人提示说问题很有可能是没有导入client结尾的包。试着导入了下面这些包(都在JBOSS根目录下)

/client/jboss-client.jar
./client/jboss-common-client.jar
./client/jboss-transaction-client.jar
./client/jbossmq-client.jar
./client/jbosssx-client.jar
./client/jmx-invoker-adaptor-client.jar
./client/jnp-client.jar

最后发现是jboss-client.jar 里面包含的org.jboss.proxy.ejb.EJBMetaDataImpl这个类,导入运行成功。

yeah,留下脚印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值