我有兩臺Solaris服務器,每臺服務器都安裝了Glassfish 3.1.1(Build 12)和Java 1.6.0_27的全新安裝。 Glassfish服務器似乎功能齊全,但我無法部署利用EJB定時服務的應用程序。默認情況下,定時服務取決於在默認的「__TimerPool」連接池內創建的表「EJB_ TIMER _TBL」以存儲狀態信息。在一臺服務器上,錯誤是:使用只讀或鎖定Derby數據庫的Glassfish EJB計時器服務問題
java.sql.SQLException:對於只讀連接,用戶或數據庫,不允許SQL數據更改。
在其他服務器,錯誤的是:
錯誤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持久服務 - 2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions.DatabaseException 內部異常:java.sql.SQLTransactionRollbackException:一個鎖不能在請求的時間內獲得 錯誤代碼:30000 調用:SELECT「TIMERID」,「APPLICATIONID」,「BLOB」,「CONTAINERID」,「CREATIONTIMERAW」,「INITIALPRIATIONRAW」,「INTERVALDURATION」,「LASTEXPIRATIONRAW」,「OWNERID」 ,「PKHASHCODE」,「 「(」OWNERID「=?)和(」STATE「=?) bind => [2參數綁定] 查詢:ReadAllQuery(name =」findTimersByOwnerAndState 「referenceClass = TimerState sql =」SELECT「TIMERID」,「APPLICATIONID」,「BLOB」,「CONTAINERID」,「CREATIONTIMERAW」,「INITIALEXPIRATIONRAW」,「INTERVALDURATION」,「LASTEXPIRATIONRAW」,「OWNERID」,「PKHASHCODE」,「SCHEDULE 「(」OWNERID「=?)和(」STATE「=?))」)「STATE」FROM「EJB_ TIMER _TBL」) at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java :333) at 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(Unknown Source) ... 95更多 錯誤40XL1:在請求的時間內無法獲得鎖定 at org.apache.derby.iapi.error.StandardException.newException(未知源) at org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(Unknown Source) at org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(Unknown Source) 在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 =線程2; | StandardWrapperValve [jsp]:PWC1406:Servlet .service()對於servlet jsp拋出異常 javax.ejb.EJBException:事務中止 at 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持久性服務 - 2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions.DatabaseException 內部異常:java.sql.SQLException:SQL數據更改不允許用於只讀連接,用戶或數據庫。 錯誤代碼:20000 電話:INSERT INTO 「EJB_ TIMER _TBL」( 「的timerId」, 「的applicationID」, 「BLOB」, 「數據筒」, 「CREATIONTIMERAW」, 「INITIALEXPIRATIONRAW」, 「INTERVALDURATION」, 「LASTEXPIRATIONRAW」 「OWNERID」,「PKHASHCODE」,「SCHEDULE」,「STATE」)VALUES(?,?,?,?,?,?,?,?,?,?,?,?) bind => [ ] 查詢:InsertObjectQuery([email protected]) at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324) at org.eclipse.persistence.internal.databaseaccess。 DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:840) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:906) ...
導致:java.sql.SQLException:SQL數據更改不允許用於只讀連接,用戶或數據庫。 at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc。 TransactionResourceImpl.wrapInSQLException(來源不明) ...
這個德比數據庫不是隻讀的。這是嵌入Glassfish。在一個系統上,我們將定時器更改爲使用除Derby以外的其他數據庫。在另一個我們似乎有持續定時器(默認)這個問題。我們將它們更改爲不持久,並且自從在Derby數據庫上運行計時器時沒有問題。幸運的是,我們並不需要他們持久。 – mauman