`
sharis1987
  • 浏览: 12016 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

JNDI应用实例

阅读更多

最近再看spring,今天看到spring整合jndi,就整理一下jndi的相关资料,写了个简单的开发实例。
先来介绍下jndi
JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
命名或目录服务使你可以集中存储共有信息,这一点在网络应用中是重要的,因为这使得这样的应用更协调、更容易管理。例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用。
目录服务是命名服务的自然扩展。两者之间的关键差别是目录服务中对象可以有属性(例如,用户有email地址),而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。JNDI允许你访问文件系统中的文件,定位远程RMI注册的对象,访问象LDAP这样的目录服务,定位网络上的EJB组件。

关于JNDI要注意的重要一点是,它提供了应用编程接口(application programming interface,API)和服务提供者接口(service provider interface,SPI)。
JNDI API由5个包组成:  l Javax.naming:包含了访问命名服务的类和接口。例如,它定义了Context接口,这是命名服务执行查询的入口。 l Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。 l Javax.naming.event:提供了对访问命名和目录服务时的时间通知的支持。例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件,定义了侦听NamingEvents的NamingListener接口。 l Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。 l Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。
http://javacrazyer.iteye.com/blog/759485


下面介绍下jboss下jndi的开发实例,其实也可以作为简单的ejb实例的搭建。
   首先,搭建ejb项目,发布一个remote接口
  1)创建一个ejb工程,将jboss目录下client文件夹中的所有jar包引入
  2)创建接口package com.jiangxl.ejb;

public interface HelloWorld {

public String sayHello(String name);


}
3)创建实现类
package com.jiangxl.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld {

public String sayHello(String name) {

return name+"说:世界,你好。";

}

}
4)将该工程打成jar包,发布到jboss,这样,一个remote接口发布完成。

下面就开始用jndi进行访问远程发布的接口

1)在src下新建文件jndi.properties,指定jndi提供上,本实例用的是jboss
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

2)建立客户端访问类
package com.jiangxl.ejb;

import javax.naming.InitialContext;

public class EJBClient {

public static void main(String[] args){
try{
InitialContext context = new InitialContext();
HelloWorld helloWorld = (HelloWorld)context.lookup("HelloWorldBean/remote");
System.out.println(helloWorld.sayHello("小麦"));
}catch(Exception e){
e.printStackTrace();
}
}
}


启动jboss,然后运行main方法,就可以访问远程接口了。





  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics