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的配置方式差异,否则不能建立连接
参考官方文档的浅显解释,详细说明请参考官方文档
在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的配置方式差异,否则不能建立连接
参考官方文档的浅显解释,详细说明请参考官方文档
相关文章推荐
- JBOSS AS 7 客户端使用JNDI远程调用EJB Bean (方式之一)
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(一)
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(转载)
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(1)
- 关于Java/RMI/JBoss/EJB/WebService/JMS的使用
- About EJB 02 JBOSS 的待deploy的jar的JNDI设置
- 使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(2)
- 用ant来打包简单的ejb(jboss)的总结 使用ant
- JBoss7.1与eclipse(indigo)集成,创建EJB3.x项目(HelloWorld)非常详细的图解步骤
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB
- Jboss+EJB3下使用JAVA验证和授权服务(JAAS)
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB
- Jboss EJB JNDI 名称默认的命名规则
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(二)
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(二)
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB
- 使用Eclipse3.0+lomboz3.0+jboss3.2.3开发EJB(一) 转载
- 使用JBOSS, Eclipse创建一个EJB3实例程序的过程