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

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

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

    廉頗老矣,尚能飯否

    java:從技術到管理

    常用鏈接

    統計

    最新評論

    JNDI簡單入門

    JNDI就是為JAVA中命名和目錄服務定義的JAVA API,是命名服務的抽象機制。在J2EE中,JNDI的目的是用來查找J2EE服務器的注冊資源只要該對象在命名服務器上注冊過,且你知道命名服務器的地址和該對象在命名服務器上注冊的JNDI名。這樣你就可以在無需知道對象位置的情況下獲取和使用對象。SUN對JNDI只提供接口,使用JNDI只需要用到JNDI接口而不必關心具體實現
    使用main方法做JNDI的demo時出現NoInitialContextException是因為無法從System.properties中獲得必要的JNDI參數,在服務器環(huán)境下,服務器啟動時就把這些參數放到System.properties中了,于是直接new InitialContext()就搞定了。但是在單機環(huán)境下,可沒有JNDI服務在運行,那就需要手動啟動一個JNDI服務。在JDK 5的rt.jar中一共找到了4種SUN自帶的JNDI實現:LDAP,CORBA,RMI,DNS。
    這4種JNDI要正常運行還需要底層的相應服務。一般我們沒有LDAP或CORBA服務器,也就無法啟動這兩種JNDI服務,DNS用于查域名的,以后再研究,唯一可以在main()中啟動的就是基于RMI的JNDI服務。
    現在我們就可以在main()中啟動基于RMI的JNDI服務并且綁一個對象到JNDI上。注意,我直接把JNDI的相關參數放入了System.properties中,這樣,后面的代碼如果要查JNDI,直接new InitialContext()就可以了

    在RMI中綁JNDI的限制是,綁定的對象必須是Remote類型,所以就需要自己擴展一個。其實JNDI還有兩個Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL,如果訪問JNDI需要用戶名和口令,這兩個也要提供,不過一般用不上。下面是兩個使用JNDI的簡單例子的代碼,可以直接運行。

    package com.ellen.jndi;

    import java.io.Serializable;
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    import java.util.Date;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;

    //在RMI中綁JNDI的限制是,綁定的對象必須是Remote類型
    class Person implements Remote, Serializable {
     private static final long serialVersionUID = -8592182872966400365L;

     private String name;
     private String pass;

     public String getName() {
      return name;
     }

     public void setName(String name) {
      this.name = name;
     }

     public String getPass() {
      return pass;
     }

     public void setPass(String pass) {
      this.pass = pass;
     }

     public String toString() {
      return "name=" + this.getName() + "&pass=" + this.getPass();
     }

    }

    // 在RMI中綁JNDI的限制是,綁定的對象必須是Remote類型
    // 外部擴展,可以內部擴展也可以外部擴展
    class RemoteDate extends Date implements Remote {
    };

    public class Demo {
     public static void initDate() throws NamingException, RemoteException {
      // 設置參數
      LocateRegistry.createRegistry(1099);
      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
      System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
      InitialContext ctx = new InitialContext();
      // 在RMI中綁JNDI的限制是,綁定的對象必須是Remote類型
      // 內部擴展,可以內部擴展也可以外部擴展
      class RemoteDate extends Date implements Remote {
      }
      ;
      ctx.bind("java:comp/env/systemStartTime", new RemoteDate());
      ctx.close();
     }

     public static void initDate2() throws NamingException, RemoteException {
      // 設置參數
      LocateRegistry.createRegistry(1099);
      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
      System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
      InitialContext ctx = new InitialContext();
      // 自己擴展,可以內部擴展也可以外部擴展
      // class RemoteDate extends Date implements Remote {
      // }
      // ;
      ctx.bind("java:comp/env/systemStartTime", new RemoteDate());
      ctx.close();
     }

     public static void findDate() throws NamingException, RemoteException {
      // 直接使用
      InitialContext ctx = new InitialContext();
      Date startTime = (Date) ctx.lookup("java:comp/env/systemStartTime");
      System.out.println("+++++++++++++++++++++++" + startTime.toString());
      ctx.close();
     }

     public static void jndiDate() throws NamingException, RemoteException {
      // Demo.initDate();
      Demo.initDate2();
      Demo.findDate();
     }

     public static void initPerson() throws NamingException, RemoteException {
      // 設置參數
      LocateRegistry.createRegistry(1099);
      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
      System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
      InitialContext ctx = new InitialContext();
      // Person person = new Person();
      // person.setName("ellen");
      // person.setPass("000727");
      ctx.bind("java:comp/env/person", new Person());
      ctx.close();
     }

     public static void initPerson2() throws NamingException, RemoteException {
      // 設置參數
      LocateRegistry.createRegistry(1099);
      System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
      System.setProperty(Context.PROVIDER_URL, "rmi://localhost:1099");
      InitialContext ctx = new InitialContext();
      Person person = new Person();
      person.setName("ellen");
      person.setPass("000727");
      ctx.bind("java:comp/env/person", person);
      ctx.close();
     }

     public static void findPerson() throws NamingException, RemoteException {
      // 直接使用
      InitialContext ctx = new InitialContext();
      Person person = (Person) ctx.lookup("java:comp/env/person");
      System.out.println("------" + person.toString());
      System.out.println("------" + person.getName());
      System.out.println("------" + person.getPass());
      ctx.close();
     }

     public static void jndiPerson() throws NamingException, RemoteException {
      // Demo.initPerson();
      Demo.initPerson2();
      Demo.findPerson();
     }

     public static void main(String[] args) throws NamingException, RemoteException {
      // 為什么兩個jndi的例子不能同時運行
      // internal error: ObjID already in use
      // Demo.jndiDate();
      Demo.jndiPerson();
     }

    }



    柳德才
    13691193654
    18942949207
    QQ:422157370
    liudecai_zan@126.com
    湖北-武漢-江夏-廟山

    posted on 2010-06-20 09:31 liudecai_zan@126.com 閱讀(2203) 評論(1)  編輯  收藏 所屬分類: 重塑金身:2010-06-08

    評論

    # re: JNDI簡單入門 2011-04-28 09:47 路過

    因為綁定的是同一個端口,將initDate和initPerson的端口修改為不同的就可以了  回復  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产高清视频在线免费观看| 一个人看www在线高清免费看| 全部免费毛片在线| 亚洲精品无码国产片| 成人午夜性A级毛片免费| 亚洲AV无码专区在线观看成人| 免费鲁丝片一级观看| 日韩亚洲人成网站| 亚洲人成无码网站久久99热国产| 永久免费无码日韩视频| 亚洲色精品vr一区二区三区| 免费人成黄页在线观看日本| 91亚洲精品视频| 日韩毛片免费无码无毒视频观看| 亚洲成av人无码亚洲成av人| 亚洲av无码成人精品区在线播放| 免费中文字幕视频| 久久精品国产亚洲综合色| 57pao一国产成视频永久免费| 亚洲国产精品综合久久20| 国产乱子伦精品免费无码专区| 一个人看的免费高清视频日本| 亚洲av无码成h人动漫无遮挡| 99在线精品免费视频九九视| 亚洲av无码专区在线观看下载| 国产AV无码专区亚洲AWWW| 久久99国产综合精品免费| 亚洲中文字幕久久久一区| 亚洲精品动漫人成3d在线| 日韩精品内射视频免费观看| 亚洲综合色婷婷在线观看| 亚洲欧洲中文日韩久久AV乱码| 最近最新高清免费中文字幕| 国产成人综合久久精品亚洲| 亚洲AV天天做在线观看| 四虎成人免费观看在线网址 | 久久国产精品2020免费m3u8| 精品亚洲成在人线AV无码| 亚洲一级黄色视频| 国产精品视频免费一区二区| 中文字幕免费观看全部电影|