在脱离了Web服务器的情况下,如何使用JNDI?

时间:2022-10-15 13:41:57
我们都知道,如果在web.xml中对数据源之类的东西做了配置之后,在jsp也好,在ejb里面也好,就可以通过jndi来完成对数据源的使用。
  现在我想知道的是,如果不启动web服务器,如何能够指定jndi的服务载入一个特定的配置文件来完成初始化。从而,可以象和有web服务器时一样使用jndi的功能。
  也就是说,如何找到jndi服务提供者载入web.xml文件完成初始化的那段代码。

8 个解决方案

#1


用ldap服务器
只知道这样
不好意思
帮你顶一下

#2


也不知道具体怎么做,但是java2里面有jndi的API,我使用ldap时就用到过,我想原理都是差不多的了

#3


上面说的ldap服务
因为webapp 必然要使用ldap支持的。 


关于webapp server 还比较复杂的我不懂的,你可以自己看看jdni

http://java.sun.com/products/jndi/tutorial/TOC.html#OBJECTS

#4


http://java.sun.com/products/jndi/tutorial/TOC.html#OBJECTS


很好的文章。。。看看去。。。

#5


多谢大家的回复。现在我已经有点思路了。我准备找找Tomcat的代码,看看它是怎么做的。

#6


帮你顶

#7


一样的啊,只要指定 INITIAL_CONTEXT_FACTORY,PROVIDER_URL,
再提供一个ldap服务器,就可以访问了
prop.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
prop.put(Context.PROVIDER_URL,"ldap://localhost:389");

#8


我知道答案了!其实很简单,用Context中提供的功能就可以完成。主要是大家用的都是查找的功能,没有想过初始化的功能。

我找这个的主要原因是,我们写的程序要用main函数进行调试的,相当于javaBean。

我用的是Tomcat的包,不用另外找一个服务器了。下面是代码:

  public void buildContext() {
    try {
      Hashtable env = new Hashtable();

      env.put(Context.INITIAL_CONTEXT_FACTORY,
              "org.apache.naming.java.javaURLContextFactory");
//              "weblogic.jndi.WLInitialContextFactory");
//    env.put(Context.PROVIDER_URL,
//            "t3://weblogicServer:7001");
      env.put(Context.URL_PKG_PREFIXES,
              "org.apache.naming");

      Context ctx = new InitialContext(env);

      Context javaCtx = ctx.createSubcontext("java:comp");
      javaCtx = javaCtx.createSubcontext("env");

      // bind a string object to java:comp/env/num
      javaCtx = (Context)ctx.lookup("java:comp/env");

      if( javaCtx == null ) {
        System.out.println("fail to access url context!");
      }

      javaCtx.bind("num", "10");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }


#1


用ldap服务器
只知道这样
不好意思
帮你顶一下

#2


也不知道具体怎么做,但是java2里面有jndi的API,我使用ldap时就用到过,我想原理都是差不多的了

#3


上面说的ldap服务
因为webapp 必然要使用ldap支持的。 


关于webapp server 还比较复杂的我不懂的,你可以自己看看jdni

http://java.sun.com/products/jndi/tutorial/TOC.html#OBJECTS

#4


http://java.sun.com/products/jndi/tutorial/TOC.html#OBJECTS


很好的文章。。。看看去。。。

#5


多谢大家的回复。现在我已经有点思路了。我准备找找Tomcat的代码,看看它是怎么做的。

#6


帮你顶

#7


一样的啊,只要指定 INITIAL_CONTEXT_FACTORY,PROVIDER_URL,
再提供一个ldap服务器,就可以访问了
prop.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
prop.put(Context.PROVIDER_URL,"ldap://localhost:389");

#8


我知道答案了!其实很简单,用Context中提供的功能就可以完成。主要是大家用的都是查找的功能,没有想过初始化的功能。

我找这个的主要原因是,我们写的程序要用main函数进行调试的,相当于javaBean。

我用的是Tomcat的包,不用另外找一个服务器了。下面是代码:

  public void buildContext() {
    try {
      Hashtable env = new Hashtable();

      env.put(Context.INITIAL_CONTEXT_FACTORY,
              "org.apache.naming.java.javaURLContextFactory");
//              "weblogic.jndi.WLInitialContextFactory");
//    env.put(Context.PROVIDER_URL,
//            "t3://weblogicServer:7001");
      env.put(Context.URL_PKG_PREFIXES,
              "org.apache.naming");

      Context ctx = new InitialContext(env);

      Context javaCtx = ctx.createSubcontext("java:comp");
      javaCtx = javaCtx.createSubcontext("env");

      // bind a string object to java:comp/env/num
      javaCtx = (Context)ctx.lookup("java:comp/env");

      if( javaCtx == null ) {
        System.out.println("fail to access url context!");
      }

      javaCtx.bind("num", "10");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }