<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JNDI的簡單概念&簡單示例

    介紹JNDI的簡單概念&簡單示例。

    JNDI: The Java Naming and Directory Interface


     什么是JNDI?

    The Java Naming and Directory Interface是訪問不同名字和目錄服務的統一API接口。

    不同的服務使用不同的名字格式。

    Java程序需要以相同的格式訪問數據庫,文件,目錄,對象和網絡。

    JNID有兩部分接口:應用程序接口和提供服務的接口。在應用程序中使用API來訪問名字或目錄服務,在一個新的服務中使用SPI來提供服務。

    JNDI結構

    名字服務(Naming Services)

    名字服務提供一種方法,映射標識符到實體或對象。

    你需要知道的幾條基本條款:

    綁定:綁定是將一個不可分割的名字("原子"名字)與一個對象聯系起來。像DNS,我們用名字www.yahoo.com與IP地址216.32.74.53聯系起來,一個文件對象用文件名afile.txt聯系起來。

    名字空間;名字空間包含一組名字,但名字空間內每個名字是唯一的。一個文件目錄就是一個簡單的名字空間,如目錄C:\temp,在這個目錄下,不能有兩個相同名字的文件,但是,不同目錄下的兩個文件可能有相同的名字。

    復合名字:復合名字是用名字空間構成的唯一名字,有一個或多個"原子"名字構成,取決于所在的名字空間。文件路徑就是一個復合名字,比如我們用C:\temp\myfile.txt,我們可以看到,這個名字由根目錄名(C:\),臨時目錄名(temp)和一個文件名(myfile.txt)構成,這3個名字復合起來表示一個唯一的名字。

    組合名字:組合名字能跨越多個名字空間。一個URL就是一個組合名字,如果你看見http://www.npu.edu/index.htm,你使用http服務連接到服務器,然后使用另一個名字空間/index.htm來訪問一個文件。

    目錄服務

    目錄服務提供一組分成等級的目錄對象,具有可搜索的能力。

    在目錄服務中存儲的對象可以是任何能用一組屬性描述的對象,每個對象都可通過一組屬性來描述該對象的能力。例如,一個Person對象可能有height,hair color,age,sex等屬性。目錄服務還可提供根據要求來搜索的能力,如我們可以使用Person的age屬性,搜索20-25歲間的Person對象,目錄服務將返回符合條件的Persion對象。這通常被稱作基于內容的搜索。


    在客戶端使用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);

    以上所有方法都可能拋出NamingException。

    一個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");
    可能發生的NamingException
    AuthenticationException
    CommunicationException
    InvalidNameException
    NameNotFoundException
    NoInitialContextException
    枚舉所有名字對象:
    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

    }

    posted on 2007-09-10 10:43 劉錚 閱讀(237) 評論(0)  編輯  收藏 所屬分類: JAVA General

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    留言簿(1)

    文章分類(141)

    文章檔案(147)

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲女同成av人片在线观看| 国产成人免费a在线资源| 亚洲午夜久久久影院| 美女裸体无遮挡免费视频网站| 成年人在线免费看视频| 国产成人精品日本亚洲11| 中国人xxxxx69免费视频| 亚洲最大免费视频网| xxxx日本免费| 精品丝袜国产自在线拍亚洲| 手机在线看永久av片免费| 亚洲日本天堂在线| 国产在线播放免费| jzzjzz免费观看大片免费| 亚洲精品无码MV在线观看| 一级毛片免费视频| 亚洲国产美女视频| 成年人免费网站在线观看| 亚洲av成人一区二区三区观看在线| 国产男女猛烈无遮挡免费视频网站 | 亚洲最大的成人网站| 丁香花免费完整高清观看| 亚洲一线产品二线产品| 狼友av永久网站免费观看| 草久免费在线观看网站| 亚洲三区在线观看无套内射| 免费国产黄网站在线观看视频 | a级黄色毛片免费播放视频| 亚洲国产成人精品无码区在线观看| 日韩免费人妻AV无码专区蜜桃 | 亚洲av日韩av永久在线观看| 亚洲av午夜成人片精品电影| a级黄色毛片免费播放视频| 亚洲AV成人无码天堂| 国产一级淫片免费播放| 东北美女野外bbwbbw免费| 亚洲国产成人精品电影| 国产又粗又长又硬免费视频| 18禁在线无遮挡免费观看网站| 亚洲一级在线观看| 亚洲国产精品成人AV无码久久综合影院 |