Получение org.apache.openjpa.persistence.OptimisticLockException: невозможно получить блокировку объекта для «null» - PullRequest
0 голосов
/ 16 мая 2018

Я получаю исключение ниже при выполнении EntityManager.find ().Мы используем базу данных DB2 и сервер WAS 8.0 для нашего приложения.Любая помощь с благодарностью.

Caused by: <openjpa-2.1.2-SNAPSHOT-r422266:1709309 nonfatal store error> org.apache.openjpa.persistence.OptimisticLockException: Unable to obtain an object lock on "null".
at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4930)
at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4908)
at org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException(DB2Dictionary.java:603)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:110)
at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:62)
at org.apache.openjpa.jdbc.kernel.PreparedSQLStoreQuery$PreparedSQLExecutor.executeQuery(PreparedSQLStoreQuery.java:139)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1012)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:870)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:801)
at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:315)
at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:331)

... 116 more

Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: DB2 SQL Error: SQLCODE=-913, SQLSTATE=57033, SQLERRMC=00C90088;00000304;ODNC001 .SNCPC145.X'200D65' '.X'43', DRIVER=4.15.134 {prepstmnt -1803801027 
SELECT a.column1 
FROM table_test a 
WHERE (a.column2 = ? AND a.column3 = ?) 
[params=(String) 00000, (String) 000011]} [code=-913, state=57033]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:281)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:265)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:72)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1183)
at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:284)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1787)
at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:274)
at org.apache.openjpa.jdbc.kernel.PreparedSQLStoreQuery$PreparedSQLExecutor.executeQuery(PreparedSQLStoreQuery.java:118)
... 123 more

1 Ответ

0 голосов
/ 16 мая 2018

sqlode -913 с SQLERRMC = 00C90088 означает, что в вашем соединении произошла блокировка DEADLOCK.

Если ваш Db2-сервер работает в Z / OS, обратитесь к администратору базы данных за помощью в поиске другого Db2-соединения и операторов SQL, выполняемых в обеих транзакциях. Планы доступа и уровни изоляции, используемые обоими соединениями, также имеет значение, как и любые применимые таймауты блокировки. Администратор базы данных Db2-сервера имеет доступ к инструментам диагностики, которые могут вам помочь.

В Интернете есть много обращений, дающих советы о том, как уменьшить вероятность взаимоблокировок Db2, поэтому сделайте свое исследование.

Вам потребуется знать уровень изоляции, используемый соединением Websphere (или пакетом, или SQL-оператором), и все операторы в Db2-транзакции для вашего соединения.

Другие токены в сообщении также имеют значение, т. Е. ODNC001.SNCPC145 может быть задействованной таблицей.

Версия драйвера jdbc type4, используемого в Websphere, устарела (похоже, она собрана из сборки Db2 v10.1 fixpack 5), поэтому подумайте о том, чтобы обновить ее до текущей версии.

...