1

我从未见过这个错误。我有一个 GlassFish 应用程序服务器实例,其中有一个(在此之前)完美运行的应用程序。它由几个使用 JMS 进行通信的 Web 应用程序组成。在单例 bean 中运行有计划的计时器任务,它们向另一台服务器发出多个 REST 请求,然后通过 JMS 发送接收到的 JSON。

此时某个地方会发生此异常,并且所有计时器都会被删除。问题是,我从未更改过代码中的任何内容,并且在此之前应用程序运行良好。REST-API 没有改变,任何地方都没有其他异常。

我检查了oracle 文档中的这个错误,但他们只说:

JTS5022 来自日志的意外异常 [{0}]。

解决方案:这是一个意外的内部错误。请联系 Sun 并提供完整的错误日志消息。

[2016-12-13T10:59:00.235+0000] [glassfish 4.1] [严重] [jts.log_error] [javax.enterprise.system.core.transaction.com.sun.jts.CosTransactions] [tid:_ThreadID=450 _ThreadName=__ejb-thread-pool6] [timeMillis: 1481626740235] [levelValue: 1000] [[ JTS5022: 来自日志的意外异常 [{0}]。com.sun.jts.CosTransactions.LogException:LOG004:数据已损坏。在 com.sun.jts.CosTransactions.Log.open(Log.java:172) 的 com.sun.jts.CosTransactions.Log.open(Log.java:172) 的 com.sun.jts.CosTransactions.LogControl.openFile(LogControl.java:541) 的第 12 点记录异常.CosTransactions.CoordinatorLog.openLog(CoordinatorLog.java:1161) 在 com.sun.jts.CosTransactions.CoordinatorLog.formatLogRecords(CoordinatorLog.java:1040) 在 com.sun.jts.CosTransactions.CoordinatorLog.write(CoordinatorLog.java:534) ) 在 com.sun.jts 的 com.sun.jts.CosTransactions.TransactionState.setState(TransactionState.java:732)。

我的理解是有一些日志文件损坏或任何东西。但我什至没有碰它们,它甚至没有说是哪一个。

我非常感谢任何建议。

4

1 回答 1

1

*我的解决方法**

这不是真正的解决方案,而是一种解决方法,因为它不能解决问题。

事实证明,GlassFish 为 JMS(可能还有其他)事务保存了单独的日志文件。它们与标准日志文件位于同一文件夹中。就我而言:

<path to domain>/logs/server/tx

我的猜测是那里的某些文件已损坏。现在我无法修复它,但可以关闭 GlassFish 中事务的日志记录。

在 GlassFish 管理控制台中

在 GlassFish 管理控制台中,转到

configurations > server-config > Transaction Service 

并添加属性:

Name:                                    Value:
disable-distributed-transaction-logging  true

显然,此设置主要用于调整性​​能,但在我的情况下,损坏的日志文件不再是问题,应用程序继续运行(可能更快;)

于 2016-12-14T19:12:35.870 回答