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框架中,通过JNDI(Java Naming and Directory Interface)可以方便地访问WebLogic服务器中的数据源。这为应用程序提供了高度解耦的数据访问机制,使得应用程序能够更加灵活地管理与数据库的连接。本文将...
Spring LDAP是Spring框架的一个扩展,它为LDAP(Lightweight Directory Access Protocol)提供了一个面向对象的编程模型。Spring LDAP使得开发者可以使用熟悉的Spring编程风格来处理LDAP操作,简化了与目录服务器的...
提供Spring框架的基本功能,其主要组件是BeanFactory,是工厂模式的实现。 Spring 上下文。向Spring 框架提供上下文信息,包括企业服务,如 JNDI、EJB、电子邮件、国际化、校验和调度等。 Spring AOP。通过配置管理...
Spring框架作为一个强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,提供了多种配置数据源的方式,其中包括通过JNDI(Java Naming and Directory Interface)来查找和配置数据源。JNDI...
在Spring框架中,JNDI(Java Naming and Directory Interface)主要用来查找和绑定资源,如数据源、EJB等。JNDI允许我们通过名称来访问分布式环境中的对象,这在多层架构或集群环境中非常有用。下面我们将深入探讨...
在Spring框架中,数据源(DataSource)是应用与数据库交互的核心组件。通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用...
《Spring框架:Spring中文开发手册》不仅涵盖了Spring框架的基本概念和技术要点,还深入探讨了其高级特性,如云原生支持、微服务架构、事件驱动编程等,为开发者提供了一站式的Spring学习资源。无论你是Spring框架的...
Spring框架支持多种数据源实现,如基于JNDI的数据源或本地数据源。 2. **SessionFactory创建**:接着,利用配置好的数据源来创建SessionFactory,它是Hibernate的核心工厂对象,负责管理Session的生命周期,并提供...
### Spring框架概述 #### 一、Spring框架简介 Spring是一个开放源代码的设计层面框架,它主要解决了业务逻辑层与其他各层之间的松耦合问题。为了达成这一目标,Spring框架将面向接口的编程思想贯穿于整个系统应用...
在IT行业中,Spring框架是Java开发中的重要工具,它提供了丰富的功能来简化应用程序的构建,尤其是在企业级应用中。Spring JMS(Java消息服务)模块是Spring框架的一部分,用于处理消息队列通信,这是一种异步处理和...
Spring框架是Java开发领域中的一款核心框架,设计的目的是解决企业级应用开发的复杂性,使得开发者能够更专注于业务逻辑的实现,而非基础设施的搭建。Spring框架的核心特性包括控制反转(IoC)和面向切面编程(AOP)...
在本篇文章中,我们将深入探讨如何利用Spring框架结合JOTM(Java Open Transaction Manager)来实现多数据源下的分布式事务管理。我们将通过具体实例展示如何在Tomcat服务器环境下配置并使用这些技术。 #### 一、...
Spring框架是中国著名的Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。它简化了Java应用程序的开发,通过依赖注入(Dependency Injection,DI)和...
Spring框架是Java开发中广泛应用的一个开源框架,以其模块化、可扩展性和强大的功能著称。在本压缩包中,包含了Spring框架以及与之配合使用的多个关键库,以便于进行Java应用开发。下面是这些jar包的详细说明: 1. ...
Spring框架是Java应用程序开发中的一个核心框架,以其强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性而闻名。在Spring框架中,不同功能的实现被拆分成多个模块,这些模块通常以jar包的...
Spring jndi 数据源配置是指在 Spring 框架中使用 JNDI(Java Naming and Directory Interface)来配置数据源的方法。JNDI 是一个 Java API,用于访问命名和目录服务。通过使用 JNDI,可以将数据源配置独立于应用...