城市猎人

在一网情深的日子里,谁能说得清是苦是甜,只知道确定了就义无反顾
posts - 1, comments - 7, trackbacks - 0, articles - 89

EJB3.0的各应用服务器提供的JNDI接口(转)

Posted on 2008-07-11 23:27 sailor 阅读(758) 评论(0)  编辑  收藏 所属分类: EJB3
来源:http://blog.163.com/e_adon/blog/static/338840452007721831904/

        在分布式开发中,JAVA客户端程序是通过JNDI去查询EJB的,而JNDI的全名是:The Java Naming and Directory Interface。因为JNDI 是一组接口,所以我们只需根据接口规范编程就可以。要通过JNDI 进行资源访问,我们必须设置初始化上下文的参数,主要是设置JNDI 驱动的类名(java.naming.factory.initial)和提供命名服务的URL
(java.naming.provider.url)。因为Jndi 的实现产品有很多。所以java.naming.factory.initial 的值因提供JNDI 服务器
的不同而不同,java.naming.provider.url 的值包括提供命名服务的主机地址和端口号。

        大家在编程时,最令人气愤的就是EJB程序写好了,而客户端却不知道如何去调用它,一般书上只是介绍一种应用服务器的访问代码其它的不会提到,找这方面资料又比较麻烦,当误大家许多时间和精力,因此我就把已经找到的代码贴出来,方便大家查找。

        暂且提供以下三种服务器的代码,今后再慢慢补充吧。

        下面是访问Jboss 服务器的
        
        例子代码:

1Properties props = new Properties();
2props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
3props.setProperty("java.naming.provider.url", "localhost:1099");
4InitialContext = new InitialContext(props);
5HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
6

        
        下面是访问Sun ApplicationServer 及glassfish 应用服务器的例子代码:
        

1Properties props = new Properties();
2props.setProperty("java.naming.factory.initial",
3"com.sun.enterprise.naming.SerialInitContextFactory");
4props.setProperty("java.naming.provider.url", "localhost:3700");
5InitialContext = new InitialContext(props);
6HelloWorld helloworld = (HelloWorld) ctx.lookup("com.0735jb.ejb3.HelloWorld");


        下面是访问Weblogic10 应用服务器的例子代码:

1Properties props = new Properties();
2props.setProperty("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory");
3props.setProperty("java.naming.provider.url", "t3://localhost:7001");
4InitialContext = new InitialContext(props);
5HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean
6#com.0735jb.ejb3.HelloWorld");

 

        上面是服务器默认的JNDI命名规则,那么如何修改它呢.

        在Jboss 中要自定义JNDI 名称,可以使
        用@LocalBinding 和@RemoteBinding 注释,@LocalBinding 注释指定Session Bean 的Local 接口的JNDI 名称,
        @RemoteBinding 注释指定Session Bean 的Remote 接口的JNDI 名称,下面的代码展示了如何自定义JNDI 名:

 

1@Stateless
2@Remote ({Operation.class})
3@RemoteBinding (jndiBinding="0735jb/RemoteOperation")
4@Local ({LocalOperation.class})
5@LocalBinding (jndiBinding="0735jb/LocalOperation")

 

        在JSP 客户端调用上面EJB 的代码片断如下:

1InitialContext ctx = new InitialContext(props);
2Operation operation = (Operation) ctx.lookup("0735jb/RemoteOperation");
3在weblogic10 中,你可以通过@Stateless.mappedName()设置全局JNDI 名称,如:
4@Stateless(mappedName="OperationBeanRemote")
5public class OperationBean implements Operation, LocalOperation {
6


        客户端调用EJB 的代码片断如下:

1InitialContext ctx = new InitialContext(props);
2Operation operation = (Operation) ctx.lookup("OperationBeanRemote#com.0735jb.ejb3.Operation");

只有注册用户登录后才能发表评论。


网站导航: