为 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