JBoss7配置EJB客户端出错:No EJB receiver available for handling的解决


刚开始使用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-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=appuser
remote.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的说明

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值