JNDI 入门

【转http://www.blogjava.net/baoyaer/articles/84309.html

命名服务(naming service)
        命名服务是计算机系统中的一个基本功能。命名服务是将名字和计算机中的一个对象相关联,通过名字可以方便地找到对应的对象。例如,计算机中的文件系统就包含了一个命名服务,你可以通过文件名找到对应的文件对象。
目录服务(directory service) 
        目录服务是命名服务的延伸,目录服务不只保存对象和对象名的匹配,而且保存这个对象的各种属性,你可以对这些属性进行查询、修改、增加、删除操作。
JNDI(Java Naming Directory Interface)
        JNDI是一些标准API接口,Java程序通过这些API可以访问命名目录服务。JNDI的定义不依赖于任何独立的命名目录服务器,对于各种命名目录服务器,都可通过统一的JNDI接口调用。
       JNDI结构包括两组API:JNDI API(Application Programming Interface)和JNDI SPI(Service Provider Interface)。Java应用程序通过JNDI API访问各种命名目录服务。JNDI SPI使得各种命名目录服务透明地加入到JNDI结构中,如上图中的LDAP、DNS、NIS等服务通过JNDI SPI加入到JNDI结构中,从而使Java应用程序能够通过JNDI API访问这些服务。

JNDI Context    
          Context是一系列命名到对象绑定的集合,Context提供以下主要接口访问命名服务,JNDI中的一组绑定作为上下文来引用。每个上下文暴露的一组操作是一致的。例如,每个上下文提供了一个查找操作,返回指定名字的相应对象。每个上下文都提供了绑定和撤除绑定名字到某个对象的操作。JNDI使用通用的方式来暴露命名空间,即使用分层上下文以及使用相同命名语法的子上下文。  

  bind(Name name, Object obj) 建立一个命名到一个对象的匹配关系,也叫绑定
  lookup(String name) 通过命名查找其对应的对象
  rebind(Name name, Object obj) 重新绑定一个命名到对象,覆盖原来的绑定
  unbind(Name name) 解除这个命名到其匹配对象的绑定关系

在客户端使用JNDI:

u       创建一个java.util.Hashtable或者java.util.Properties的实例。

u       添加变量到Hashtable或Properties对象:

由naming server提供的JNDI class类名。

包含aming server位置的URL。

安全信任书。

u       通过Hashtable或Properites或jndi属性文件创建一个InitialContext对象。

示例:

  

import  java.util. * ;

import  javax.naming. * ;



env.put(Context.INITIAL_CONTEXT_FACTORY, 
" weblogic.jndi.WLInitialContextFactory " );

env.put(Context.PROVIDER_URL,
" t3://localhost:7001 " );

InitialContext ctx 
=   new  InitialContext(env);

 

环境变量

相应的常量

说明

java.naming.factory.initial

Context.INITIAL_CONTEXT_FACTORY

Context Factory

类名,由服务提供商给出。

java.naming.provider.url

Context.PROVIDE_URL

初始化地址。

java.naming.security.

principal

Context.SECURITY_PRINCIPAL

服务使用者信息。

java.naming.security.

credentials

Context.SECURITY_CREDENTIAL

口令。

 

更多的配置示例:

 

Hashtable env  =   new  Hashtable();

env.put (Context.INITIAL_CONTEXT_FACTORY, 

" weblogic.jndi.WLInitialContextFactory " );

env.put(Context.PROVIDER_URL, 
" t3://localhost:7001 " );

env.put(Context.SECURITY_PRINCIPAL, 
" system " );

env.put(Context.SECURITY_CREDENTIALS, 
" password here " );

 

Properties env 
=   new  Properties();

env.setProperties (
" java.naming.factory.initial "

" weblogic.jndi.WLInitialContextFactory " );

env.setProperties(
" java.naming.provider.url "  ,  " t3://localhost:7001 " );

env.setProperties(
" java.naming.security.principal "  ,  " tommy " );

env.setProperties(
" java.naming.security.credentials "  , " password here " );

 

创建InitialContext

Class Name: javax.naming.InitialContext

Interfaces that it implements: javax.naming.Context

Constructors:

 

     public  InitialContext();

    
public  InitialContext(Hashtable configuration);

    
public  InitialContext(Properties configuration);

 

一个Binding示例:

public   static  InitialContext getInitialContext()  throws  NamingException  {

    Hashtable env 
= new Hashtable();

    env.put(Context.INITIAL_CONTEXT_FACTORY,

         
"weblogic.jndi.WLInitialContextFactory");

    env.put(Context.PROVIDER_URL,
"t3://localhost:7001");

    InitialContext context 
= new InitialContext(env);

    
return context;

}


// Obtain the initial context

InitialContext initialContext 
=  getInitialContext();

// Create a Bank object.

Bank myBank 
=   new  Bank();

// Bind the object into the JNDI tree.

initialContext.rebind(
" theBank " ,myBank);


一个Lookup示例:

public   static  InitialContext getInitialContext()  throws  NamingException  {

    Hashtable env 
= new Hashtable();

    env.put(Context.INITIAL_CONTEXT_FACTORY,

         "weblogic.jndi.WLInitialContextFactory");

    env.put(Context.PROVIDER_URL,"t3://localhost:7001");

    InitialContext context = new InitialContext(env);

    return context;

}

// Obtain the initial context

InitialContext initialContext 
= getInitialContext();

// Lookup an existing Bank object.

Bank myBank =  (Bank) initialContext.lookup( " theBank ");

 


枚举所有名字对象:
NamingEnumeration Declaration:

public   interface  NamingEnumeration  extends  Enumeration  {
    
public boolean hashMore() throws NamingException;
    
public Object next() throws NamingException;
    
public void close() throws NamingException; //jndi 1.2

}

try   {
    …
    NamingEnumeration 
enum = ctx.list("");

    
while (enum.hasMore()) {

        NameClassPair ncp 
= (NameClassPair) enum.next();

        System.out.println(
"JNDI name is:" + ncp.getName());
    }

}

catch  (NamingException e)  {…}



最后的示例:

import  java.util. * ;

import  javax.naming. * ;

import  javax.naming.directory. * ;

import  java.io. * ;

public   class  ListAll  {

    
public static void main(java.lang.String[] args) {

        Hashtable env 
= new Hashtable();

        env.put(Context.INITIAL_CONTEXT_FACTORY,

            
"weblogic.jndi.WLInitialContextFactory");

        env.put(Context.PROVIDER_URL, 
"t3://localhost:7001");

        
try {

            InitialContext ctx 
= new InitialContext(env);

            NamingEnumeration 
enum = ctx.listBindings("");

            
while(enum.hasMore()) {

                Binding binding 
= (Binding) enum.next();

                Object obj 
= (Object) binding.getObject();

                System.out.println(obj);

            }


        }
 catch (NamingException e) {

        System.out.println(e);

        }


    }
 // end main

}
  //  end List

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值