您的位置:首页 > 其它

JBoss7.1的JNDI使用--EJB

2017-05-03 13:44 375 查看
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的配置方式差异,否则不能建立连接

参考官方文档的浅显解释,详细说明请参考官方文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息