<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 閱讀(2203) 評論(1)  編輯  收藏 所屬分類: 重塑金身:2010-06-08

    評論

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

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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产成人精品无码区在线秒播 | 久久夜色精品国产亚洲AV动态图 | 成全影视免费观看大全二| 亚洲精华国产精华精华液| 2022中文字字幕久亚洲| 亚洲视频免费播放| 又粗又长又爽又长黄免费视频 | 精品亚洲国产成AV人片传媒| 操美女视频免费网站| 中国videos性高清免费| 亚洲一卡二卡三卡四卡无卡麻豆 | 国产精品亚洲片在线花蝴蝶| 亚洲AV无码不卡在线播放| 在线免费观看色片| 久久青草精品38国产免费| 欧美色欧美亚洲另类二区| 精品日韩亚洲AV无码一区二区三区| 最新69国产成人精品免费视频动漫 | 色屁屁在线观看视频免费| 久久综合亚洲色一区二区三区| 又黄又爽的视频免费看| 国产成人精品免费视频网页大全| eeuss草民免费| 午夜亚洲WWW湿好爽| 亚洲天堂电影在线观看| 亚洲国产精品一区二区成人片国内| 午夜私人影院免费体验区| 在线看片免费人成视久网| 中文在线观看国语高清免费| 亚洲国产精品无码久久久秋霞1| 久久久无码精品亚洲日韩京东传媒| 亚洲日韩涩涩成人午夜私人影院| 无码免费午夜福利片在线| 日本一区二区免费看| 九九免费观看全部免费视频| 亚洲精品无码国产片| 亚洲一区二区三区无码国产| 午夜影视日本亚洲欧洲精品一区| 亚洲人成人网站在线观看| 四虎永久免费地址在线网站| 成年女人免费碰碰视频|