`
AllenHU0320
  • 浏览: 85851 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring框架内的JNDI支持

 
阅读更多

1.JNDI简单回顾

JNDI(Java Naming and Directory Interface,Java命名与目录接口),主要目的是为了统一各种命名与目录服务的访问接口。整个JNDI的架构由API和SPI(Service Provider Interface)两部分组成。

JNDI API主要公开给Java应用程序使用,它为Java应用程序访问各种命名与目录服务提供了统一的接口。不管Java应用程序将访问的命名和目录服务如何变换,只要Java应用程序是通过JNDI API进行命名和目录服务访问的,就可以“无视”各种具体命名和目录服务的差异和变更。JNDI SPI主要公开给具体命名或者目录服务提供商使用,它为各种具体的命名和目录服务产品提供了一个扩展层。JNDI的架构设计拥有良好的通用性(从API角度)和扩展性(从SPI角度)。在JavaEE平台上,JNDI更多的是为资源的访问和部署提供一个隔离层。

 

2.Spring框架内JNDI访问的基石-JndiTemplate

 通常情况下的JNDI API的使用示例

public DataSource getDataSourceInTraditionalStyle() throws NamingException{

      HashTable env = new HashTable();

      env.put(Context.INITIAL_CONTEXT_FACTORY,"...");

      env.put(Context.PROVIDER_URL,"...");

      //其他可能的设置...

      Context context = null;

      try{

            context = new InitialContext(env);

            return (DataSource)context.lookup("jdbc/yourDataSource");

      }finally{

            if(context != null){

                   try{context.close();}

                   catch(NamingException e){e.printStackTrace();//不要这样做}

            }

      }

}

Spring框架提供了org.springframework.jndi.JndiTemplate这一Helper类以帮助我们简化一系列JNDI操作,包括对象的查找、绑定或者解除绑定等

JndiTemplate核心模板方法定义代码摘录

public Object execute(JndiCallback contextCallback)throws NamingException{

      Context ctx = createInitialContext();

      try{

            return contextCallback.doInContext(ctx);

      }finally{

            try{ctx.close();}

            catch(NamingException ex){logger.debug("Could not close JNDI InitialContext",ex);}

      }

}

JndiCallback回调接口负责提供具体的JNDI访问逻辑,而底层的JNDI基础设施管理则由当前模板方法来负责

演示使用JndiTemplate进行JNDI资源访问与传统API使用模式上的差别

public DataSource getDataSourceViaJndiTemplate() throws NamingException{

      Properties env = new Properties();

      env.setProperty(Context.INITIAL_CONTEXT_FACTORY,"...");

      env.setProperty(Context.PROVIDER_URL,"...");

      //其他可能的设置...

      JndiTemplate jndiTemplate = new JndiTemplate(env);

      return (DataSource) jndiTemplate.lookup("jdbc/yourDataSource");

}

配置代码

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">

      <property name="environment">

             <props>

                    <prop key="java.naming.factory.initial">...</prop>

                    <prop key="java.naming.provider.url">...</prop>

             </props>

      </property>

</bean>

 

3.JNDI对象的依赖注入-JndiObjectFactoryBean

Spring框架提供的org.springframework.jndi.JndiObjectFactoryBean帮助我们完成更完美的任务。JndiObjectFactoryBean是Spring的FactoryBean实现类,负责根据请求的jndi名称,查找并返回绑定到JNDI服务的相应资源引用。帮助JndiObjectFactoryBean完成所有JNDI访问操作的,自然就是JndiTemplate。

public class DataDourceRequired{

     private DataSource dataSource;

     //相应的getter和setter等方法定义

     ...

}

如下的Bean定义将保证对象获取来自JNDI的DataSource引用:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" p:jndiName="jdbc/yourDataSource" />

<bean id="target" class="...DataSourceRequired" p:dataSource-ref="dataSource">

Spring2.0以后,以上配置内容在引入jee命名空间的XSD配置文件中可以进一步简化

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/yourDataSource" />

<bean id="target" class="...DataSourceRequired" p:dataSource-ref="dataSource" />

JndiObjectFactoryBean的存在,让对象与其所依赖的对象与JNDI不发生任何的耦合

JndiObjectFactoryBean属性:

lookupOnStartup

cache

defaultObject

分享到:
评论

相关推荐

    spring获取weblogic jndi数据源的两种方式

    在Spring框架中,通过JNDI(Java Naming and Directory Interface)可以方便地访问WebLogic服务器中的数据源。这为应用程序提供了高度解耦的数据访问机制,使得应用程序能够更加灵活地管理与数据库的连接。本文将...

    SpringLDAP和JNDI的增删改查

    Spring LDAP是Spring框架的一个扩展,它为LDAP(Lightweight Directory Access Protocol)提供了一个面向对象的编程模型。Spring LDAP使得开发者可以使用熟悉的Spring编程风格来处理LDAP操作,简化了与目录服务器的...

    Spring框架.ppt

    提供Spring框架的基本功能,其主要组件是BeanFactory,是工厂模式的实现。 Spring 上下文。向Spring 框架提供上下文信息,包括企业服务,如 JNDI、EJB、电子邮件、国际化、校验和调度等。 Spring AOP。通过配置管理...

    spring配置JNDI数据源

    Spring框架作为一个强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,提供了多种配置数据源的方式,其中包括通过JNDI(Java Naming and Directory Interface)来查找和配置数据源。JNDI...

    spring 配置jndi

    在Spring框架中,JNDI(Java Naming and Directory Interface)主要用来查找和绑定资源,如数据源、EJB等。JNDI允许我们通过名称来访问分布式环境中的对象,这在多层架构或集群环境中非常有用。下面我们将深入探讨...

    如何在spring中等价配置得到原本由jndi配置实现的数据源

    在Spring框架中,数据源(DataSource)是应用与数据库交互的核心组件。通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用...

    spring框架\Spring 中文开发手册

    《Spring框架:Spring中文开发手册》不仅涵盖了Spring框架的基本概念和技术要点,还深入探讨了其高级特性,如云原生支持、微服务架构、事件驱动编程等,为开发者提供了一站式的Spring学习资源。无论你是Spring框架的...

    springssh 我上培训班时spring框架搭建课件

    Spring框架支持多种数据源实现,如基于JNDI的数据源或本地数据源。 2. **SessionFactory创建**:接着,利用配置好的数据源来创建SessionFactory,它是Hibernate的核心工厂对象,负责管理Session的生命周期,并提供...

    Spring框架

    ### Spring框架概述 #### 一、Spring框架简介 Spring是一个开放源代码的设计层面框架,它主要解决了业务逻辑层与其他各层之间的松耦合问题。为了达成这一目标,Spring框架将面向接口的编程思想贯穿于整个系统应用...

    Spring JMS 消息处理-基于JNDI

    在IT行业中,Spring框架是Java开发中的重要工具,它提供了丰富的功能来简化应用程序的构建,尤其是在企业级应用中。Spring JMS(Java消息服务)模块是Spring框架的一部分,用于处理消息队列通信,这是一种异步处理和...

    Spring框架.docx

    Spring框架是Java开发领域中的一款核心框架,设计的目的是解决企业级应用开发的复杂性,使得开发者能够更专注于业务逻辑的实现,而非基础设施的搭建。Spring框架的核心特性包括控制反转(IoC)和面向切面编程(AOP)...

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

    在本篇文章中,我们将深入探讨如何利用Spring框架结合JOTM(Java Open Transaction Manager)来实现多数据源下的分布式事务管理。我们将通过具体实例展示如何在Tomcat服务器环境下配置并使用这些技术。 #### 一、...

    spring框架所需要核心jar包

    Spring框架是中国著名的Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。它简化了Java应用程序的开发,通过依赖注入(Dependency Injection,DI)和...

    spring框架用到的jar包下载

    Spring框架是Java开发中广泛应用的一个开源框架,以其模块化、可扩展性和强大的功能著称。在本压缩包中,包含了Spring框架以及与之配合使用的多个关键库,以便于进行Java应用开发。下面是这些jar包的详细说明: 1. ...

    Spring框架jar包之间的依赖关系(详细图解)

    Spring框架是Java应用程序开发中的一个核心框架,以其强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性而闻名。在Spring框架中,不同功能的实现被拆分成多个模块,这些模块通常以jar包的...

    Spring jndi数据源配置方法详解

    Spring jndi 数据源配置是指在 Spring 框架中使用 JNDI(Java Naming and Directory Interface)来配置数据源的方法。JNDI 是一个 Java API,用于访问命名和目录服务。通过使用 JNDI,可以将数据源配置独立于应用...

Global site tag (gtag.js) - Google Analytics