JBoss7.1的JNDI使用--EJB

JBoss7版本与之前的的版本的JNDI使用方式不同,之前的在EJB客户端中:

在src路径下jndi.propertis的属性文件:

Java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099 

这样在容器初始化时回找到这个文件并建立与远程服务器的链接


但是JBoss7版本的JNDI设置方式不同,根据官方文档:

For stateless beans:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>

For stateful beans:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>

这可能有些人还是看不懂,那么贴上一个简单的例子EJB:(简化说明)


首先我编写一个无状态的远程的会话bean,并打包好发布在JBoss的单线程启动对应的文件夹中,如图

 


接下来编写EJB的客户端:

package cn.mym.test;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import cn.mym.first.HelloWorld;

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);
            
            final String appName = "";//这是应用名,即打包的后缀是.ear ,如果不是发布的这个类型,为空
            final String moduleName = "HelloWorld";//发布在JBoss中的为.jar的包名
            final String distinctName = "";//JBoss as7允许每个部署有一个不同的名称(别名吧,可选),这里我没有设置
            final String beanName = "HelloWorldBean";//无状态会话bean接口的一个实现类
            final String viewClassName = HelloWorld.class.getName();//无状态会话bean接口的全路径:cn.mym.first.HelloWorld
            
            //最后拼接成lookup函数可识别的JNDI:"ejb:appName/moduleName/distinctName/beanName!viewClassName";
            String jndi = "ejb:" + appName + "/" + moduleName + "/" +
            		distinctName + "/" + beanName + "!" + viewClassName;
            
            HelloWorld hello=(HelloWorld)context.lookup(jndi);
            
            System.out.println(hello.sayHello("dara"));
        }
        catch(NamingException e)
        {
            e.printStackTrace();
        }
		
    }

}
运行后:

2017-5-3 14:15:38 org.jboss.ejb.client.EJBClient <clinit>
INFO: JBoss EJB Client version 1.0.5.Final
2017-5-3 14:15:38 org.xnio.Xnio <clinit>
INFO: XNIO Version 3.0.3.GA
2017-5-3 14:15:38 org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.0.3.GA
2017-5-3 14:15:38 org.jboss.remoting3.EndpointImpl <clinit>
INFO: JBoss Remoting version 3.2.3.GA
2017-5-3 14:15:38 org.jboss.ejb.client.remoting.VersionReceiver handleMessage
INFO: Received server version 1 and marshalling strategies [river]
2017-5-3 14:15:38 org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver associate
INFO: Successful version handshake completed for receiver context EJBReceiverContext{clientContext=org.jboss.ejb.client.EJBClientContext@16ba5c7a, receiver=Remoting connection EJB receiver [connection=Remoting connection <691e0c13>,channel=jboss.ejb,nodename=desktop-6pbcqpv]} on channel Channel ID 85ee6d5f (outbound) of Remoting connection 69b1fbf4 to /127.0.0.1:4447
2017-5-3 14:15:38 org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver handleMessage
WARN: Unsupported message received with header 0xffffffff
dara说:你好,世界

注:有状态的会话bean的JNDI链接:"ejb:appName/moduleName/distinctName/beanName!viewClassName?stateful "



解释说明:

1.首先要在客户端所在项目中的src或者是任意classpath路径下配置一个JBoss的配置文件

名:jboss-ejb-client.properties


内容:内容解释:http://blog.csdn.net/maoyuanming0806/article/details/71108376

或参考官方文档,官方文档下载:http://download.csdn.net/detail/maoyuanming0806/9831962

endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=10.20.30.40
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

2.客户端中

Properties props=new Properties();
props.setProperty(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");

Context context=new InitialContext(props);


首先是设置好上下文链接前缀,即设置好客户端与远程服务器的JNDI链接前缀,做好链接准备。然后根据设置的前缀读取配置文件建立连接


3.最后通过客户端上下文的对象的lookup方法找到远程服务器中的无状态会话bean类并实例化一个对象,最后可以调用该bean中的方法



注意与低版本JBoss的配置方式差异,否则不能建立连接




参考官方文档的浅显解释,详细说明请参考官方文档

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值