当前位置: 首页 > 知识库问答 >
问题:

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

叶桐
2023-03-14

我在我的jboss服务器中部署了一个Activemq代理。Activemq被部署为放置在jboss独立/部署存储库中的rar文件。另一个项目也作为耳文件部署在我的jboss中。
最后一个是在我的jboss中公开一些ejb对象。我试图从我放入我的Activemq rar文件中的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:17,538INFO[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcess](MSC服务线程1-4)JNDI绑定会话bean命名为Hardware DataManagement在部署单元子部署"H_Hemis.ear"的"HimisCoreClient.jar"中如下:

Java:全球/赫米斯/赫米斯客户端/硬件数据管理!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagementjava:应用程序/赫米斯客户端/硬件数据管理!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagementjava:模块/硬件数据管理!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagementjava:jboss/导出/赫米斯/赫米斯客户端/硬件数据管理!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagementjava:全球/赫米斯/赫米斯客户端/硬件数据管理java:应用程序/赫米斯客户端/硬件数据管理java:模块/硬件数据管理*

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

17: 26:15555错误[stderr](qtp1869699331-251)javax。命名。NameNotFoundException;剩余名称“java:Hemis/HemisCoreClient//HardwareDataManagement!”!通用域名格式。无处不在。海米斯。客户ejb。国际文联。I\u HardwareDataManagement“17:26:15556错误[标准](qtp1869699331-251)位于组织。日食码头。jndi。地方的localContextRoot。在org上查找(localContextRoot.java:490)17:26:15557错误[stderr](qtp1869699331-251)。日食码头。jndi。地方的localContextRoot。javax上的lookup(localContextRoot.java:536)17:26:15557错误[stderr](qtp1869699331-251)。命名。InitialContext。身份验证时的查找(InitialContext.java:411)17:26:15558错误[标准](qtp1869699331-251)。TokenAuthentificationBroker。org上的addConnection(TokenAuthentificationBroker.java:46)17:26:15558错误[stderr](qtp1869699331-251)。阿帕奇。activemq。经纪人可变BrokerFilter。org上的addConnection(MutableBrokerFilter.java:97)17:26:15558错误[stderr](qtp1869699331-251)。阿帕奇。activemq。经纪人运输连接。org上的processAddConnection(TransportConnection.java:733)17:26:15559错误[stderr](qtp1869699331-251)。阿帕奇。activemq。经纪人jmx。ManagedTransportConnection。processAddConnection(ManagedTransportConnection.java:79)17:26:15559错误[stderr](qtp1869699331-251),位于组织。阿帕奇。activemq。命令ConnectionInfo。访问(ConnectionInfo.java:139)17:26:15560错误[stderr](qtp1869699331-251),网址:org。阿帕奇。activemq。经纪人运输连接。org上的服务(TransportConnection.java:292)17:26:15561错误[stderr](qtp1869699331-251)。阿帕奇。activemq。经纪人TransportConnection 1美元。org上的onCommand(TransportConnection.java:149)17:26:15562错误[stderr](qtp1869699331-251)。阿帕奇。activemq。运输运输支持。org上的doConsume(TransportSupport.java:83)17:26:15562错误[stderr](qtp1869699331-251)。阿帕奇。activemq。运输ws。MQTTSocket。组织上的sendToActiveMQ(MQTTSocket.java:112)17:26:15563错误[stderr](qtp1869699331-251)。阿帕奇。activemq。运输mqtt。MQTTProtocolConverter。org上的sendToActiveMQ(MQTTProtocolConverter.java:133)17:26:15564错误[stderr](qtp1869699331-251)。阿帕奇。activemq。运输mqtt。MQTTProtocolConverter。org上的onMQTTConnect(MQTTProtocolConverter.java:235)17:26:15564错误[stderr](qtp1869699331-251)。阿帕奇。activemq。运输mqtt。MQTTProtocolConverter。org上的onMQTTCommand(MQTTProtocolConverter.java:157)17:26:15566错误[stderr](qtp1869699331-251)。阿帕奇。activemq。运输ws。MQTTSocket。org上的onMessage(MQTTSocket.java:59)17:26:15566错误[stderr](qtp1869699331-251)。日食码头。websocket。WebSocketConnectionRFC6455$WSFrameHandler。org上的onFrame(WebSocketConnectionRFC6455.java:860)17:26:15567错误[stderr](qtp1869699331-251)。日食码头。websocket。WebSocketParserRFC6455。org上的parseNext(WebSocketParserRFC6455.java:349)17:26:15568错误[stderr](qtp1869699331-251)。日食码头。websocket。WebSocketConnectionRFC6455。位于组织的句柄(WebSocketConnectionRFC6455.java:225)17:26:15568错误[标准代码](qtp1869699331-251)。日食码头。io。nio。选择ChannelEndpoint。org上的handle(SelectChannelEndPoint.java:628)17:26:15569错误[stderr](qtp1869699331-251)。日食码头。io。nio。选择ChannelEndpoint$1。在组织上运行(SelectChannelEndPoint.java:52)17:26:15571错误[stderr](qtp1869699331-251)。日食码头。util。线QueuedThreadPool。org上的runJob(QueuedThreadPool.java:608)17:26:15571错误[stderr](qtp1869699331-251)。日食码头。util。线QueuedThreadPool$3。在java上运行(QueuedThreadPool.java:543)17:26:15572错误[stderr](qtp1869699331-251)。lang.Thread。运行(Thread.java:745)

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

共有2个答案

朱宏爽
2023-03-14

正如我在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似乎正在将SynalContextFactory类属性设置为Jetty特定的属性,覆盖JBoss JAR设置的JBoss特定值。要将其强制返回JBoss类,您可以在创建初始上下文时尝试设置以下选项吗?

<代码>道具。put(Context.INITIAL\u Context\u FACTORY,org.jboss.naming.remote.client.InitialContextFactory);

如果问题真的只是您得到了错误的JNDI上下文,那么这一行应该可以解决问题。

柴磊
2023-03-14

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

以下措施应该有效:

 Context ctx = new InitialContext();
 ... = ctx.lookup("java:global/Hemis/HemisCoreClient/HardwareDataManagement!com.ubiant.hemis.client.ejb.interf.I_HardwareDataManagement");

java:global/中的对象 命名空间。

 类似资料:
  • 我在Jboss 7.0中部署了一个EJB。 当我运行该服务时,客户端无法找到该服务。 谁能告诉我我在这里遗漏了什么?我在stackoverflow中看到了很多类似主题的线程,但没有一个对我有帮助!!

  • 我在我的环境中遇到了一个非常奇怪的问题,我的环境是JBOSS-5.1.0.GA java version“1.6.0_33”java(TM)SE运行时环境(构建1.6.0_33-B03)java HotSpot(TM)64位服务器VM(构建20.8-B03,混合模式) 直到我在上下文中更新了某个jar的版本(在此之前,wich在6个环境中测试过,没有错误),它才完全起作用。在发生错误之前,我有以下

  • 我是Java EE新手。我使用Eclipse、jBoss/WildFly和Maven。我有一个多模块Maven项目: 父Maven项目(pom) 目前,EJB项目打包在Web应用程序中,整个解决方案部署为一个文件。 我想更改它:我需要将war和jar项目独立地部署到应用服务器(作为两个独立的应用程序)。然后web项目可以通过远程接口访问EJB。 问题是: 我可以使用在Eclipse中部署项目 如何

  • 在JBoss 7.0.1中部署了一个EJB模块后,我试图从在另一个JVM上执行的客户机访问它。但是,我无法找出需要添加到客户端类路径的客户端JAR。 我尝试了以下内容:- null 顺便说一句,我是Java EE和应用服务器方面的新手,我正试图在这个过程中学习。 谢了。

  • 这就是我想要达到的目标: 1 ear-package:all.ear 耳朵包包含两个war(耳朵根部的a.war和b.war) ear-package包含1个自制的jar C和许多第三方jar(在app-inf\lib下) 这个包需要部署在JBoss WildFly 8.2.1上 我使用的是Maven的ear插件(maven-ear-plugin,版本2.10.1)。我在pom中的配置如下所示(这