Spring 2 和 JPA 简介(10)

为 Tomcat 部署配置 Spring 2 应用程序

要为 Tomcat 部署配置数据层代码,仍然需要两个细节:

* 告诉 Spring 2 引擎关于 bean 描述符配置文件的位置
* 把 Spring 2 数据源配置的连接改为通过 JNDI 使用 Tomcat 的数据源管理和池管理

告诉 Spring 2 引擎配置文件的位置

要让 Spring 2 引擎连接需要的数据层 bean,首先必须中找到并处理数据层的 bean 描述符配置文件。

在这个示例中,文件叫作 dwspring-service.xml。需要在部署的时候,在提供给 Tomcat 服务器的上下文参数中指定这个文件的位置。

这个上下文参数需要是 WEB-INF/web.xml 部署描述符的第一个元素,在清单 28 中用粗体表示:

清单 28. web.xml 中的上下文参数


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   <display-name>
   spring2web</display-name>
    <context-param>
          <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/dwspring2-service.xml</param-value>
       </context-param>
       ...

dwspring2-service.xml 是前面在测试时使用的配置文件的改动版本。

这个配置文件被修改成通过 JNDI 使用 Tomcat 服务器的 JDBC 连接管理,而不是自己的连接管理。

修改 Spring 2 连接查找 Tomcat JNDI 数据源

dwspring2-service.xml 中使用 Tomcat 5 得到 JNDI 数据源需要进行的修改在清单 29 中已突出显示:

清单 29. 修改 dwspring2-service.xml 以进行 Tomcat JNDI 查询


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="employeeService" class="com.ibm.dw.spring2.EmployeeDAO">
      <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>


   <bean id="entityManagerFactory" class=
      "org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource"/>
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter">
            <property name="showSql" value="true"/>
            <property name="generateDdl" value="false"/>
         
            <property name="databasePlatform" value=
               "oracle.toplink.essentials.platform.database.DB2Platform"/>
         
         </bean>
      </property>
      
      <property name="loadTimeWeaver">
         <bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/>
      </property>
      
   </bean>
   
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
                    <property name="jndiName" value="java:comp/env/jdbc/dwspring2" />
                    </bean>

   <bean id="transactionManager" 
     class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory"/>
      <property name="dataSource" ref="dataSource"/>
   </bean>

</beans>


清单 29 中用于创建数据源的 bean 现在是 org.springframework.jndi.JndiObjectFactoryBean。可以用这个 bean 执行对特定的容器管理资源的 JNDI 查询。在这个示例中,Tomcat 管理的 DB2 Express-C 数据源的名称被配置成 java:comp/env/jdbc/dwspring2。

在清单 29 中,请注意 jpaVendorAdapter 的 GenerateDdl 属性被设置成 false。这是必需的,因为不想让 Spring 2 在每次启动应用程序时都删除和重建所有数据库表。只有在集成测试期间,这个属性才应设置成 true。
2008-03-05_130416.gif
快乐渡过每一天,减肥坚持每一天