JBoss7配置EJB客户端出错:No EJB receiver available for handling的解决
来源:互联网 发布:bim建模软件下载 编辑:程序博客网 时间:2024/06/03 13:51
刚开始使用JBoss服务器时,在Myeclipse中编写EJB客户端调用远程JBoss服务器上的无状态会话bean时,总是报错:
Exception in thread "main" java.lang.IllegalStateException: No EJB receiver available for handling [appName:,modulename:HelloWorld,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@35ab28fe
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.sayHello(Unknown Source)
at cn.mym.test.EJBClient.main(EJBClient.java:34)
重点看No EJB receiver available for handling
这是因为没有链接到远程JBoss(注:这里所说的远程是指,把无状态的会话bean打包后发布在JBoss服务器上,并且服务器开启,然后本客户端通过JNDI与JBoss建立连接,然后得到发布的无状态的会话bean,最后通过EJB代理实例化对应的对象,然后就可以使用发布在JBoss上的无状态会话bean中的方法)
贴上客户端代码(未修改前,即会报错):
public class EJBClient {/** *<p>title:main</p> *@author 明柯 * @param args * @throws NamingException */public static void main(String[] args){Properties props=new Properties(); props.setProperty(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming"); try { Context context=new InitialContext(props); HelloWorld hello=(HelloWorld)context.lookup("ejb:/HelloWorld//HelloWorldBean!"+HelloWorld.class.getName()); System.out.println(hello.sayHello("dara")); } catch(NamingException e) { e.printStackTrace(); }}}
注:lookup中的参数值,即JNDI的写法与JBoss6及以下版本不一样,具体参考:http://blog.csdn.net/maoyuanming0806/article/details/71122697
或者参考JBoss的官方文档,官方文档我已经上传,下载地址:http://download.csdn.net/detail/maoyuanming0806/9831962
解决:
在classpath路径下需要添加一个JBoss的配置文件,此配置文件格式在官方文档中也可以找到
这里我放在src下:
文件名:jboss-ejb-client.properties (文件名称固定写法
endpoint.name=client-endpointremote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=falseremote.connections=defaultremote.connection.default.host=127.0.0.1remote.connection.default.port = 4447remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=falseremote.connection.default.username=appuserremote.connection.default.password=apppassword
解释:一共八行
1.代表名称用于创建endpoint的客户端
2.通过设置org.xnio.Options.SSL_ENABLED值为false使得在链接提供者创建连接时使用remote.connection.default.connect.options作为前缀 (一般不用改)
3.表示设置与远程服务器的链接数。默认(default)表示设置单个远程链接。可以设置多个:remote.connections=one, two
如上设置多个表示设置了两个EJB接收者,你需要添加EJB客户端
4.5.6 分别是主机(可以是localhost)、默认远程端口(除非修改过,否则默认是4447)、此客户端的链接方式(固定);多个连接则此三步就有多次设置
7.8 分别是管理员用户名和密码。官方文档是说必须要设置,为了安全起见:官方文档原话:The user and password must be set because the security-realm is enabled for the subsystem remoting (see standalone*.xml or domain.xml) by defaul
加入此文档后,编译运行客户端结果如下:
解释是根据官方文档自己的理解,若有翻译不当之处,敬请指出,在此感谢, 以上详细说明见官方文档的Local JNDI章节的远程EJB的说明
- JBoss7配置EJB客户端出错:No EJB receiver available for handling的解决
- JBoss7 创建客户端通过JNDI调用EJB
- EJB正确客户端调用(jboss6、jboss7)
- JBoss7.1的JNDI使用--EJB
- EJB客户端的访问
- 使用EJB使用jboss7.0中配置数据源
- 使用EJB使用jboss7.0中配置数据源
- 初始化EJB客户端的Context
- jbossd 的ejb客户端视图
- JBOSS系列(一) --EJB远程调用-客户端的配置
- 【EJB系列】(一)——JBOSS7中开发一个简单的EJB应用
- 【EJB系列】(二)——JBOSS7中EJB的远程调用和本地调用
- EJB---->jboss数据源的配置
- Exception in thread "main" java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver availab
- EJB
- ejb
- EJB
- EJB
- TSQL 聚合函数忽略NULL值
- android 屏幕常亮
- PHP通用字符串截取函数
- 数据结构---直接插入排序
- 《深入浅出搜索架构(中篇)》
- JBoss7配置EJB客户端出错:No EJB receiver available for handling的解决
- cuda之curand生成随机数
- 自定义登录后的推送
- 数据结构和算法
- TSQL 查询“全部”
- Android写SD卡或者U盘不成功问题
- 根据规范文档所推荐:在 Eclipse 使用 formatter 对代码格式 进行规范。
- Vue:实现双向数据绑定
- LeetCode 209. Minimum Size Subarray Sum 滑动窗口