【发布时间】:2011-10-10 13:05:41
【问题描述】:
我有两台 Solaris 服务器,每台服务器都安装了 Glassfish 3.1.1(Build 12)和 Java 1.6.0_27。 Glassfish 服务器似乎功能齐全,但我无法部署利用 EJB 计时器服务的应用程序。默认情况下,计时器服务依赖于在默认“__TimerPool”连接池中创建的表“EJB_TIMER_TBL”来存储状态信息。在一台服务器上,错误是:
java.sql.SQLException:只读连接、用户或数据库不允许更改 SQL 数据。
在另一台服务器上,错误是:
ERROR 40XL1:在请求的时间内无法获得锁
我认为问题与文件权限有关。但是,我已经查看了 Java 和 Glassfish 安装的文件权限和所有权,包括“domains/domain1/lib/databases/ejbtimer”下的 derby 数据库文件,它们与我没有遇到此问题的其他 Solaris 服务器上的相同.
您有什么想法会导致 Derby 数据库在全新安装的 Glassfish 和 Java 中“只读”或“锁定”吗?我知道可能有两种不同的原因在这里,但两者同时出现,在两个不同的服务器上遵循相同的安装步骤。
以下是来自 Glassfish server.log 的堆栈跟踪的更多部分:
锁定堆栈:
[#|2011-10-07T17:35:21.739+0000|警告|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=10;_ThreadName=Thread- 2;|EJB5108: 无法初始化 EJB 定时器服务。可能的原因是定时器资源配置不正确,数据库没有启动,或者定时器数据库表没有创建。 javax.ejb.EJBException 在 com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193) 在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091) ...
原因:异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLTransactionRollbackException:在请求的时间内无法获得锁 错误代码:30000 调用:选择“TIMERID”、“APPLICATIONID”、“BLOB”、“CONTAINERID”、“CREATIONTIMERAW”、“INITIALEXPIRATIONRAW”、“INTERVALDURATION”、“LASTXPIRATIONRAW”、“OWNERID”、“PKHASHCODE”、“SCHEDULE”、“STATE” FROM "EJB_TIMER_TBL" WHERE (("OWNERID" = ?) AND ("STATE" = ?)) bind => [绑定2个参数] 查询:ReadAllQuery(name="findTimersByOwnerAndState" referenceClass=TimerState sql="SELECT "TIMERID", "APPLICATIONID", "BLOB", "CONTAINERID", "CREATIONTIMERAW", "INITIALEXPIRATIONRAW", "INTERVALDURATION", "LASTEXPIRATIONRAW", "OWNERID ", "PKHASHCODE", "SCHEDULE", "STATE" FROM "EJB_TIMER_TBL" WHERE (("OWNERID" = ?) AND ("STATE" = ?))") 在 org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644) ...
原因:java.sql.SQLException:在请求的时间内无法获得锁 在 org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(未知来源) ... 95 更多 原因:ERROR 40XL1:在请求的时间内无法获得锁 在 org.apache.derby.iapi.error.StandardException.newException(未知来源) 在 org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(未知来源) 在 org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(未知来源) 在 org.apache.derby.impl.services.locks.AbstractPool.zeroDurationlockObject(未知来源) ...
只读堆栈:
[#|2011-10-07T18:35:43.498+0000|警告|glassfish3.1.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=20;_ThreadName=Thread- 2;|StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp 抛出异常 javax.ejb.EJBException:事务中止 在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5120) ...
原因:javax.transaction.RollbackException:事务标记为回滚。 在 com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:479) 在 com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:852) 在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5114) ... 65 更多 原因:异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLException:只读连接、用户或数据库不允许更改 SQL 数据。 错误代码:20000 调用:插入到“EJB_TIMER_TBL”(“TIMERID”、“APPLICATIONID”、“BLOB”、“CONTAINERID”、“CREATIONTIMERAW”、“INITIALEXPIRATIONRAW”、“INTERVALDURATION”、“LASTEXPIRATIONRAW”、“ OWNERID", "PKHASHCODE", "SCHEDULE", "STATE") 值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) bind => [绑定12个参数] 查询:InsertObjectQuery(com.sun.ejb.containers.TimerState@75d8af) 在 org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:840) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:906) ...
原因:java.sql.SQLException:只读连接、用户或数据库不允许更改 SQL 数据。 在 org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(未知来源) 在 org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源) 在 org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(未知来源) ...
【问题讨论】:
标签: installation glassfish ejb derby