感谢 http://yangzb.iteye.com/blog/245410
1. 什么是 JNDI ( Java Naming and Directory Interface )
JNDI 是用于访问不同命名和目录服务的统一 API 接口;
2. JNDI 的架构和原理
1. 架构:
第一层: java 代码,是访问 JNDI 的代码;
第二层: JNDI API :统一的命名和目录服务接口
第三层: JNDI Naming Manager : JNDI 管理器
第四层: JNDI SPI :用于构建 JNDI 实现的框架,能够动态的插入命名和目录服务提供商的产品;
第五层:命名和目录服务提供商的产品;
命名和目录服务提供商的产品 , 例如: DNS,LDAP,NIS,NDS……..; 因为这些产品都是不同的提供商提供的产品,所以他们的命名和目录服务的标准不一致,各个目录服务采用的访问协议也是不一样的,所以,要是直接访问他们的话,就要编写不同的 java 代码来访问他们;因此, JNDI SPI 就解决了这个问题,它能动态的插入这些命名和目录服务,能够将其协议专属的目录产品集成到系统中,使得我们能只需要调用一个统一的 javaAPI 就能够访问插入的产品了;
2 .原理:
JNDI 其实很好理解,他就是一个树状的结构,它的最顶是一个 initialContext 节点,然后它的下面就是绑定的一些对象或是一些 subContext ,用 JNDI 树就能够查找到树中每一个绑定上的节点上的对象的引用;
3. 怎样连接到 JNDI 上?
Environment environment = new Environment() ;// 创建一个环境对象
environment.setProviderurl(“t3://www.blogjava.net”) ;
environment.setSecurityPrincipal(“todd”) ;// 认证的用户名
environment.setSecurityCredentials(“841026”) ;// 密码
Context context = environment.getInitialContext() ;
// 创建一个 subContext 并绑定一个对象:
Context subContext = context.createSubcontext(“subContext”) ;
subContext.rebind(“newObject”,object) ;// 绑定的对象必须是可序列化的
subContext.close() ;
context.close() ;
4. 如何通过 JNDI 查找 bind 的对象?
Object object = context.lookup(“User”) ;
// 把 user 窄化到原型
User user = (User)javax.rmi.PortableRemoteObject.narrow(object, User.class) ;
context.close() ;
Spring与 weblogic jndi集成
虽然 spring本身是可以直接使用 jndi来进行获取一些对象 ,但是在和 weblogic集成的时候往往还是容易出
现问题 (在 web应用的时候出现问题的可能性不大 ,因为 container已经做了很多事情了 .)但是在 ide或者其
他的应用环境下 (不同的 jvm的时候 ),通常找不到 provider_url等属性造成无法找到 jndi.
修改配置文件如下 :
<!-- 通过 jndi的方式来调用 datasource,即使不一定是在 j2ee环境中也可以正常使用默认情况下,如果
没有指定, "java:comp/env/"将放在后面 jndi名称前面
-->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/myDatasource</value>
</property>
<!-- 如果你不想使用 'java:comp/env/'前缀的话请设置下面的值为 true, 默认值为 false -->
<property name="resourceRef">
<value>false</value>
</property>
<property name="jndiEnvironment">
<props>
Spring连接 weblogic-DataSource错误
<!-- The value of Context.PROVIDER_URL -->
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory
</prop>
</props>
</property>
</bean>
注意在设置的时候由于不在同一个 jvm里面 ,所以一定要设置 provider.url和 factory.initial的属性值 ,否
则会出现 NoInitialContextException的异常出现 .
此外如果和其他的应用服务器集成的话可能不只是要设置上面的两个属性,还要设置相关的其他属性。详
细情况参考: javax.naming.Context类的说明文档。
http://java.sun.com/j2se/1.4.2/docs/api/javax/naming/Context.html
其中设置的:
<property name="jndiEnvironment">
<props>
<!-- The value of Context.PROVIDER_URL -->
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory
</prop>
</props>
</property> 实际上就是设置 Context初始化的时候设置的 Properties属性。
http://java.mblogger.cn/layout/posts/11849.aspx
=====================================================================
New Document<bean id="zooDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>ZOO_JNDI</value></property>
<property name="jndiEnvironment"> <props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
<prop key="java.naming.security.principal">weblogic</prop>
<prop key="java.naming.security.credentials">weblogic</prop>
</props>
</property>
</bean>
=====================================================================
各种应用服务器的不同的 properties集合 :
websphere:
java.naming.provider.url->iiop://websphere.machine.domain.com:900
java.naming.factory.initial ->com.ibm.websphere.naming.WsnInitialContextFactory
java.naming.factory.url.pkgs ->com.ibm.ws.naming
org.omg.CORBA.ORBClass->com.ibm.rmi.iiop.ORB
org.omg.CORBA.ORBSingletonClass->com.ibm.rmi.corba.ORBSingleton
javax.rmi.CORBA.UtilClass->com.ibm.rmi.javax.rmi.CORBA.Util
javax.rmi.CORBA.StubClass->com.ibm.rmi.javax.rmi.CORBA.StubDelegateImpl
javax.rmi.CORBA.PortableRemoteObjectClass->com.ibm.rmi.javax.rmi.PortableRemoteObject
weblogic:
java.naming.factory.initial -> weblogic.jndi.WLInitialContextFactory
java.naming.provider.url -> t3://localhost:7001
jboss:
ava.naming.factory.initial ->org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs->org.jboss.naming.client
java.naming.provider.url ->jnp://10.0.0.18:1099
sunone IMQ ldap:
java.naming.provider.url -> ldap://localhost:389/dc=yusong,dc=com
java.naming.factory.initial -> com.sun.jndi.ldap.LdapCtxFactory
sunone Application Server:
java.naming.provider.url -> iiop://192.168.0.34:3700
java.naming.factory.initial -> com.sun.jndi.cosnaming.CNCtxFactory
oracle oc4j:
java.naming.factory.initial->com.evermind.server.ApplicationClientInitialContextFactory
java.naming.provider.url->ormi://localhost/bmpapp
分享到:
相关推荐
《logback jms源码分析及用法小结》 在Java世界中,日志管理是每个项目不可或缺的一部分。Logback作为一款强大的日志框架,因其高效、灵活和可配置性而深受开发者喜爱。本文将重点探讨Logback如何集成JMS(Java ...
1.5 本章小结 第2 章 Enterprise JavaBeans 2.1 EJB 技术简介 2.2 EJB 体系结构(一) 2.3 EJB 体系结构(二) 2.4 如何开发EJB(一) 2.5 如何开发EJB(二) 2.6 本章小结 第3 章 EJB 技术进阶 3.1 实体EJB 的开发技术之一...
1.5 小结 13 第2章 使用Jakarta Commons来简化开发 14 2.1 Jakarta Commons的功能和用法 14 2.2 小结 18 第3章 Java EE容器 19 3.1 什么是容器 19 3.2 Tomcat的安装和使用 20 3.3 小结 25 第4章 在...
JDBC 2.0可选包 简介 DataSource与JNDI 连接池 RowSet 分布式事务与Optional Package 小结 第8章 SQLJ 简介 什么是SQLJ 准备开始 使用SQLJ SQLJ定制 小结 第9章 数据库...
172 10.5 小结 177 第11章 EJB 179 11.1 EJB简介 179 11.1.1 EJB的特点 179 11.1.2 EJB类型与组成 180 11.1.3 EJB 3.0的新特性 181 11.2 元数据注释和部署描述符 181 11.2.1 元数据注释 181 11.2.2 部署描述符 182 ...
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...2.6小结 ...3.7小结 ...4.6小结 ...5.2.1使用jndi数据源 ...5.8小结 ...6.5小结 ...7.7小结 ...b.4小结
1.5 本章小结 第2章 测试设计模式 2.1 针对失败而测试 2.2 工厂 2.3 数据驱动测试 2.4 异步测试 2.5 测试多线程代码 2.6 性能测试 2.7 模拟和桩 2.8 依赖的测试 2.9 继承和annotation范围 2.10 测试分组 2.11 ...
1.5 本章小结 第2章 测试设计模式 2.1 针对失败而测试 2.2 工厂 2.3 数据驱动测试 2.4 异步测试 2.5 测试多线程代码 2.6 性能测试 2.7 模拟和桩 2.8 依赖的测试 2.9 继承和annotation范围 2.10 测试分组 2.11 ...
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结
1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...
1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...
1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...
1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...
1.3 小结 1.4 思考题 第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 ...