<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參數,在服務器環境下,服務器啟動時就把這些參數放到System.properties中了,于是直接new InitialContext()就搞定了。但是在單機環境下,可沒有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 閱讀(2215) 評論(1)  編輯  收藏 所屬分類: 重塑金身:2010-06-08

    評論

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

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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧洲国产成人综合在线观看| 337P日本欧洲亚洲大胆艺术图| a级毛片高清免费视频就| 又粗又大又硬又爽的免费视频| 亚洲AV日韩综合一区尤物| 亚洲网站免费观看| 亚洲一级二级三级不卡| 国内精品免费视频精选在线观看 | 黄页网站在线视频免费| 成年女人毛片免费观看97| 亚洲性无码av在线| 999任你躁在线精品免费不卡| 日本亚洲欧洲免费天堂午夜看片女人员| 一级毛片成人免费看a| 四虎1515hm免费国产| 亚洲AV无码成人精品区日韩| 成年人性生活免费视频| 亚洲1234区乱码| 大学生一级毛片免费看| 亚洲jjzzjjzz在线播放| 美女被cao免费看在线看网站| 久久精品国产亚洲AV无码麻豆| 久久久久免费精品国产小说| 亚洲成AV人片在线观看ww| 国色精品va在线观看免费视频| 中文字幕人成人乱码亚洲电影 | 亚洲av午夜成人片精品网站 | 亚洲性色成人av天堂| 日本三级2019在线观看免费| 亚洲另类视频在线观看| 曰批视频免费30分钟成人| 久久精品亚洲AV久久久无码| 波多野结衣在线免费观看| 亚洲精品二三区伊人久久| 毛片免费全部播放一级| 亚洲精品蜜夜内射| 在线免费观看韩国a视频| 亚洲AV无码成人精品区狼人影院| 国产免费人成视频在线观看| 免费无码专区毛片高潮喷水| 狠狠亚洲狠狠欧洲2019|