在J2EE中,JNDI的目的是用来查找J2EE服务器的注册资源(如EJB等) 
一、JNDI简介 
命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。 
       利用JNDI可以寻找在命名服务器上注册过的所有对象。 
JNDI就是为JAVA中命名和目录服务定义的JAVA API,是命名服务的抽象机制。我们可以直接通过JNDI来操作命名服务,而不要与底层的命名服务器交互,大大减轻了程序员的压力。 
二、应用JNDI 
1.  启动和关闭JNDI服务器 
在用j2ee –verbose启动J2EE 服务器的同时,也就启动了JNDI服务器。一般情况下,J2EE服务器启动的同时,JNDI服务器也就启动了。 
J2ee –stop关闭JNDI服务器 
2.        获得名字服务的初始环境 
Contect ctx=new InitailContext(); 
这样获得的初妈环境为默认的命名服务。假如你想改变提供JNDI服务的类(或厂商)和提供JNDI服务的命名服务器,可以采用以下方法: 
Hashtable Env=new Hashtable(); 
Env.put(Context.INITIAL_CONTEXT_FACTORY,”com.sun.enterprise.naming.SerialInitContextFactory”);//指定提供命名服务的类名 
Env.put(Context.PROVIDER_URL,”localhost:1099”);//指定提供命名服务的服务器名和端口 
Context ctx=new InitialContext(env); 
2.  对象绑定 
用bind(String name,Object o)方法 ,把对象o绑定到名字name上 
例:import javax.naming.*; 
public class TestJNDI{ 
public static void main(String[] args){ 
        try{ 
        Context ctx=new InitialContext(); 
        Ctx.bind(“ABC”,”JAVA1”);//把JAVA1字符串绑定到ABC 上 
        }catch(NamingException e){ 
        e.printStackTrace(); 
        } 
        } 
} 
  
如果名字已绑定或命名服务器没有启动,则会出现NamingException异常 
3.        重新绑定 
用ctx.rebind(String name,Object o) 
如:ctx.rebind(“ABC”,”JAVA2”);//现在ABC就绑定到JAVA2字符串 
4.        解除绑定 
ctx.unbind(String name); 
不过你要确保该名字存在,否则出现NameNotFoundException 异常 
5.        查找已绑定的对象 
用ctx.lookup(String name);根据name找对象 
例: 
import javax.naming.*; 
public class TestJNDI{ 
public static void main(String[] args){ 
        try{ 
        Context ctx=new InitialContext(); 
        Object o=ctx.lookup(“ABC”);//根据JNDI名查找绑定的对象 
        String s=(String)o;//强制转换              
        }catch(NamingException e){ 
        e.printStackTrace(); 
        }catch(ClassCastException e){ 
        e.printStackTrace(); 
        } 
        } 
} 
6.        在EJB中的应用(查找EJB HOME对象) 
InitialContext ic=new InitialContext(); 
Object o=ic.lookup(“java:comp/env/ejb/Hello”);//利用JNDI名查找EJB HOME 
HelloHome home=(HelloHome)PortableRemoteObject.narrow(lookup,HelloHome.class);//定位EJB //HOME对象 
Hello hello=home.create();//用EJB HOME创建EJB对象 
  
       以上只是一个简要,望大家不吝赐教.需要交流,[email protected].,本人非常感谢!  
 
  |