数据访问和 Spring Framework

要使 Spring Bean 能够访问数据源,必须配置这些 Bean ,以便 Spring Framework 能够正确地委派 WebSphere® Application Server 运行时并与之集成。

Spring Framework 将 Spring bean 与容器管理层进行打包,以便在企业应用程序环境中将这些 bean 委托给底层的企业应用程序运行时。 下列各节描述了配置用于访问数据源的 Spring Bean 时要考虑的事项。

访问应用程序服务器中配置的数据源

要使 Spring 应用程序能够访问诸如 Java™ 数据库连接 (JDBC) 数据源之类的资源,该应用程序必须使用由应用程序服务器管理的资源提供程序。

要执行此操作,请参阅 配置对 Spring 应用程序数据源的访问权 主题。

JDBC 本机连接

WebSphere Application Server 不支持使用Spring框架提供的 NativeJdbcExtractor 类,因此请避免使用该类的场景。 此类的实现将访问本机 JDBC 连接,并且会绕过应用程序服务器中的服务质量功能,如跟踪连接句柄和使连接句柄重新关联、共享连接、管理连接池和事务包含。

作为替代方法,您可以使用应用程序服务器 WSCallHelper 类来访问数据源的非标准供应商扩展。

Java 持久性 API

WebSphere Application Server 包含两个 JPA 提供程序; 一个基于 EclipseLinks for JPA 2.1 ,另一个基于 JPA 2.0的 Apache OpenJPA 实现。 有关更多信息,请参阅相关链接。

要将 Spring Framework 与 JPA 实现配合使用,最好是直接使用 JPA,而不是使用 org.springframework.orm.jpa 包中随 Spring Framework 一起提供的 JPA 辅助类。

要使用 Spring Framework 的受管 JPA,您可以在 Web 描述符中定义持久性上下文引用 (web.xml):
<persistence-context-ref>
  <persistence-context-ref-name>some/name</persistence-context-ref-name>
  <persistence-unit-name>pu_name</persistence-unit-name>
</persistence-context-ref>
其中,pu_namepersistence.xml 文件中定义的持久性单元的名称。
持久性上下文便可以从 JDNI 通过 Web 应用程序中的 java:comp/env/some/name 获取。 对于 Spring Framework,可以使用 <jee:jndi-lookup/> 检索持久性上下文,如以下示例代码中所示。 生成的 EntityManager 对象可在 entityManager 标识下获得。
<jee:jndi-lookup id="entityManager" jndi-name="some/name" />
类似地,持久性单元(对于直接使用或与 Spring 包装器类配合使用)可以通过持久性单元引用获取:
<persistence-unit-ref>
  <persistence-unit-ref-name>some/ref_name</persistence-unit-ref-name>
  <persistence-unit-name>pu_name</persistence-unit-name>
</persistence-unit-ref>
生成的 EntityManagerFactory 对象可在 entityManagerFactory 标识下获得:
<jee:jndi-lookup id="entityManagerFactory" jndi-name="some/ref_name" />