IllegalStateException:没有可用于处理的 EJB 接收器

Posted

技术标签:

【中文标题】IllegalStateException:没有可用于处理的 EJB 接收器【英文标题】:IllegalStateException: No EJB receiver available for handling 【发布时间】:2012-09-08 00:48:18 【问题描述】:

我有一个使用 JBoss AS 7.1.1 的客户端应用程序和一个服务器。启动时,我的客户端可以很好地连接到服务器,并为我提供了一个远程接口供我使用。但是,当我尝试通过接口运行一个函数时,我得到了这个异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: 
No EJB receiver available for handling [appName:GrahamsProjServer,modulename:GrahamsProjServer,distinctname:] 
combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@3a42f352
        at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584)
        at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119)
        at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
        at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136)
        at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121)
        at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104)
        at $Proxy0.persistSchemas(Unknown Source)
        at grahamsprojclient.main.GrahamsProjScreen.btnPersistActionPerformed(Unknown Source)
        at grahamsprojclient.main.GrahamsProjScreen.access$400(Unknown Source)
        at grahamsprojclient.main.GrahamsProjScreen$5.actionPerformed(Unknown Source)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

服务器上没有出现错误。当我运行该功能时,它看起来好像甚至没有与服务器交谈。怎么可能在启动时我的客户端连接到服务器很好,但是当我尝试运行一个函数时它不会连接?

【问题讨论】:

【参考方案1】:

No EJB receiver available 消息本身并没有说明它为什么无法连接,所以这不会回答您的问题,但至少它可能会为您指明正确的方向。

JBoss EJB 客户端库使用Log4j,因此它不会在System.outSystem.err 上打印。要真正知道发生了什么,您必须启用 org.jboss.ejb.client 包的日志记录,例如通过在您的log4j.properties 中加入这一行:

log4j.logger.org.jboss.ejb.client=TRACE

启用此功能后,您可以更好地了解客户端正在为您执行的操作,并且很可能会打印出潜在的错误。

此外,从 JBoss 7.1.0 开始,security-realm 默认启用,因此要进行远程调用,必须执行以下操作之一:

通过从 standalone.xml 文件中删除 <security-realm/> 来禁用它

使用bin/add-user(.bat)(.sh) 脚本将用户添加到服务器。添加后,将用户/密码信息包含在您的 jboss-ejb-client.properties 文件中。

Here 您可以找到有关如何从远程客户端进行 EJB 调用的更详细指南。

【讨论】:

【参考方案2】:

你可以在这里试试这个技巧:

转到 Jboss 根文件夹 ->standalone\deployments 选择您正在运行的模块(.jar 文件和 .deployed 文件并删除 他们 然后转到您的服务器并从服务器中删除您的模块,然后 停下来。 然后再次添加项目并启动服务器。 然后去检查你的 Jboss 根文件夹 ->standalone\deployments 并检查您部署的模块是否可用。如果是 你成功了。

【讨论】:

以上是关于IllegalStateException:没有可用于处理的 EJB 接收器的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.IllegalStateException:在 org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient

java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.gecko.driver 系统属性设置

线程“main”java.lang.IllegalStateException 中的异常:驱动程序可执行文件的路径必须由:系统属性设置

线程“main”java.lang.IllegalStateException中的异常:驱动程序可执行文件必须存在使用Selenium ChromeDriver和Java的错误[重复]

IllegalStateException:链接没有设置 NavController

错误:java.lang.IllegalStateException:没有包含点