使用Spring+Hibernate连接JNDI数据源

现在Spring+Hibernate这对组合已经成为J2EE事实上的开发标准,而且J2EE程序一般都需要运行在J2EE应用服务器容器中。虽然我们可以使用Apache组织提供的DBCP数据库连接池访问数据库,但是一个更好的选择是使用应用服务器本身提供的数据库连接池。在开发环境中,我们使用Tomcat,生产环境中,则使用Weblogic、WebSphere等应用服务器。我的配置环境中,应用服务器的版本分别是Tomcat6.0,Weblogic9.2以及WebSphere6.1,数据库使用了derby。无论对于哪一种应用服务器,使用Spring+Hibernate连接JNDI数据源的配置步骤都是类似的,大致分为4步。

    1、拷贝数据库驱动包到应用服务器的lib目录下。对于Tomcat,拷贝到tomcat\lib;对于Weblogic,拷贝到bea\user_projects\domains\base_domain\lib;对于WebSphere,拷贝到IBM\WebSphere\AppServer\lib。

    2、配置数据源。对于Weblogic和WebSphere这两个商业应用服务器,它们都提供了交互方便的配置界面,网上这方面的资料也很多,按步骤配置就可以了。对于Tomcat,只要修改tomcat\conf\context.xml,增加以下内容即可。

Xml代码 复制代码  收藏代码
  1. <Resource name="jdbc/testDS" auth="Container"  
  2.   type="javax.sql.DataSource" driverClassName="org.apache.derby.jdbc.ClientDriver"  
  3.   url="jdbc:derby://localhost:1527/testdb;create=true"  
  4.   username="user" password="pwd" maxActive="20" maxIdle="10"/>  
<Resource name="jdbc/testDS" auth="Container"
  type="javax.sql.DataSource" driverClassName="org.apache.derby.jdbc.ClientDriver"
  url="jdbc:derby://localhost:1527/testdb;create=true"
  username="user" password="pwd" maxActive="20" maxIdle="10"/>

    3、修改web.xml。实际上该步骤是可有可无的,但是J2EE标准建议开发者进行修改,对资源进行引用,增加以下内容即可。

Xml代码 复制代码  收藏代码
  1. <resource-ref>  
  2.     <description>Test DataSource</description>  
  3.     <res-ref-name>jdbc/testDS</res-ref-name>  
  4.     <res-type>javax.sql.DataSource</res-type>  
  5.     <res-auth>Container</res-auth>  
  6. </resource-ref>  
<resource-ref>
    <description>Test DataSource</description>
    <res-ref-name>jdbc/testDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

    4、修改applicationContext.xml。对于Spring1.x版本,这样定义:

Xml代码 复制代码  收藏代码
  1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
  2.     <property name="jndiName">  
  3.         <value>java:comp/env/jdbc/testDS</value>  
  4.     </property>  
  5. </bean>  
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/testDS</value>
    </property>
</bean>

    对于Spring2.x,Spring增加了一种新的定义方法:

Xml代码 复制代码  收藏代码
  1. <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/testDS" />  
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/testDS" />

    再对Spring中的Hibernate配置进行修改,引用刚刚定义的dataSource。

Xml代码 复制代码  收藏代码
  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  2.     <property name="dataSource" ref="dataSource" />  
  3.     <!-- 其他参数省略 -->  
  4. </bean>  
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 其他参数省略 -->
</bean>

    前面谈到第3步是可有可无的,以上是有第3步的配置。如果第3步未执行,那么对于Tomcat,仍然按照第4步一样的配置就可以。但是对于Weblogic和WebSphere,需要将java:comp/env/jdbc/testDS修改成jdbc/testDS。

    在配置过程中,还发现一个问题:Spring如果需要两个或两个以上的配置文件,在Tomcat中的web.xml可以使用通配符,即

Xml代码 复制代码  收藏代码
  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>classpath*:/appContext*.xml</param-value>  
  4. </context-param>  
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/appContext*.xml</param-value>
</context-param>

    但是在Weblogic和WebSphere中,不能使用通配符,只能一个个列举,待研究。

Xml代码 复制代码  收藏代码
  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>classpath*:/appContext1.xml,classpath*:/appContext2.xml</param-value>  
  4. </context-param>  

猜你喜欢

转载自zhli986-yahoo-cn.iteye.com/blog/1455330
今日推荐