derby - 安装WL应用程序时的“A lock could not be obtained”

标签 derby ibm-mobilefirst websphere-liberty

安装应用程序时遇到以下问题:
使用Worklight控制台,我正在上载.wlapp文件,删除已部署的应用程序,然后尝试再次上载相同的.wlapp。
然后,Worklight Console被卡住,甚至通常的服务器停止也无法完成。
残酷地杀死服务器进程并重新启动它之后,即可上载.wlapp。

已安装的Worklight Server是带有Derby / Liberty的v5.0.6 / v5.0.6.1 CE。

这是来自服务器的错误日志:

[4/8/13 14:43:02:586 IDT] 00000031 com.ibm.ws.logging.internal.impl.Incident I FFDC1015I: An FFDC Incident has been created: "java.sql.SQLTransactionRollbackException: A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.next 2624" at ffdc_13.04.08_14.43.02.0.log [4/8/13 14:43:02:657 IDT] 00000031 com.worklight.gadgets.serving.InvokeProcServlet E FWLSE0081E: Failed synchronizing application from database. org.springframework.orm.jpa.JpaOptimisticLockingFailureException: Unable to obtain an object lock on "A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. [java.lang.String]".; nested exception is org.apache.openjpa.persistence.OptimisticLockException: Unable to obtain an object lock on "A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. [java.lang.String]". at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:285) at org.springframework.orm.jpa.DefaultJpaDialect.translateExceptionIfPossible(DefaultJpaDialect.java:120) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:212) at org.springframework.orm.jpa.JpaAccessor.translateIfNecessary(JpaAccessor.java:152) at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:189) at org.springframework.orm.jpa.JpaTemplate.executeFind(JpaTemplate.java:151) at org.springframework.orm.jpa.JpaTemplate.findByNamedQuery(JpaTemplate.java:343) at com.worklight.server.database.api.JpaDaoHelper.executeQuery(JpaDaoHelper.java:36) at com.worklight.gadgets.bean.GadgetDAO.getAllApplications(GadgetDAO.java:103) at com.worklight.gadgets.bean.WidgetServiceBean$ApplicationTransaction.getAppsToRemove(WidgetServiceBean.java:370) at com.worklight.gadgets.bean.WidgetServiceBean$ApplicationTransaction.syncApplicationsStateFromDB(WidgetServiceBean.java:286) at com.worklight.gadgets.bean.WidgetServiceBean$ClusterSyncApplicationTransaction.run(WidgetServiceBean.java:475) at com.worklight.gadgets.bean.WidgetServiceBean$ClusterSyncApplicationTransaction.run(WidgetServiceBean.java:470) at com.worklight.core.util.RssBrokerUtils.doInTransaction(RssBrokerUtils.java:119) at com.worklight.gadgets.bean.WidgetServiceBean.syncApplicationsFromDBTransaction(WidgetServiceBean.java:467) at com.worklight.gadgets.bean.ClusterDataSynchronizationTask.step(ClusterDataSynchronizationTask.java:33) at com.worklight.core.tasks.TaskThread.run(TaskThread.java:98) Caused by: org.apache.openjpa.persistence.OptimisticLockException: Unable to obtain an object lock on "A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. [java.lang.String]". at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4236) at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4211) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64) at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.handleCheckedException(SelectResultObjectProvider.java:155) at org.apache.openjpa.lib.rop.EagerResultList.(EagerResultList.java:40) at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1228) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:990) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:805) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:775) at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:771) at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:517) at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:255) at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:294) at org.springframework.orm.jpa.JpaTemplate$11.doInJpa(JpaTemplate.java:351) at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:184) ... 12 more Caused by: java.sql.SQLTransactionRollbackException: A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. 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(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(Unknown Source) at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(Unknown Source) at org.apache.derby.impl.jdbc.EmbedResultSet.next(Unknown Source) at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet.next(WSJdbcResultSet.java:3108) at org.apache.openjpa.lib.jdbc.DelegatingResultSet.next(DelegatingResultSet.java:106) at org.apache.openjpa.jdbc.sql.ResultSetResult.nextInternal(ResultSetResult.java:222) at org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.nextInternal(SelectImpl.java:2470) at org.apache.openjpa.jdbc.sql.AbstractResult.next(AbstractResult.java:173) at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.next(SelectResultObjectProvider.java:99) at org.apache.openjpa.lib.rop.EagerResultList.(EagerResultList.java:35) ... 22 more Caused by: java.sql.SQLException: A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 38 more Caused by: ERROR 40001: A lock could not be obtained due to a deadlock, cycle of locks and waiters is: Lock : ROW, GADGET_APPLICATIONS, (2,7) Waiting XID : {429, S} , WORKLIGHT, SELECT t0.ID, t0.ENFORCE_AUTHENTICITY, t0.ENVIRONMENT_ID, t1.ID, t1.DISP_IN_GALLERY, t1.LAST_UPDATE_TIME, t1.NAME, t0.SERVER_VERSION, t0.VERSION, t0.VERSION_LOCKED FROM GADGET_APPLICATIONS t0 INNER JOIN GADGETS t1 ON t0.GADGET_ID = t1.ID Granted XID : {422, S} Lock : ROW, GADGET_APPLICATIONS, (2,6) Waiting XID : {422, X} , WORKLIGHT, DELETE FROM GADGET_APPLICATIONS WHERE ID = ? Granted XID : {422, S} , {429, S} . The selected victim is XID : 429. at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.services.locks.Deadlock.buildException(Unknown Source) at org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(Unknown Source) at org.apache.derby.impl.services.locks.AbstractPool.lockObject(Unknown Source) at org.apache.derby.impl.services.locks.ConcurrentPool.lockObject(Unknown Source) at org.apache.derby.impl.store.raw.xact.RowLocking3.lockRecordForRead(Unknown Source) at org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source) at org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source) at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(Unknown Source) at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(Unknown Source) at org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(Unknown Source) at org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown Source) at org.apache.derby.impl.store.access.btree.BTreeScan.fetchNextGroup(Unknown Source) at org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(Unknown Source) at org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(Unknown Source) at org.apache.derby.impl.sql.execute.IndexRowToBaseRowResultSet.getNextRowCore(Unknown Source) at org.apache.derby.impl.sql.execute.NestedLoopJoinResultSet.getNextRowCore(Unknown Source) at org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(Unknown Source) at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(Unknown Source) ... 31 more

最佳答案

可以通过在server.xml中的WorklightDS dataSource元素中添加以下属性来解决此问题:

isolationLevel="TRANSACTION_READ_COMMITTED"

关于derby - 安装WL应用程序时的“A lock could not be obtained”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15878662/

相关文章:

html - 如何通过单击另一个按钮来启用禁用的按钮?

java - 在 Websphere Liberty 中加载 native 库的做法是什么?

java - 斯坦福 NLP 库的 NoClassDefFoundError

websphere-liberty - 如何在 NetBeans 8.2 中添加 IBM WAS 8.5

java - 启动 Derby 连接时为 "SecurityException: sealing violation"

java - Mysql Java Derby Netbeans : 'deleteRow' not allowed because the ResultSet is not an updatable ResultSet

java - 如何配置项目以使用最新的 Derby DB 版本 (10.4)?

JavaFX + Hibernate(JPA) 持久化 + Derby DB

ibm-mobilefirst - JSONStore + 适配器推送替换 - 如何将 _id 作为参数?

javascript - 如何通过混合应用程序的 jquery 在 IOS 6.0(Iphone)中关闭选择器 onchange 事件的下拉菜单