IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management | WebSphere  >

配置 WebSphere Application Server 使用 Informix Dynamic Server

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 中级

Anju Sudhakar (anjus@us.ibm.com), 质量保证工程师, IBM

2006 年 4 月 07 日

WebSphere® Application Server (Application Server) 是一种高性能的事务服务器,它的特性是具有一个极具可伸缩性的事务引擎,能够处理大量的安全事务和 Web 服务。应用程序服务器是中间件,能够处理企业中用户与后端应用程序和数据库之间的应用程序功能。Informix® Dynamic Server (IDS) 是一个可扩展的对象关系数据库服务器,它支持 SQL、Dynamic SQL、C++ 和 Java™ 语言中的随需应变计算、WebSphere、OLTP 和 OLAP 数据管理应用程序。可以将 IDS 作为 Application Server 的后端资源使用。

安装 Application Server 和 IDS

必须单独安装 IDS 和 Application Server。想获得安装过程的详细说明(包括计划和配置),请参阅 参考资料 部分中的产品文档链接。

安装 WebSphere Application Server

IBM WebSphere Application Server 是一个集成式平台,包含一台应用程序服务器、一组 Web 开发工具、一台 Web 服务器和额外的支持软件和文档。可以使用各种配置在一个或多个系统上安装 WebSphere Application Server。下面的列表包含一些典型的安装场景:

  • 在一个系统上安装 WebSphere Application Server
  • 在一个系统上安装 WebSphere Application Server 和 Web 服务器
  • 在两个系统上安装 WebSphere Application Server 和 Web 服务器
  • 创建使用同一个 WebSphere Application Server 安装的多个配置文件

安装 WebSphere Application Server 需要您以管理员组中的一名成员的身份进行登录。安装过程的一些步骤需要使用管理员组 ID,以便充当操作系统的一部分,并作为一项服务进行登录。

WebSphere Launchpad 是安装 WebSphere Application Server 产品的起点。可以使用名为 launchpad.batlaunchpad.sh 的程序,从产品 CD 的根目录中启动 launchpad 程序。在启动 launchpad 之后,就可以选择下列组件进行安装:

  • WebSphere Application Server
  • IBM HTTP Server
  • Web Server Plug-in
  • Application Client
  • Application Server toolkit

安装 Informix Dynamic Server

Informix Dynamic Server for Windows® 中包括 Informix Dynamic Server Launchpad,您可以从中查看文档或版本说明、安装 IDS,或者浏览 CD。





回页首


配置

这一节将描述在 WebSphere 中创建用于 IDS 的 JDBC™ 提供程序的步骤,还将描述通过添加和修改数据源 Custom Properties 中的值来配置数据源的步骤。

创建 JDBC 提供程序

可以使用 WebSphere Administrative Console 创建用于 IDS 的 JDBC 提供程序。本文中的两个实现类型是 XA 数据源和 Connection Pool 数据源:

  • 对于 XA 数据源 JDBC 提供程序来说,需要将实现类的名称设置为 com.informix.jdbcx.IfxXADataSource。还需要创建下列 CLASSPATH 条目,在这些条目中,${INFORMIX_JDBC_DRIVER_PATH} 是 JDBC 驱动程序的安装路径。在将 SQLJ 与 WebSphere Application Server 结合使用时,会用到 ifxsqlj.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxsqlj.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbc.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbcx.jar 

  • 对于 Connection Pool 数据源来说,需要将实现类的名称设置为 com.informix.jdbcx.IfxConnectionPoolDataSource。还需要创建下列 CLASSPATH 条目:
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbc.jar
    ${INFORMIX_JDBC_DRIVER_PATH}/ifxjdbcx.jar

在 Application Server 中设置 Informix 环境变量

上一节介绍了两个 JDBC 提供程序,您可以在任意一个提供程序下面创建数据源,具体的使用取决于应用程序的需求。在创建数据源之后,可以使用 Application Server Administrative Console 中的 Custom Property 链接来添加或修改 Informix Dynamic Server 所需的环境参数。可以通过选择 Resource -> JDBC Provider -> JDBC provider Name(XA 或 Connection Pool)-> Data source name used by the application 来可导航到 Custom Properties 链接。

还可以使用 Custom Properties 下的 New 按钮添加 Informix Dynamic Server 所需的环境参数。要修改现有参数,请单击所需参数并键入新值。然后单击 Apply 立即在本地配置进行更改。单击页首的 Save(在消息对话框中)来保存对主配置的修改。为了使这些修改生效,可能需要重启 Application Server。





回页首


故障诊断

这一节将介绍一些常见问题和它们的解决方案。还将介绍使用 IDS 和 Application Server 时可能遇到的一些 XA 事务问题和常见错误。

XA 事务问题

这两类问题有一个通用的解决方案。

  • 现象:由于紧密耦合事务在 IDS 中不受支持而导致抛出 SQL Exceptions

    当紧密耦合事务在 IDS 中不受支持时,您可能会收到下列异常之一:

    • java.sql.SQLException: ISAM error: The record is locked.
    • java.sql.SQLException: Could not do a physical-order read to fetch next row.

    ISAM 消息略微有些不同,主要取决于是否设置了 SET LOCK MODE TO WAIT [seconds]。如果设置成 SET LOCK MODE NOT WAIT,那么消息是 ISAM error: record is locked。如果设置成 SET LOCK MODE TO WAIT [seconds],则会在应用程序等待超时抛出异常 ISAM error: Lock Timeout Expired

  • 现象:在 Application Server 的 SystemOut.log 中出现错误消息 “Could not do a physical-order read to fetch next row”

    当多个用户或多台客户机同时访问正执行 XA 事务的同一个 Informix 数据库时,可能在 Application Server 文件 SystemOut.log 中得到以下错误:

    Caused by: java.sql.SQLException: Could not do a physical-order read to fetch next row.
    DSRA0010E: SQL State = IX000, Error Code = -244
    at com.informix.jdbc.IfxSqli.a (IfxSqli.java (Compiled Code))
    at com.informix.jdbc.IfxSqli.E (IfxSqli.java(Compiled Code))
    

解决方案:您可能需要调整 IDS 并设置 Application Server 自定义属性中的某些 Informix 环境变量。需要设置下列 Informix 配置参数:

DISABLE_B162428_XA_FIX:

  • 0(默认值):只在调用 XA 回滚时释放事务。
  • 1:如果是除 XA 回滚以外的其他事务回滚,则释放事务。当数据库服务器关闭并重启后生效。

根据 XA/Open 规范,如果事务是通过服务器进行回滚,而不是一个通过客户机进行的 XA 回滚,则 XID 不被忽略,且事务处于只回滚 (rollback only ) 状态。这是 Informix Dynamic Server Version 10.0 的默认行为。想返回到以前的行为,请在 IDS 中设置下列 ONCONFIG 参数:

DISABLE_B162428_XA_FIX 设置为 1,在一个事务回滚之后立即释放所有全局事务,这是 Dynamic Server V9.40 和更早的版本中的默认行为。Dynamic Server 10.0 的默认行为是在调用 xa_rollback 之后释放全局事务,并且此行为需要与 XA 状态表一致,确保只在调用 xa_rollback 之后释放事务。将 DISABLE_B162428_XA_FIX 设置为 1,确保为 Dynamic 服务器的早期版本编写的应用程序可以正常工作。

对于 Informix Dynamic Server Version 9.40,ONCONFIG 参数 ENABLE_B162428_XA_FIX 被设置为 1,以确保此行为是 XA_SPEC+ 兼容的行为。

可以重写服务器的 DISABLE_B162428_XA_FIX 配置参数,获得带有 IFX_XASTDCOMPLIANCE_XAEND 环境变量的客户机会话。当通过 ONCONFIG 参数禁止服务器实例获得新行为,但某一客户机需要新行为时,该环境变量就特别有用。返回 XA_RB* 时的 XA_END 的行为是通过 IFX_XASTDCOMPLIANCE_XAEND 的设置来指定的,它可以采用下列值:

IFX_XASTDCOMPLIANCE_XAEND

  • 1:不忽略 XID。事务处于 Rollback-only 状态。此行为是 XA_SPEC+ 兼容的,并且是 IDS 10.0 的默认行为。
  • 0:忽略 XID。事务处于 Nonexistent 状态。这是 IDS V9.40 的默认行为。

必须在 Application Server 自定义属性中设置下列特定于 Informix 的环境变量:

  • 设置 IFX_XASPEC 变量。

    激活此变量,增强同一个全局事务 ID 中的 XA 事务的紧密耦合,并允许这些事务共享锁定空间。IFX_XASPEC 仅适用于 XA 连接,不能在数据库 URL 中指定,但可以通过数据源指定它,或者通过使用相同名称设置(JVM 的)系统属性来指定。数据源属性重写了系统属性。忽略除 y、 Y、 n 或 N 以外的任何属性的值。IfxDataSource.getIfxIFX_XASPEC 返回最终的 IFX_SPEC 值,这个值不是 y 就是 n。例如,如果数据源 IFX_XASPEC 的值等于 n,并且系统 IFX_XASPEC 的值等于 Y 或 y,则返回 n。

    如何在 Application Server 自定义属性中设置此属性:

    1. 登录到 Application Server Administrative Console。
    2. 创建用于 Informix XA 数据源的新的自定义属性 ifxIFX_XASPEC;将它设置为 Yy。该值不是一个 Boolean 值,并且该属性的设置覆盖了数据库系统设置。
  • 将数据源的 Informix Lock Mode Wait 设置为更高的值。

    虽然不是必需的,但是这个属性使您能够设置 Informix 动态服务器等待某一锁定的秒数。在默认情况下,若 Informix Dynamic Server 无法立刻获取某一锁定,就会抛出异常。可以将 Informix Lock Mode Wait 设置为 1000 秒。

可以尝试执行下列调优步骤:

  • 对数据库运行命令 UPDATE STATISTICS HIGH。此命令更新了系统目录中的统计数据,优化程序使用这些数据来确定成本最低的查询计划。
  • 如果许多事务将更新一些单独的行,则使用下列 SQL 语句将特定表更改为 row locking 模式:
    ALTER TABLE [table name] LOCK MODE (ROW)

  • 为应用程序将查询或更新的列创建索引。

带有更新的软件:

  • Informix Dynamic Server, Version 9.40.UC6
  • Informix Dynamic Server, Version 10.00.UC1
  • 3.00. JC1 JDBC 驱动程序

其他问题

  • 现象:Application Server 的 SystemOut.log 中的消息 “Null Pointer Exception on BLOB/SMARTBLOB column”

    当使用串行化的对象创建 IfxBblob 或 IfxCblob 并将它们发送到服务器时,会返回一个空指针异常。

    解决方案:不使用 IfxBblob (inputStream)、IfxCblob (inputStream)、IfxCblob (inputStream) 或 IfxCblob (locator) 访问服务器,只在 MODE_CLIENT_ONLY 模式下运行。

  • 现象:由于 Informix JDBC Driver 3.00JC1 中存在一个问题而导致 Application Server 的消息传递引擎无法启动。

    当消息传递引擎使用 Informix JDBC 驱动程序 3.00JC1 来存储其数据时,消息传递引擎无法启动。可以在应用服务器文件 SystemOut.log 中找到下列消息:

    […..] CWSIS0002E: The messaging engine encountered an exception while starting. 
    Exception: com.ibm.ws.sib.msgstore.PersistenceException: CWSIS1501E: 
    The dataSource has produced an unexpected exception: java.sql.BatchUpdateException: 
    Unique Constraint (informix.u114_62) violated.

    解决方案:把 Informix JDBC Driver 升级到 3.00JC2

  • 现象:当试图访问 EJB™ 组件生成的模块时,在 WAS 文件 SystemOut.log 中出现 ApplicationNotFindException。

    当一个实体 (CMP) 从表中获取字符串,并将空格插入到结果集合中时,可能导致错误 ApplicationNotFindException。

    例如: 可以在 Informix 数据库中存储一个失败事件,事件的 Destination_module_name 是 HelloWorldWithBO(16 个字符)。要想获得失败事件的细节信息,可以调用 FailedEventManagerEJBBean.getFailedEventWithParameters,它执行下列代码:

    loadClassContext (fel.getDestination_module_name ());
    	fel.getDestination_module_name () returns:
    	 "HelloWorldWithBO                                       " (255 characters),
    	  instead of "HelloWorldWithBO" (16 characters).
    

    因此无法找到模块,并将抛出 ApplicationNotFindException。

    解决方案:由 EJB 组件生成的模式 DDL 在默认情况下对列使用的数据类型是 CHARACTER。在上面的例子中,Destination_Module_Name 被定义为 CHARACTER (255)。

    使用数据类型 VARCHAR 或 LVARCHAR,而不是 CHAR。

    • CHAR 存储固定长度的单字节或多字节的文本字符串(最高可达 32,767 个字节);在整理文本数据时支持使用代码集顺序。默认大小是 1 个字节。
    • VARCHAR 存储可变长度的单字节或多字节文本字符串(最高可达 255 个字节);在整理文本数据时支持使用代码集顺序。
    • LVARCHAR (IDS) 存储可变长度的单字节或多字节文本字符串(最高可达 32,739 个字节)。同一个表中其他列的大小可以进一步减少这个上限。默认大小是 2,048 个字节。
  • 现象:在本地安装 Informix Dynamic Server 时无法连接到本地主机

    在使用 Application Server 本地安装 IDS 时,使用本地主机时无法连接到 IDS。在 Application Server 中配置数据源时也可能发现同样的问题。

    解决方案:

    • 在 Windows 操作系统上,在 setnet32 的主机信息选项卡中使用 *[hostname] 来获取 IP 地址 127.0.0.1 和用来连接 Informix 的本地主机。
    • 在 Solaris Operating Environment 上,使用 ONCONFIG 参数 DATABASESERVERALIASES 来解决本地主机问题。 例如:在 IDS ONCONFIG 文件中将 DATABASESERVERALIASES 设置为 patriot1_local,并把下列行添加到 $INFORMIXSQLHOSTS ($INFORMIXDIR/etc/sqlhosts):
      patriot1_local 	ontlitcp	 127.0.0.1	 18551 

  • 现象:Informix 2.21.JCX JDBC 驱动程序返回错误的 holdability 值

    Informix 2.21.JCX JDBC 驱动程序返回错误的 holdability 值。它是 Application Server V6.0 所需要的。

    解决方案:该修改可以在 Informix JDBC 驱动程序的较新版本中找到。请使用 3.00 JC1 JDBC 驱动程序。

  • 现象:数据库元数据不适合用于 ANSI 数据库

    Informix Dynamic Server 把模式拥有者转换为大写,以便用于 ANSI 数据库, 但是 JDBC 驱动程序却将模式拥有者转换为小写。所以 getTables(...) 不适用于某些情况。

    解决方案:该修改可在 Informix JDBC 驱动程序较新的版本中找到,请使用 3.00. JC1 JDBC 驱动程序。



参考资料



关于作者

Anju Sudhakar 是一名质量保证工程师,他在 Informix Dynamic Server 已经工作了 7 年多。Anju 主要研究 Informix Dynamic Server 和 WebSphere Application Server 之间的互操作性,以及从各种源数据库到 IBM 数据库(包括 DB2 和 IDS)的迁移测试。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.




回页首


WebSphere 和 Informix 是 IBM 在美国和其他国家的注册商标。 Microsoft、Windows、Windows NT 和 Windows 徽标是微软在美国和/或其他国家的商标。 Java 和所有基于 Java 的商标是 Sun 公司在美国和/或其他国家的商标。 Linux 是 Linus Torvalds 在美国和/或其他国家的商标。 其他公司、产品或服务名称可能是其他公司的商标或服务标志。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款