在jboss内部部署rar内部获取EJB对象 [英] Get EJB object inside rar deployed inside jboss

查看:264
本文介绍了在jboss内部部署rar内部获取EJB对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的jboss服务器中部署了一个activemq代理。
activemq被部署为放置在jboss独立/部署存储库中的rar文件。
另一个项目也被部署在我的jboss中作为一个ear文件。

最后一个是在我的jboss中暴露一些ejb对象。
我试图从我放入我的activemq rar文件的jar文件中获取一个ejb。当我将客户端连接到代理程序时,调用放在jar中的类。



这是我如何在jar文件中获取ejb:

 上下文ctx; 
属性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:17,538 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor](MSC服务线程1-4)部署中名为HardwareDataManagement的会话bean的JNDI绑定部署Hemis.ear的单元部署HemisCoreClient.jar如下:



java:global / Hemis / HemisCoreClient / HardwareDataManagement!com.ubiant .hemis.client.ejb.interf.I_HardwareDataManagement
java:app / HemisCoreClient / HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement
java:module / HardwareDataManagement!com.ubiant.hemis .client.ejb.interf.I_HardwareDataManagement
java:jboss / exported / Hemis / HemisCoreClient / HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement
java:global / Hemis / HemisCoreClient / HardwareDataManagement
java:app / HemisCoreClient / HardwareDataManage
java:module / HardwareDataManagement *



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



17:26:15,555 ERROR [stderr](qtp1869699331-251)javax.naming.NameNotFoundException;剩下的名字'java:Hemis / HemisCoreClient // HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement'
17:26:15,556 ERROR [stderr](qtp1869699331-251)at org.eclipse.jetty .jndi.local.localContextRoot.lookup(localContextRoot.java:490)
17:26:15,557错误[stderr](qtp1869699331-251)在org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot。 java:536)
17:26:15,557错误[stderr](qtp1869699331-251)javax.naming.InitialContext.lookup(InitialContext.java:411)
17:26:15,558错误[stderr] (qtp1869699331-251)at authentification.TokenAuthentificationBroker.addConnection(TokenAuthentificationBroker.java:46)
17:26:15,558错误[stderr](qtp1869699331-251)在org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter .java:97)
17:26:15,558 ERROR [stderr](qtp1869699331-251)at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:733)
17:26: 15,559错误OR [stderr](qtp1869699331-251)at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79)
17:26:15,559 ERROR [stderr](qtp1869699331-251)在org .apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
17:26:15,560错误[stderr](qtp1869699331-251)在org.apache.activemq.broker.TransportConnection.service(TransportConnection。 java:292)
17:26:15,561 ERROR [stderr](qtp1869699331-251)at org.apache.activemq.broker.TransportConnection $ 1.onCommand(TransportConnection.java:149)
17:26: 15,562 ERROR [stderr](qtp1869699331-251)at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
17:26:15,562 ERROR [stderr](qtp1869699331-251)at org。 apache.activemq.transport.ws.MQTTSocket.sendToActiveMQ(MQTTSocket.java:112)
17:26:15,563错误[stderr](qtp1869699331-251)在org.apache.activemq.transport.mqtt.MQTTProtocolConverter.sendToActiveMQ (MQTTProtocolConverter.jav a:133)
17:26:15,564错误[stderr](qtp1869699331-251)在org.apache.activemq.transport.mqtt.MQTTProtocolConverter.onMQTTConnect(MQTTProtocolConverter.java:235)
17:26 :15,564 ERROR [stderr](qtp1869699331-251)at org.apache.activemq.transport.mqtt.MQTTProtocolConverter.onMQTTCommand(MQTTProtocolConverter.java:157)
17:26:15,566 ERROR [stderr](qtp1869699331-251)在org.apache.activemq.transport.ws.MQTTSocket.onMessage(MQTTSocket.java:59)
17:26:15,566 ERROR [stderr](qtp1869699331-251)在org.eclipse.jetty.websocket.WebSocketConnectionRFC6455 $ WSFrameHandler.onFrame(WebSocketConnectionRFC6455.java:860)
17:26:15,567错误[stderr](qtp1869699331-251)在org.eclipse.jetty.websocket.WebSocketParserRFC6455.parseNext(WebSocketParserRFC6455.java:349)
17:26:15,568 ERROR [stderr](qtp1869699331-251)at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.handle(WebSocketConnectionRFC6455.java:225)
17:26:15,568 ERROR [stderr](qtp1869699331- 251)在org.ec lipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
17:26:15,569错误[stderr](qtp1869699331-251)在org.eclipse.jetty.io.nio.SelectChannelEndPoint $ 1。运行(SelectChannelEndPoint.java:52)
17:26:15,571 ERROR [stderr](qtp1869699331-251)在org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
17:26:15,571 ERROR [stderr](qtp1869699331-251)at org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run(QueuedThreadPool.java:543)
17:26:15,572 ERROR [stderr] (qtp1869699331-251)java.lang.Thread.run(Thread.java:745)



当我从类中尝试这个代码在暴露EJB的耳朵里面,它工作,我可以得到EJB对象。我认为问题是我试图从包含在我的jboss中的rar中的jar中获取ejb。
有人可以帮助我吗?

解决方案

正如我在 http://activemq.2283324.n4.nabble.com/Adding-activemq-jetty-all-jar-for-using-ws-doesn-t-allow-me-anymore-getting- jboss-exposed-ejb-tp4727190p4727305.html ,我相信你的问题归结为以下内容:



当部署到JBoss的webapp包含jetty -all.jar,Jetty类导致默认的InitialContext被创建为Jetty类。如何获取JBoss InitialContext,以允许查找由JBoss公开的EJB?



看起来像Jetty JAR将InitialContextFactory类属性设置为某些Jetty特定的,覆盖由JBoss JAR设置的JBoss特定值。要强制回JBoss类,创建InitialContext时是否可以尝试设置以下选项?



props.put(Context.INITIAL_CONTEXT_FACTORY,
org.jboss.naming.remote.client.InitialContextFactory);



如果问题真的只是你得到错误的JNDI上下文,那行应该解决问题。


I have an activemq broker deployed within my jboss server. activemq is deployed as a rar file placed in jboss standalone/deployment repository. An other project is also deployed within my jboss as an ear file.
This last is exposing some ejb objects in my jboss. I tried to get an ejb from a jar file that I put into my activemq rar file. A class placed within the jar is called when I connect a client to the broker.

This is how I tried to get ejb within jar file:

  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");

Log from jboss when ejb is exposed:

11:50:17,538 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-4) JNDI bindings for session bean named HardwareDataManagement in deployment unit subdeployment "HemisCoreClient.jar" of deployment "Hemis.ear" are as follows:

java:global/Hemis/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement java:app/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement java:module/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement java:jboss/exported/Hemis/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement java:global/Hemis/HemisCoreClient/HardwareDataManagement java:app/HemisCoreClient/HardwareDataManagement java:module/HardwareDataManagement*

The log error when I try to connect client to the broker:

17:26:15,555 ERROR [stderr] (qtp1869699331-251) javax.naming.NameNotFoundException; remaining name 'java:Hemis/HemisCoreClient//HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement' 17:26:15,556 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot.java:490) 17:26:15,557 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.jndi.local.localContextRoot.lookup(localContextRoot.java:536) 17:26:15,557 ERROR [stderr] (qtp1869699331-251) at javax.naming.InitialContext.lookup(InitialContext.java:411) 17:26:15,558 ERROR [stderr] (qtp1869699331-251) at authentification.TokenAuthentificationBroker.addConnection(TokenAuthentificationBroker.java:46) 17:26:15,558 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:97) 17:26:15,558 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:733) 17:26:15,559 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:79) 17:26:15,559 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139) 17:26:15,560 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292) 17:26:15,561 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:149) 17:26:15,562 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83) 17:26:15,562 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.transport.ws.MQTTSocket.sendToActiveMQ(MQTTSocket.java:112) 17:26:15,563 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.transport.mqtt.MQTTProtocolConverter.sendToActiveMQ(MQTTProtocolConverter.java:133) 17:26:15,564 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.transport.mqtt.MQTTProtocolConverter.onMQTTConnect(MQTTProtocolConverter.java:235) 17:26:15,564 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.transport.mqtt.MQTTProtocolConverter.onMQTTCommand(MQTTProtocolConverter.java:157) 17:26:15,566 ERROR [stderr] (qtp1869699331-251) at org.apache.activemq.transport.ws.MQTTSocket.onMessage(MQTTSocket.java:59) 17:26:15,566 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455$WSFrameHandler.onFrame(WebSocketConnectionRFC6455.java:860) 17:26:15,567 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.websocket.WebSocketParserRFC6455.parseNext(WebSocketParserRFC6455.java:349) 17:26:15,568 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.websocket.WebSocketConnectionRFC6455.handle(WebSocketConnectionRFC6455.java:225) 17:26:15,568 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) 17:26:15,569 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 17:26:15,571 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 17:26:15,571 ERROR [stderr] (qtp1869699331-251) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 17:26:15,572 ERROR [stderr] (qtp1869699331-251) at java.lang.Thread.run(Thread.java:745)

When I try this code from a class inside the ear which is exposing EJB, it work and I can get EJB object. Do I think that the problem is that I try to get ejb from jar included in rar deployed in my jboss. Could someone help me with this?

解决方案

As I posted at http://activemq.2283324.n4.nabble.com/Adding-activemq-jetty-all-jar-for-using-ws-doesn-t-allow-me-anymore-getting-jboss-exposed-ejb-tp4727190p4727305.html, I believe your question boils down to the following:

When a webapp deployed to JBoss contains jetty-all.jar, the Jetty classes cause the default InitialContext to be created as a Jetty class. How can I get a JBoss InitialContext instead, to allow lookups of EJBs exposed by JBoss?

It seems like the Jetty JAR is setting the InitialContextFactory class property to something Jetty-specific, overriding the JBoss-specific value set by the JBoss JARs. To force it back to the JBoss class, can you try setting the following option when creating your InitialContext?

props.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory");

If the problem really is just that you're getting the wrong JNDI context, that line should solve the problem.

这篇关于在jboss内部部署rar内部获取EJB对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆