`
zc985552943
  • 浏览: 287345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Babe4ca6-5e6f-33aa-9078-762ee3ccfb7e
云计算--hadoop
浏览量:11490
5e98c2c1-2a82-3388-bc80-7fca0170bb12
redis解说
浏览量:26649
088014c7-4d3f-39ce-b72e-4ebe7046a134
MongoDB读书笔记
浏览量:15634
D2b74847-c860-3e26-96fe-3fa4498d6348
Maven读书笔记
浏览量:26690
688db20f-402d-3a1d-8188-d6153d6c7465
Java通信
浏览量:13399
社区版块
存档分类
最新评论

01_Java通信_JNDI_概念

阅读更多

在S2SH开发中会使用的Spring来注入数据源,在本地开发时我们使用<bean>注入数据源

	<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxActive" value="${jdbc.maxActive}" />
	</bean>

 

上面的配置文件取自Spring中,有了dataSourceSpied就可以将这个数据源引入到hibernate的sessionFactory

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<!-- 配置sessionFactory中要用的数据源 -->
		<property name="dataSource" ref="dataSourceSpied" />
		...
	</bean>

 

但是在生产上,或者测试环境数据库的链接、用户名、密码都是很重要的信息,不能直接暴露在外面。所以在生成、测试环境我们会使用JNDI这种服务来得到数据库链接

<jee:jndi-lookup id="dataSourceSpied" jndi-name="dataSourceDBaihis" />

然后再web服务器上创建数据源。我们使用weblogic11这种web服务器,在上面创建数据源,数据源的名字叫做“dataSourceDBaihis”这样在Spring配置文件中使用:

<jee:jndi-lookup id="dataSourceSpied" jndi-name="dataSourceDBaihis" />

就能得到数据源。

那么什么叫做JNDI呢?

JNDI:Java Naming and Directory Interface,Java命名和目录接口

是一种命名服务的抽象机制,用通俗的话讲就是:我知道在网络上有一个对象,并且知道这个对象的名字和网络地址,那么我可以通过JNDI来获得这个网络上的对象

非通俗解释:

JNDI的目的是用来查找J2EE服务器的注册资源。只要该对象在命名服务器上注册过,且你知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。这样你就可以在无需知道对象位置的情况下获取和使用对象。

拿上面介绍的数据源来说明:

项目中没有正在实例化数据源,只是通过jndi-lookup呼叫了一个数据。我知道数据源的名字,因为项目部署在weblogic上,所以项目自然知道这个数据源的地址。所以项目知道了数据源对象的地址和数据源的名称,这样就可以通过JNDI获得这个数据,并注入到hibernate中。

 

Java对JNDI只提供接口,使用JNDI只需要用到JNDI接口而不必关心具体实现。这就类似与Java的JDBC,Java也只是提供了JDBC的接口,各个数据库厂家提供接口的实现。开发过程中程序员不用关心厂家是如何实现的,只需要面向接口编程即可。

以上完全是停留在概念上理解什么是JNDI,下节将要介绍两个简单的例子,这样我们可以更加清晰的认识到JNDI是如何获得远程对象的。先在这里做个小铺垫,因为Java只提供了JNDI的接口,所以在写demo过程中要用到厂家提供的实现。我在这里列举了各个厂家提供的链接和工厂类:

//jboss:
Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"
Context.URL_PKG_PREFIXES, "org.jboss.naming"
Context.PROVIDER_URL, "localhost:1099"

//weblogic:
Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"
Context.PROVIDER_URL, "t3://localhost:7001"

//apusic(金蝶):
Context.INITIAL_CONTEXT_FACTORY, "com.apusic.jndi.InitialContextFactory"
Context.PROVIDER_URL, "rmi://localhost:6888"

//WebSphere:
Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"
Context.PROVIDER_URL, "iiop://localhost:900"


//J2EE  SDK(J2EE  RI):
Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"
Context.PROVIDER_URL, "iiop://127.0.0.1:1050"

//SilverStream:
Context.INITIAL_CONTEXT_FACTORY, "com.sssw.rt.jndi.AgInitCtxFactory"
Context.PROVIDER_URL, "sssw://localhost:80"

//OC4J:
Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory"
Context.PROVIDER_URL, "ormi://127.0.0.1/"

//WAS5:
Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"
Context.PROVIDER_URL, "iiop://localhost:2809"

 解释一下上述代码:

Context.INITIAL_CONTEXT_FACTORY:指定到目录服务的连接工厂
Context.PROVIDER_URL:目录服务提供者URL

2
2
分享到:
评论

相关推荐

    Java相关技术(详细资料)

     5、JNDI(Java Naming and Directory Interface)提供从Java平台到的统一的无缝的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。  6、JMAPI(Java Management API)为异构网络上系统、网络和服务管理的...

    Java数据编程指南

    Java和ODMG 3.0规范 基础 ODMG的核心概念 对象定义语言 小结 第11章 目录服务与JNDI 命名与目录服务 使用JNDI JAVA与LDAP 从理论到实践 标准的LDAP操作 LDAP服务器改进 在LDAP...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    java 面试题 总结

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...

    EJB 编程及 J2EE 系统架构和设计.pdf

    Servlets 和JSP、EJB 技术、数据库访问、分布式通信技术(Java RMI、Java IDL、 JNDI、JMS)、安全等;本文试图给出J2EE 平台技术概念理解上的一个较为清晰 的完整的思路,帮助大家掌握各技术间的相互关系和重要的...

    EJB编程及J2EE系统框架设计.pdf

    Servlets 和JSP、EJB 技术、数据库访问、分布式通信技术(Java RMI、Java IDL、 JNDI、JMS)、安全等;本文试图给出J2EE 平台技术概念理解上的一个较为清晰 的完整的思路,帮助大家掌握各技术间的相互关系和重要的...

    java面试宝典

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    EJB编程及J2EE系统架构和设计

    这些技术涵盖了组件技术、 Servlets 和JSP、EJB 技术、数据库访问、分布式通信技术(Java RMI、Java IDL、 JNDI、JMS)、安全等;本文试图给出J2EE 平台技术概念理解上的一个较为清晰 的完整的思路,帮助...

    EJB 编程及 J2EE 系统架构和设计

    API,这些技术涵盖了组件技术、 Servlets和JSP、EJB技术、数据库访问、分布式通信技术(Java RMI、Java IDL、 JNDI、JMS)、安全等;本文试图给出 J2EE 平台技术概念理解上的一个较为清晰的完整的思路,帮助...

    超级有影响力霸气的Java面试题大全文档

    面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化...

    千方百计笔试题大全

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    精通websphere MQ

    第 1 章 概念与原理........................................................................................................ 16 1.1 简介...................................................................

Global site tag (gtag.js) - Google Analytics