1

在非 ANSI、无缓冲日志记录模式下使用 Informix 11.70 数据库。

我正在通过 GlassFish 3.1.2.2 服务器访问此数据库,该服务器设置了一个连接池以使用该类javax.sql.ConnectionPoolDataSource实现的对象com.informix.jdbcx.IfxConnectionPoolDataSource

所有事务都在 JPA 提供者(在本例中为 Hibernate)的控制之下,因此没有明确BEGIN WORK的 ,COMMIT WORKROLLBACK WORK我可以控制的语句。

在此配置的一个特定部署中,我们收到-255错误,这表示:

  • 数据库处于非日志模式(在我们的例子中不是这样)
  • 数据库处于某种日志记录模式,但是COMMIT WORK有人发出了没有前面BEGIN WORK声明的

我该如何解决这个问题?哪些环境因素会在一个部署而不是另一个部署上导致此错误?

4

1 回答 1

1

谢天谢地,答案与 Informix 或 Hibernate 对 Informix 的支持无关。它与 GlassFish 中模糊的自动数据源创建有关,这取决于您的部署方式。(这可能与 Informix 数据源提供给 GlassFish Web 控制台的默认属性有关。)

具体来说,我们的部署人员尝试在 GlassFish 上部署我们的应用程序,而没有首先创建所需的 JDBC 资源。GlassFish 报告缺少一些奇怪的 JDBC 资源:jdbc/foobar__pmjdbc/foobar__nontx.

我们的部署人员没有发现任何问题,而是手动创建了这些资源。(GlassFish 显然通常会在您使用其 Web 控制台进行部署时自动创建这些。)

结果,我们的部署人员无意中指定了一个非事务性数据源供我们的应用程序使用,这就是这里的根本原因。

于 2012-10-11T15:47:43.623 回答