天河区住房和建设水务局官方网站,做旅游产品的网站有哪些,建设好网站为什么读取不到文件,html5网页设计培训最近写书#xff0c;写到JNDI#xff0c;到处查资料#xff0c;发现所有的中文资料都对JNDI解释一通#xff0c;配置代码也是copy的#xff0c;调了半天也没调通#xff0c;最后到SUN的网站参考了一下他的JNDI tutorial#xff0c;终于基本上彻底明白了和多数java服务一…最近写书写到JNDI到处查资料发现所有的中文资料都对JNDI解释一通配置代码也是copy的调了半天也没调通最后到SUN的网站参考了一下他的JNDI tutorial终于基本上彻底明白了和多数java服务一样SUN对JNDI也只提供接口使用JNDI只需要用到JNDI接口而不必关心具体实现
Java 代码 private static Object jndiLookup() throws Exception { InitialContext ctx new InitialContext(); return ctx.lookup(java:comp/env/systemStartTime);
} 上述代码在J2EE服务器环境下工作得很好但是在main()中就会报一个NoInitialContextException许多文章会说你创建InitialContext的时候还要传一个Hashtable或者Properties像这样Hashtable env new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, weblogic.jndi.WLInitialContextFactory);
env.put(Context.PROVIDER_URL,t3://localhost:7001);
InitialContext ctx new InitialContext(env);这个在WebLogic环境下是对的但是换到JBoss呢再用JBoss的例子 其实之所以有NoInitialContextException是因为无法从System.properties中获得必要的JNDI参数在服务器环境下服务器启动时就把这些参数放到System.properties中了于是直接new InitialContext()就搞定了不要搞env那么麻烦搞了env你的代码还无法移植弄不好管理员设置服务器用的不是标准端口还照样抛异常。但是在单机环境下可没有JNDI服务在运行那就手动启动一个JNDI服务。我在JDK 5的rt.jar中一共找到了4种SUN自带的JNDI实现 LDAPCORBARMIDNS。 这4种JNDI要正常运行还需要底层的相应服务。一般我们没有LDAP或CORBA服务器也就无法启动这两种JNDI服务DNS用于查域名的以后再研究唯一可以在main()中启动的就是基于RMI的JNDI服务。现在我们就在main()中启动基于RMI的JNDI服务并且绑一个Date对象到JNDI上
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();注意我直接把JNDI的相关参数放入了System.properties中这样后面的代码如果要查JNDI直接new InitialContext()就可以了否则你又得写Hashtable env ...在RMI中绑JNDI的限制是绑定的对象必须是Remote类型所以就自己扩展一个。 其实JNDI还有两个Context.SECURITY_PRINCIPAL和Context.SECURITY_CREDENTIAL如果访问JNDI需要用户名和口令这两个也要提供不过一般用不上。在后面的代码中查询就简单了InitialContext ctx new InitialContext();
Date startTime (Date) ctx.lookup(java:comp/env/systemStartTime);