JNDI之旅--各应用服务器JNDI初始配置
2011-01-26 22:59
267 查看
使用Java EE应用服务器开发应用程序时,不管是在Web应用还是简单的Java Main中,当需要使用JDBC DataSource、JMS连接工厂、EJB的Home接口时,均需要通过应用服务器提供的JNDI服务,从JNDI Context中获取相应的对象。而且在获取初始的JNDI Context时,不同的应用服务器需要指定不同的属性传给InitialContext才能使用特定应用服务器的JNDI服务。本系列文章旨在透析为什么需要这些设置,一步一步解开JNDI的稍微神秘的面纱......,本文是"JNDI之旅"系列的第一篇
首先给出一个非常常见的代码Demo,以下典型的JNDI代码先是初始化一个InitialContext,然后从该Context中获得EJB的Home接口,从而便可进行EJB的调用。
当然,以上的方式仅限于在Web应用中访问本服务器实例的JNDI服务时可以这样简单的获得JNDI Context,当客户端程序是一个需要访问远程JNDI服务的Web应用或者是一个Java Main的时候,通常需要指定JNDI初始化工厂类、JNDI服务所在的主机、JNDI服务所在主机的相应端口等这些比较标准的信息。当需要实现集群功能的话,还可以根据各个应用服务器厂商的特性,指定多个JNDI服务节点(实际就是多个服务器实例或者说是多台机器)信息,比如Glassfish在JNDI集群时需要指定com.sun.appserv.iiop.endpoints属性,用逗号分隔多个url。
各个应用服务器在使用JNDI服务的步骤上基本分为以下几步:
1,new一个Properties,properties是为了保存JNDI服务所需的属性
2,往properties中添加java.naming.factory.initial,这一步通常各个厂商都不一样
3,往properties中添加JNDI服务的主机和端口信息,这一步几乎每个厂商都支持设置"java.naming.provider.url"或者是"org.omg.CORBA.ORBInitialHost/org.omg.CORBA.ORBInitialPort"配置,其次就是各个厂商私有的指定主机和端口的方式了
4,有的应用服务器可能还需要设置java.naming.security.principal和java.naming.security.credentials属性指定用户和密码
5,最后把以上properties对象传递给InitialContext的构造函数便可完成JNDI Context的初始化,继而做lookup的动作
以下列举各个服务器的JNDI设置,其中特别要注意的是java.naming.factory.initial一定要根据不同的应用服务器做不同的配置
Glassfish
JBoss
Weblogic
Websphere
Geronimo
综上,各个服务器基本都实现了自己的JNDI工厂类,在设置主机和端口时基本都支持标准的java.naming.provider.url属性。在后续的文章中,会有如果实现自己的JNDI工厂类的相关讲解,敬请期待~!
首先给出一个非常常见的代码Demo,以下典型的JNDI代码先是初始化一个InitialContext,然后从该Context中获得EJB的Home接口,从而便可进行EJB的调用。
try { InitialContext context = new InitialContext(); Object obj = context.lookup("java:comp/env/ejb/HelloEJBRef"); HelloHome helloHome = (HelloHome) PortableRemoteObject.narrow(obj, HelloHome.class); Hello hello = helloHome.create(); response.getWriter().write("Invoke EJB Starting...");//write data to HTTP Response response.getWriter().write("<br>" + hello.sayHello()); response.getWriter().write("<br>Successed."); } catch (NamingException e) { throw new ServletException(e); }
当然,以上的方式仅限于在Web应用中访问本服务器实例的JNDI服务时可以这样简单的获得JNDI Context,当客户端程序是一个需要访问远程JNDI服务的Web应用或者是一个Java Main的时候,通常需要指定JNDI初始化工厂类、JNDI服务所在的主机、JNDI服务所在主机的相应端口等这些比较标准的信息。当需要实现集群功能的话,还可以根据各个应用服务器厂商的特性,指定多个JNDI服务节点(实际就是多个服务器实例或者说是多台机器)信息,比如Glassfish在JNDI集群时需要指定com.sun.appserv.iiop.endpoints属性,用逗号分隔多个url。
各个应用服务器在使用JNDI服务的步骤上基本分为以下几步:
1,new一个Properties,properties是为了保存JNDI服务所需的属性
2,往properties中添加java.naming.factory.initial,这一步通常各个厂商都不一样
3,往properties中添加JNDI服务的主机和端口信息,这一步几乎每个厂商都支持设置"java.naming.provider.url"或者是"org.omg.CORBA.ORBInitialHost/org.omg.CORBA.ORBInitialPort"配置,其次就是各个厂商私有的指定主机和端口的方式了
4,有的应用服务器可能还需要设置java.naming.security.principal和java.naming.security.credentials属性指定用户和密码
5,最后把以上properties对象传递给InitialContext的构造函数便可完成JNDI Context的初始化,继而做lookup的动作
以下列举各个服务器的JNDI设置,其中特别要注意的是java.naming.factory.initial一定要根据不同的应用服务器做不同的配置
Glassfish
Properties props = new Properties(); //JNDI初始化工厂 props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory"); //下面两个可以不设置 props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); //以下关于地址的设置,可以任意选择一种方式 //方式1:使用标准的ORB设置,需要设置ORB的主机和端口,端口实际上就是Glassfish的IIOP监听的端口 props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); //方式2:使用带iiop前缀的地址格式 props.setProperty("java.naming.provider.url", "iiop://localhost:3700"); //方式3:可以指定多个JNDI服务的地址,多个地址用逗号分隔 props.setProperty("com.sun.appserv.iiop.endpoints", "localhost:3700,localhost:13700"); InitialContext ic = new InitialContext(props); ic.lookup(...) ...
JBoss
Properties props = new Properties(); //JNDI初始化工厂 props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); //方式1:JNDI服务主机和端口设置 props.setProperty("java.naming.provider.url", "localhost:1099"); InitialContext ic = new InitialContext(props); ic.lookup(...) ...
Weblogic
Properties props = new Properties(); //JNDI初始化工厂 props.setProperty("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory"); //JNDI服务主机和端口的设置 props.setProperty("java.naming.provider.url", "t3://localhost:7001"); props.put("java.naming.security.credentials", new T3User("user1", "psw1")); InitialContext ic = new InitialContext(props); ic.lookup(...) ...
Websphere
Properties props = new Properties(); //JNDI初始化工厂 props.setProperty("java.naming.factory.initial", "com.ibm.websphere.naming.WsnInitialContextFactory"); //JNDI服务主机和端口的设置 props.setProperty("java.naming.provider.url", "iiop://localhost:9001"); InitialContext ic = new InitialContext(props); ic.lookup(...) ...
Geronimo
Properties props = new Properties(); //JNDI初始化工厂 props.setProperty("java.naming.factory.initial", "org.openejb.client.RemoteInitialContextFactory"); //JNDI服务主机和端口的设置 props.setProperty("java.naming.provider.url", "localhost:4201"); //设置安全信息 props.setProperty("java.naming.security.principal", "username"); props.setProperty("java.naming.security.credentials", "passwd"); InitialContext ic = new InitialContext(props); ic.lookup(...) ...
综上,各个服务器基本都实现了自己的JNDI工厂类,在设置主机和端口时基本都支持标准的java.naming.provider.url属性。在后续的文章中,会有如果实现自己的JNDI工厂类的相关讲解,敬请期待~!
相关文章推荐
- 润乾在jetty应用服务器下的JNDI配置一
- 润乾在jetty应用服务器下的JNDI配置一
- 润乾在jetty应用服务器下的JNDI配置二
- DAO层配置绑定weblogic应用服务器的JNDI导致单元测试失败
- Linux应用服务器搭建手册——JDK安装与配置
- JNDI介绍及常用应用服务器的EJB调用
- JNDI之旅--各应用服务器JNDI初始配置
- 第四十一课 Web服务器代理架构、Haprox配置及Haproxy ACL的应用
- Windows Server 2012 R2 NAP服务器安装与配置04之 NPS应用DHCP相关设置
- 配置IBMHTTPServer和WebSphereApplicationServer连接优化应用服务器性能
- 微信公众号开发初始服务器调试配置
- 六、框架的应用服务器配置
- CentOS 6.4下安装和配置Samba 第2页_服务器应用_Linux公社-Linux系统门户网站
- nginx+keepalived负载均衡可用框架(补一 keepalived安装配置-热备-(服务器层和应用层))
- JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
- jndi调用时,各种应用服务器InitialContext的写法
- 使用MDT2013部署Win8系统之四-配置MDT服务器之导入应用及驱动程序
- tomcat和weblogic应用服务器JAVA中JNDI写法
- Linux Sendmail 服务器配置及应用
- 以oracle数据库为例配置Tomcat服务器JNDI数据库连接池