JBoss7.1的JNDI使用--EJB

来源:互联网 发布:哪个论坛源码好 编辑:程序博客网 时间:2024/05/21 07:46

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

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

Java.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfacesjava.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.Final2017-5-3 14:15:38 org.xnio.Xnio <clinit>INFO: XNIO Version 3.0.3.GA2017-5-3 14:15:38 org.xnio.nio.NioXnio <clinit>INFO: XNIO NIO Implementation Version 3.0.3.GA2017-5-3 14:15:38 org.jboss.remoting3.EndpointImpl <clinit>INFO: JBoss Remoting version 3.2.3.GA2017-5-3 14:15:38 org.jboss.ejb.client.remoting.VersionReceiver handleMessageINFO: Received server version 1 and marshalling strategies [river]2017-5-3 14:15:38 org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver associateINFO: 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:44472017-5-3 14:15:38 org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver handleMessageWARN: Unsupported message received with header 0xffffffffdara说:你好,世界

注:有状态的会话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-endpointremote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=falseremote.connections=defaultremote.connection.default.host=10.20.30.40remote.connection.default.port = 4447remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=falseremote.connection.default.username=appuserremote.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的配置方式差异,否则不能建立连接




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

1 0