JNDI入门

JNDI实战
最近两天研究JNDI,在练习的过程中遇到不少问题,现总结总结
1概念:JNDI全称Java Naming Directory Interface,概念就不用讲了。
2 运行环境搭建:
   A,需要安装JDK.
   B, JNDI software (相信现在你用的JDK一定带有的),不用安装,如javax.naming包。
   C, Service provider服务提供者,就是用在JNDI API和JNDI 服务器交互的,郁闷了吧,还有服务器一说。其实我们可以用JNDI来通过一个绑定的name和一些特定的属性获得一个具体的对象,以至于我们能够操作对象,这就是JNDI给我们提供的服务,所以说有服务器一说也是可以理解的。这个也是不用装的,JDK1.3以上提供了三个Service provider,这三个Service provider是分别基于LDAP,RMI,CORBA的。
   D 名称和目录服务器,这个是需要安装的。我用到的有两种,一种就是文件服务器(我们的PC机就有此功能),不用安装。另外一个就是基于LDAP的服务器(OpenLDAP),这个需要安装,可以去 http://download.bergmans.us/openldap/openldap-2.2.19/openldap-2.2.19-db-4.3.21-openssl-0.9.7e-win32.exe 这里下载免费的安装程序,默认一直 NEXT 安装就 OK ,安装好之后自己机器上会有一个 OpenLDAP… 的服务,自己去检查。安装程序 sun 网站上也有,但是在 sun 那里我下载 到的是源码,需要在 LINUX 下编译安装的。
3 ,真枪实弹:既然大体了解了,就开始 coding 吧,谁怕谁啊,学习文档上把代码 COPY 一下不就可以运行了吗,哈哈。。。。好戏才刚刚开始,第一个程序:
import javax.naming.*;
public class Lookup {
    public static void main(String[] args) {
       Hashtable env = new Hashtable();
       env.put(Context. INITIAL_CONTEXT_FACTORY ,
              "com.sun.jndi.fscontext.RefFSContextFactory" );
       try {
           // Create the initial context
           Context ctx = new InitialContext(env);
           System. out .println(ctx.getEnvironment());
       } catch (NamingException e) {
           System. err .println( "Problem: " + e);
       }
    }
} 
多简单啊,初始化一个基于文件系统的上下文(Context),这里的 RefFSContextFactory 就是属于上面所介绍的Service provider了。我一运行就碰壁, NoInitialContextException 发生了,我一看文档说是只有两中可能:1是没有设置 Context.INITIAL_CONTEXT_FACTORY属性,明显嘛,我已经设置了,2,service provider不可用。晕 JDK不是连LDAP的服务提供者都给了吗?干麻区区的文件系统的服务提供者都不给啊,真是奇怪。过程是辛苦的,但是方案是简单的,嘿嘿,没有就去下一个贝,com.sun.jndi.fscontext.RefFSContextFactoryfscontext.jar里,去SUN网站上下载就OK,我下载的是一个ZIP文件(fscontext-1_2-beta3.zip),里面还附带者一个providerutil.jar。解压之后把两个JAR文件放在JDK路径/jre/lib/ext下,问题解决了,附带说一下,本来还需要一个文件服务器的,不过我们的PC机就是一个,前面说过。
第二个程序(基于 LDAP 的):
import javax.naming.*;
public class LDAPTest{
    public static void main(String[] args) {
      Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
       try {
           // Create the initial context
           Context ctx = new InitialContext(env);
           System. out .println(ctx.getEnvironment());
       } catch (NamingException e) {
           System. err .println( "Problem: " + e);
       }
    }
}
很简单,都是教程上的例子,这回错误是 CommunicationException java.net.ConnectException : Connection refused: connect ;看文档,重点查找 LdapCtxFactory 类,这个类是有的,在 rt.jar 文件下根据上面的路径是能找到的,呵呵,看来是有服务提供者了,通过学习,知道这与文件系统不一样, LDAP 是需要装服务器的,于是就象2.D那样做了,然后把OpenLDAP服务启动之后,程序OK了,很激动,小小的两个问题折腾了我一天,不过解决问题之后的情绪是很激动的,至少自己入门了。可以进一步学习JNDI了,希望与大家分享一切收获。
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值