`

(转)Jndi与spring集成(1)

    博客分类:
  • EJB
阅读更多
JNDI 是JAVAEE 平台技术中最重要的基础支撑技术之一。他为各种Java对象进行命名,并采用目录层次结构管理它们,借助于JNDI API能够操控各种JAVA对象。实际上,JAVAEE5 引入各种Annotation注释(比如,@EJB,@Resource)底层采用JNDI API查找 JavaEE 容器受管资源(比如,EJB3.0组件,JDBC DataSource,JMS ConnectionFactory),并注入到那些应用了Annotation注释的JavaEE组件 (比如,Servlet,JSF后端Bean,EJB3.0组件)中。
Spring2.0针对JNDI API的使用提供了JNDI集成,org.springframework.jndi包就是见证。在Spring 1.x使能应用中,JndiObjectFactoryBean是Spring开发者使用最频繁的工厂Bean,而JndiTemplate模板的使用也 非常频繁。自从Spirng 2.0开始,<jndi-lookup/>内容模式被引入到JNDI集成工作中。此后,<jidi-lookup/>便代替了 JnidObjectFactoryBean的地位,当然JndiObjectFactoryBean是<jndi-lookup/>底层采 用的工厂Bean。
本章从介绍JNDI背景知识及实例入手,进而进入到Spring提供的JNDI集成支持中。随后,Spring2.0引入的<jndi-lookup/>内容模式被介绍到。

背景知识及示例
现有的企业当中,存在各式各样的命名和目录服务。何谓命名和目录服务?命名和目录服务是同过名字,目录形式来管理系统中的对象,无力设备等内容的一种服 务。比如,微软活动目录(AD)、OpenDAP服务器。为了通过应用操纵它们,开发者需要借助于响应的客户端API或客户软件
在JNDI出现之前,开发者只能够通过专有方式操作命名和目录服务,这无疑加大了开发者的学习负担。甚至,企业的实现环境都是异构的,哪怕是同一种目录服务器都会因为运行的操作系统的不同而提供多套客户端API。
JNDI,即Java命名目录服务接口(Java Naming and Directory Interface),它能够对命名和目录服务器进行CRUD操作,这同JDBC与RDBMS的关系类似。只要命名和目录服务器厂商提供对应的JNDI实 现,开发者便能够一致地通过接口操纵它们,从而避免了与厂商绑定的风险。
类似于DNS,JNDI能够讲对象赋予有意义的名字。在DNS中,通过逻辑能够实现对IP地址的映射。在JNDI中,通过预先绑定的名字能够找到目标服务 或者对象。比如,借助于JNDI,我们能通过“java.:/AgileSpringDS”名字获得javax.sql.DataSource对象。这些 都是通过Java命名系统获得的。JNDI在Java SE/Java EE中起到了很重要的作用,正如DNS在当今的因特网中的地位一样,而且会越来越重要。比如,Web服务的兴起、SOA架构的兴起,会使得JNDI在应用 中扮演关键角色。
通常,Java EE应用服务器(比如,GlassFish,JBoss)都会提供命名或目录服务实现(或称为服务提供者)。BEA WebLogic内部采用了LDAP服务器完成登录用户的认证。同样地,在Java SE环境开发中也可以使用本地JNDI服务提供者(而不是由Java EE服务器提供的)。通过http://java.sun.com/products/jidi/serviceproviders.html,开发者能 够浏览到很多JNDI服务提供者。这里,我们以 File System提供者为例。如果开发者熟悉IBM WebSphere MQ,则应该知道他的JNDI实现这是在File System基础之上开发的。打开Eclipse filesystemjndidemo项目,来分析如下代码。
1.Hashtable<String,String> env = new Hashtable<String,string>(2);  
2.//设定上下文工厂  
3.Env.put(Context.INITIAL_CONTEXT_FACTORY,”com.sun.jndi.fscontext.RefFSContextFactroy”);  
4.//设置文件系统路径(注意,开发者需要依据自身的机器修改”file:d://eclipse”)  
5.Env.put(Context.PROVIDER_URL,”file:d://eclipse”);  
6.  
7.Context initCtx = null;  
8.Try{  
9.    //获得初始化上下文  
10.    initCtx = new initialContext(env);  
11.      
12.    //借助于JNDI,查找文件  
13.    Object fc =initCtx.lookup(“eclipse.ini”);  
14.    Log.info(fc);  
15.}  
16.Catch(NamingException ne){  
17.//处理命名异常  
18.Log.error(“NamingException”,ne);  
19.}  
20.Finally{  
21.    Try{  
22.        //关闭上下文  
23.        initCtx.close();  
24.}catch(NamingException ne){;}  
25.}  


上述代码先构造env,然后传给InitialContext.此时,”file:d://eclipse”成了JNDI树的根,eclipse目 录下的所有文件和目录都成为了树的成员。在查找到eclipse.ini后,需要关闭相应的InitialContext。整个过程需要处理 NamingException异常。
用户可以将应用对象存储在命名和目录服务提供者中,并供JNDI应用访问。比如,开发者可以将数据源存储在命名和目录服务器中;通过JNDI能够获得JTA事务管理其(存储在JavaEE 应用服务器提供的命名和目录服务器中)。
实例仅仅展示了JNDI的冰山一角。在实际企业应用中,JNDI的使用更多地发生于Web,EJB,Ear应用场合。比如,在JSF受管组件中访 问EJB3.0组件,借助于JNDI访问JMS Topic及ConnectionFactory。在这些场合中,JNDI的使用非常复杂。如果直接通过JNDI API操控目标资源,开发者要处理很多与实际业务无关的开发内容,具体如下:第一,要负责InitialContext的创建、关闭工作;第二,要负责异 常处理;第三,要考虑JNDI树上查找目标资源的实际;第四,查找到目标资源后,开发者还要考虑缓存策略(运行时是否需要重新去JNDI树上获取资源,否 则他会持有过期资源);第五,要区别对待开发时和生产环境的JNDI处理。考虑到这些对开发者的不利因素,Spring对JNDI提供了全方位的支持,这 也是Spring驱动敏捷开发的又一举措。
通过将JNDI查找操作定义在Spring配置文件中,应用能够操作到相关的JNDI对象,开发者再也不用对JNDI进行硬编码。最为重要的一 点是,应用对这些JNDI对象的依赖都是通过IoC容器注入的,因此开发者不用关注具体对象是从哪里来。甚至,Spring2.0对于Java EE资源(包括JNDI)的配置做了许多简化工作,比如引入<jee:jndi-lookup/>内容模式。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lixiqiang/archive/2007/09/29/1805837.aspx
分享到:
评论

相关推荐

    spring+jotm 多数据源事务管理(三)JNDI+Tomcat

    - `ow_carol.jar`: 提供了与JOTM集成的CORBA支持。 - `jta.jar`: Java Transaction API的核心实现库。 - `jta-spec1_0_1.jar`: JTA规范文档的实现。 - `jts1_0.jar`: Java Transaction Service(JTS)实现。 - `...

    hibernateSynchronizer与spring集成

    在整合Hibernate Synchronizer与Spring框架的过程中,我们主要关注的...但以上内容涵盖了基本的Hibernate Synchronizer与Spring集成的核心知识点。理解并正确配置这些组件将有助于构建一个稳定、高效的Java企业级应用。

    Spring JMS 消息处理-基于JNDI

    7. **实战示例**:最后,博主会提供一个实际的示例,展示如何在一个简单的Spring应用中集成JMS,包括创建JNDI资源、配置Spring容器以及测试发送和接收消息。 通过学习这篇博客,开发者可以了解到如何利用Spring JMS...

    spring与jbpm的集成包(符集成方法)

    下面我们将深入探讨 Spring 与 JBPM 集成的方法和关键知识点。 1. **Spring 框架**:Spring 是一个全面的企业级应用开发框架,支持依赖注入、AOP(面向切面编程)、数据访问、事务管理等。在 BPM 场景中,Spring ...

    spring集成ejb

    在Spring集成EJB的过程中,我们通常会关注以下几个关键知识点: 1. **EJB 3.x 简介**:EJB 3.x 是EJB规范的最新版本,相比早期版本,它显著降低了开发复杂性,引入了注解驱动的编程模型,使得EJB更容易理解和使用。...

    spring3.0+ibatis 集成实例

    1. **配置数据源**:在Spring的配置文件中,你需要定义数据源(DataSource),这通常是通过JNDI查找或者直接配置数据库连接参数实现的。 2. **配置SqlSessionFactory**:SqlSessionFactory是iBatis的核心对象,用于...

    ActiveMQ与spring集成实例之使用消息监听器

    **ActiveMQ与Spring集成实例详解** ActiveMQ是Apache软件基金会下的一个开源项目,它是一个功能丰富的Java消息服务(JMS)提供商,支持多种协议,并且能够处理大量的并发消息传输。而Spring框架则是一个广泛使用的...

    配置 JNDI 数据源

    在Spring框架与Tomcat服务器的集成中,配置JNDI数据源是将数据库连接管理交给服务器来处理,提高应用的可移植性和资源利用率。下面将详细解释配置JNDI数据源的相关知识点。 一、JNDI数据源的概念 JNDI数据源是一种...

    Spring与WebLogic Server的集成

    5. **安全管理**:Spring Security 可以与 WebLogic Server 的身份验证和授权机制集成,实现统一的安全策略。 通过将 Spring 的灵活性和轻量级特性与 WebLogic Server 的企业级功能相结合,开发者可以获得一个强大...

    jboss配置MySql的JNDI

    在IT领域,特别是Java应用服务器环境下,JBoss与MySQL数据库的集成是常见需求之一,而JNDI(Java Naming and Directory Interface)在此过程中扮演着关键角色。本文将深入解析如何在JBoss中配置MySQL的JNDI数据源,...

    spring集成ibatis示例-websphere5.1选型webservice

    **Spring与iBATIS集成** 1. **配置iBATIS的SqlSessionFactory**: 在Spring的配置文件中,我们需要创建一个`SqlSessionFactoryBean`,指定数据源(DataSource)以及映射文件的位置。例如: ```xml ...

    Spring jndi数据源配置方法详解

    此外,Spring jndi 数据源配置方法还可以与 Hibernate 等 ORM 框架集成,实现对数据库的自动管理和缓存。例如:&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation....

    Spring 与hibernate的集成

    **Spring与Hibernate的集成**是Java开发中常见的一种技术组合,用于构建高效、灵活的数据库驱动应用程序。Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能,而Hibernate则是一...

    精通spring--源代码

    包括JNDI集成,EJB3.0集成.线程池和任务调度集成。Java消息服务集成,Java Mail集成,远程服务集成。Java管理扩展集成,Java EE连接器架构集成  专注于Spring2.5高级特性的研究。包括忘却的Spring高级话题,Spring...

    ejb spring

    ** ejb与Spring集成的优势** 1. **灵活性增强**:Spring的IoC容器允许更灵活地管理bean,而ejb则可以提供强大的事务管理和安全控制。结合两者,可以在 ejb 的强大功能基础上,利用Spring的轻量级特性,提高系统的...

    精通Spring(书签)

    包括JNDI集成,EJB3.0集成.线程池和任务调度集成。Java消息服务集成,Java Mail集成,远程服务集成。Java管理扩展集成,Java EE连接器架构集成  专注于Spring2.5高级特性的研究。包括忘却的Spring高级话题,Spring...

    spring,weblogic配置jms

    Spring框架是一个广泛使用的Java应用开发框架,它提供了与多种消息中间件集成的能力,包括WebLogic Server的JMS服务。WebLogic是Oracle公司的一款企业级应用服务器,它支持JMS规范,提供了强大的消息队列和发布/订阅...

    spring集成JMS

    Spring集成JMS提供了丰富的功能和便利的API,降低了开发复杂性,使得开发者能够专注于业务逻辑,而不是底层的消息传递细节。通过使用Spring JMS,你可以构建高度可扩展和可靠的分布式系统,实现高效的消息通信。

    Spring JMS消息处理-不基于JNDI

    总之,Spring JMS提供了强大的消息处理功能,即便不依赖JNDI,也能轻松地与各种消息中间件集成。通过手动配置`ConnectionFactory`和`Destination`,以及利用`JmsTemplate`和`MessageListenerContainer`,开发者可以...

Global site tag (gtag.js) - Google Analytics