`
AllenHU0320
  • 浏览: 83148 次
  • 性别: 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框架.ppt

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

    spring框架\Spring 中文开发手册

    spring框架\Spring 中文开发手册.pdf

    spring-framework完整源代码(spring框架源码)

    spring-framework完整源代码(spring框架源码) 完整的Spring工程源码,工程内内包括spring各模块源码 以下为spring工程源码包结构: spring-src org.springframework aop,beans,cache,context,core,dao,ejb,...

    spring-aop-5.1.0.RELEASE.jar

    spring-**cntext**-4.3.6.RELEASE.jar:spring提供了基础IOC功能上的扩展服务,提供了很多企业级服务的支持,如邮件服务,任务调度,JNDI定位,EJB集成,远程访问,缓存以及各种试图层框架的封装等。 spring-...

    spring4.3.2参考文档(英文)

    所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序...

    spring源码所需jar文件lib_2(与上一个资源spring-framework完整源代码(spring框架源码))一起使用

    spring-framework完整源代码(spring框架源码) 完整的Spring工程源码,工程内内包括spring各模块源码 以下为spring工程源码包结构: spring-src org.springframework aop,beans,cache,context,core,dao,ejb,...

    spring4.3.9相关jar包

    spring-context.jar(必须):这个jar 文件在基础IOC功能上为Spring 核心提供了大量扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持...

    Spring应用开发完全手册 源码

    主要内容包括Spring框架开发环境的搭建及使用Spring时必须掌握的基础知识,Spring的数据持久化、事务管理以及企业应用中的远程调用,JNDI命名服务,JMail发送电子邮件等企业级服务,小型网站或应用程序的开发思路、...

    spring4.1核心包

    包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    spring-framework-3.1.0.RELEASE.zip

    完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 控制反转——Spring通过一种...

    spring3.0jar包

    完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ◆控制反转——Spring通过...

    精通Spring(书签)

     Spring 2.5是迄今为止完美的Java EE架构级框架,全面深入、多维度演绎Spring 2.5的各个方面,本书蕴含作者多年Java EE研发实践及经验。  凝聚Java魅力,成就开发专家  看清Java万花的本质,从复杂的表象中寻找...

    ssm+maven+jndi+jdbc

    ssm+maven+jndi+jdbc,完整的ssm框架,内含mysql和oracle两种连库方式,和jndi与数据库连接池两种,spring采用5.0.4,mybatis采用3.4.6

    Spring 中文API&开发文档.rar

    完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ◆控制反转——Spring通过一...

    spring-framework-3.0.0.M4-with-docs

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    Spring基础与快速入门

    所谓非侵入式是指Spring框架的API不会在业务逻辑上出现,也就是说我们的业务逻辑应该是纯净的,不能出现与业务逻辑无关的代码。首先针对应用而言,这样我们才能将业务逻辑从当前应用中剥离出来,从而在其他的应用中...

    SSM框架-c3p0架包zip

    SSM框架中c3p0架包zip ,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

    Spring面试专题.md

    * Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); * Spring AOP:AOP服务; * Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; * Spring ORM:对现有的ORM框架的支持; * ...

    精通Spring (书签版)

     Spring 2.5是迄今为止完美的Java EE架构级框架,全面深入、多维度演绎Spring 2.5的各个方面,本书蕴含作者多年Java EE研发实践及经验。  凝聚Java魅力,成就开发专家  看清Java万花的本质,从复杂的表象中寻找...

Global site tag (gtag.js) - Google Analytics