Java 获取jboss中部署的rar中的EJB对象

Java 获取jboss中部署的rar中的EJB对象,java,jboss,ejb,jndi,naming,Java,Jboss,Ejb,Jndi,Naming,我在jboss服务器中部署了一个activemq代理。 activemq作为rar文件部署在jboss独立/部署存储库中。 另一个项目也作为ear文件部署在我的jboss中。 最后是在我的jboss中公开一些ejb对象。 我试图从放入ActiveMQRAR文件的jar文件中获取ejb。当我将客户机连接到代理时,将调用放置在jar中的类 这就是我试图在jar文件中获取ejb的方法: Context ctx; Properties jndiProps = new Properties();

我在jboss服务器中部署了一个activemq代理。 activemq作为rar文件部署在jboss独立/部署存储库中。 另一个项目也作为ear文件部署在我的jboss中。
最后是在我的jboss中公开一些ejb对象。 我试图从放入ActiveMQRAR文件的jar文件中获取ejb。当我将客户机连接到代理时,将调用放置在jar中的类

这就是我试图在jar文件中获取ejb的方法:

  Context ctx; 
  Properties jndiProps = new Properties(); 
  jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
  jndiProps.put("jboss.naming.client.ejb.context", true); 
  ctx = new InitialContext(jndiProps); 
  Ctx.lookup("ejb:Hemis/HemisCoreClient//"+ "HardwareDataManagement" + "!" + "com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement");
当ejb公开时,从jboss记录:

11:50:17538 INFO[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor](MSC服务线程1-4)部署单元“Hemis.ear”的子部署“HemisCoreClient.jar”中名为HardwareDataManagement的会话bean的JNDI绑定如下:

java:global/Hemis/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_硬件管理 java:app/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_硬件管理 java:模块/硬件数据管理!com.ubiant.hemis.client.ejb.interf.I_硬件管理 java:jboss/exported/Hemis/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_硬件管理 java:global/Hemis/HemisCoreClient/HardwareDataManagement java:app/HemisCoreClient/HardwareDataManagement java:模块/硬件数据管理*

尝试将客户端连接到代理时出现的日志错误:

17:26:15555错误[stderr](qtp1869699331-251)javax.naming.NameNotFoundException;剩余名称'java:Hemis/HemisCoreClient//HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement' 17:26:15556 org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot.java:490)上的错误[stderr](qtp1869699331-251) 17:26:15557 org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot.java:536)上的错误[stderr](qtp1869699331-251) 17:26:15557 javax.naming.InitialContext.lookup(InitialContext.java:411)处的错误[stderr](qtp1869699331-251) 17:26:15558 authentification.TokenAuthentificationBroker.addConnection(TokenAuthentificationBroker.java:46)处出现错误[stderr](qtp1869699331-251) 17:26:15558 org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:97)上的错误[stderr](qtp1869699331-251) 17:26:15558 org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:733)处的错误[stderr](qtp1869699331-251) 17:26:15559 org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)处的错误[stderr](qtp1869699331-251) 17:26:15559 org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)处的错误[stderr](qtp1869699331-251) 17:26:15560 org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)上的错误[stderr](qtp1869699331-251) 17:26:15561 org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:149)上的错误[stderr](qtp1869699331-251) 17:26:15562 org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)上的错误[stderr](qtp1869699331-251) 17:26:15562 org.apache.activemq.transport.ws.MQTTSocket.sendToActiveMQ(MQTTSocket.java:112)处的错误[stderr](qtp1869699331-251) 17:26:15563 org.apache.activemq.transport.mqtt.MQTTProtocolConverter.sendToActiveMQ(MQTTProtocolConverter.java:133)处的错误[stderr](qtp1869699331-251) 17:26:15564 org.apache.activemq.transport.mqtt.MQTTProtocolConverter.onMQTTConnect(MQTTProtocolConverter.java:235)处的错误[stderr](qtp1869699331-251) 17:26:15564 org.apache.activemq.transport.mqtt.MQTTProtocolConverter.onMQTTCommand(MQTTProtocolConverter.java:157)处的错误[stderr](qtp1869699331-251) 17:26:15566 org.apache.activemq.transport.ws.MQTTSocket.onMessage(MQTTSocket.java:59)上的错误[stderr](qtp1869699331-251) 17:26:15566 org.eclipse.jetty.websocket.WebSocketConnectionRFC6455$WSFrameHandler.onFrame上的错误[stderr](qtp1869699331-251)(WebSocketConnectionRFC6455.java:860) 17:26:15567 org.eclipse.jetty.websocket.WebSocketParserRFC6455.parseNext(WebSocketParserRFC6455.java:349)上的错误[stderr](qtp1869699331-251) 17:26:15568 org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.handle(WebSocketConnectionRFC6455.java:225)上的错误[stderr](qtp1869699331-251) 17:26:15568 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)上的错误[stderr](qtp1869699331-251) 17:26:15569 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)上的错误[stderr](qtp1869699331-251) 17:26:15571 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)处的错误[stderr](qtp1869699331-251) 17:26:15571 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)处的错误[stderr](qtp1869699331-251) 17:26:15572 java.lang.Thread.run(Thread.java:745)处的错误[stderr](qtp1869699331-251)

当我从ear中公开EJB的类中尝试这段代码时,它工作了,我可以得到EJB对象。我是否认为问题在于我试图从部署在jboss中的rar中包含的jar中获取ejb。
有人能帮我吗?

应该没有必要执行这样的远程查找

以下方面应起作用:

java:global/..
命名空间中的对象可以从部署在服务器实例上的任何模块中访问。

正如我在发布的,我相信您的问题可以归结为以下几点:

当部署到JBoss的webapp包含jetty-all.jar时,jetty类会导致将默认InitialContext创建为jetty类。如何获得JBoss InitialContext来允许查找JBoss公开的EJB

看起来像是码头上的玻璃瓶
 Context ctx = new InitialContext();
 ... = ctx.lookup("java:global/Hemis/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement");