迁移 Servlet、JavaServer Pages 或企业会话 Bean 时的连接注意事项

如果计划升级至 WebSphere® Application Server V7.0 或更高版本,并且要将应用程序从 Java™ 2 Platform, Enterprise Edition (J2EE) V1.2 规范迁移至更高版本(如 1.4 或 Java Platform, Enterprise Edition (Java EE),那么请注意:对于 1.2 之后版本的应用程序组件,此产品以不同方式分配可共享和不可共享的连接。对于某些应用程序,这种差别可能会导致性能降低。

不利行为更改

因为 WebSphere Application Server 提供编码符合 J2EE 1.2 规范的应用程序模块的向后兼容性,所以当您迁移至 WebSphere Application Server V7.0 或更高版本 时,可以继续使用 V4 样式数据源。只要您仅为 J2EE 1.2 模块配置 V4 数据源,那么数据访问应用程序组件的行为不会更改。

如果您迁移到 WebSphere Application Server V7.0 或更高版本 时采用了更高版本的 J2EE 规范,数据访问组件的行为可能会更改。此情况特别适用于包括 Servlet、JavaServer Pages (JSP) 文件或在可共享连接的局部事务中运行的企业会话 Bean 的应用程序。数据访问组件中的行为更改会对在这样的应用程序中使用连接产生不利的影响

此更改影响所有包含下列方法的应用程序:

问题症状包括:

注: 当您正在从 WebSphere Application Server V7.0 或更高版本 中的 J2EE 1.2 模块升级时,您还会在包含先前描述的那些组件和方法的应用程序中遇到这些症状。

在分配可共享连接与不可共享连接之间切换

对于使用 V4 数据源的 J2EE 1.2 模块,WebSphere Application Server 会向 JSP 文件、Servlet 和企业会话 Bean 发出不可共享连接。向所有其他应用程序组件都发出可共享连接。然而,对于 J2EE 1.3 和较高版本的模块,应用程序服务器会向所有逻辑指定的资源(绑定到各个引用的资源)发出可共享连接,除非您在各个资源引用中将连接指定为不可共享。在这种上下文中使用可共享连接具有下列影响:

  • 在封装方法返回之前,即使当连接句柄发出 close() 调用时,在用户事务作用域外接收和使用的所有连接不返回到空闲连接池。
  • 用户事务作用域外接收和使用的所有连接不与其他组件实例(即,其他 Servlet、JSP 文件或企业 Bean)共享。例如,会话 Bean 1 获得连接,然后调用也获得连接的会话 Bean 2。即使所有属性都相同,每个会话 Bean 也只会接收到其自己的连接。

如果您未预计到连接行为中的这种更改,那么您构造应用程序代码的方法会导致使用额外连接,特别是在 JSP 包含在可共享连接的局部事务中运行的会话 bean、RequestDispatcher.include() 例程、RequestDispatcher.forward() 例程或从这些方法调用其他组件的情况下。因此,可能会出现会话挂起、会话超时或缺少连接的情况。

示例方案

Servlet A 获取连接、完成工作、落实连接并在连接上调用 close()。然后,Servlet A 调用 RequestDispatcher.include() 以包含 Servlet B,而 Servlet B 与 Servlet A 执行相同的步骤。因为直到 Servlet A 连接从当前方法返回后才会返回到空闲池,所以现在两个连接都处于忙碌状态。以此方式,使用中的连接比您的应用程序中安排的连接要多。如果连接池上的最大连接数设置中没有计算这些连接,那么此行为可能会导致池中缺少连接,这会导致 ConnectionWaitTimeOut 异常。如果未启用连接等待超时,或如果连接等待超时设置为一个较大的值,这些线程可能由于它们在等待永远不会返回池的连接而出现挂起。如果新连接不可用,等待新连接的线程不返回其当前使用的那些连接。

解决方案

要解决这些问题,请执行以下操作:

  1. 使用非共享连接

    如果您使用非共享连接并且不在用户事务中,那么在您发出 close() 调用(假设您落实或回滚该连接)时,该连接返回至空闲池。

  2. 增加最大连接数。

    要计算必需连接数,将已配置线程数乘以组件调用嵌套(对于使用连接的那些调用)的最深级别。有关调用嵌套的描述,请参阅示例方案部分。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdat_conmig
文件名:rdat_conmig.html