Oracle データベースの利用時に Jira のバッチ通知が動作しない
この記事は、アトラシアンのサーバー製品にのみ適用されます。クラウド製品とサーバー製品の違いの詳細をご確認ください。
問題
Jira 8.+ のアップグレードまたはインストール後にバッチ通知を有効化しても通知がまったく送信されない。テスト通知は引き続き動作する。
atlassian-jira.log
では、Batch Notifications プラグインで利用される JIRA-INFORM-Thread
で返されている次の例外が表示されている。
2020-01-09 09:54:45,901+0100 JIRA-INFORM-Thread-1 WARN anonymous 455x660x1 1iwbmex x.x.x.x /secure/QuickCreateIssue.jspa [o.a.commons.dbcp2.BasicDataSource] An internal object pool swallowed an Exception.
java.sql.SQLException: Protocol violation: [ 0, ]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:669)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
at oracle.jdbc.driver.T4C7Ocommoncall.doOROLLBACK(T4C7Ocommoncall.java:66)
at oracle.jdbc.driver.T4CConnection.doRollback(T4CConnection.java:906)
at oracle.jdbc.driver.PhysicalConnection.rollback(
atlassian-jira-outgoing-mail.log で次の内容が確認できる場合もあります。
2021-11-02 16:18:40,307-0400 ERROR [] JIRA-INFORM-Thread-0 anonymous 455x660x1 1iwbmex x.x.x.x /secure/QuickCreateIssue.jspa [c.a.m.o.c.a.j.p.inform.performance.MeasurementWorkerFactory] Exception occured
com.querydsl.core.QueryException: Caught SQLException for insert into "AO_733371_EVENT_PARAMETER" ("NAME", "VALUE", "EVENT_ID") values (?, ?, ?)
[...]
Caused by: java.sql.SQLException: operation not allowed: DML Returning cannot be batched
atlassian-jira.log で次のエラーが確認できる場合もあります。
2022-12-12 10:54:01,007+0100 ERROR [] JIRA-INFORM-Thread-0 anonymous 653x33593x1 z6gr4a XXX.XX.XX.XXX /secure/WorkflowUIDispatcher.jspa [c.a.m.o.c.a.j.p.inform.performance.MeasurementWorkerFactory] Exception occured
java.lang.NullPointerException
at oracle.jdbc.driver.OraclePreparedStatement.registerReturnParamsForAutoKey(OraclePreparedStatement.java:11906) [ojdbc11.jar:21.6.0.0.0]
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2023) [ojdbc11.jar:21.6.0.0.0]
at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:10057) [ojdbc11.jar:21.6.0.0.0]
at oracle.jdbc.driver.OraclePreparedStatementWrapper.addBatch(OraclePreparedStatementWrapper.java:1001) [ojdbc11.jar:21.6.0.0.0]
at org.apache.commons.dbcp2.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:207) [commons-dbcp2-2.1.jar:2.1]
at org.apache.commons.dbcp2.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:207) [commons-dbcp2-2.1.jar:2.1]
at com.atlassian.jira.ofbiz.sql.PreparedStatementWrapper.addBatch(PreparedStatementWrapper.java:158) [classes/:?]
...
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) [?:?]
at com.atlassian.jira.plugins.inform.events.listener.JiraEventListenerImpl.lambda$handleIssueEventBundle$5(JiraEventListenerImpl.java:63) [?:?]
at com.atlassian.jira.plugins.inform.performance.MeasurementWorkerFactory$1.measure(MeasurementWorkerFactory.java:41) [?:?]
at com.atlassian.jira.plugins.inform.events.listener.JiraEventListenerImpl.handleIssueEventBundle(JiraEventListenerImpl.java:52) [?:?]
at com.atlassian.jira.plugins.inform.events.listener.AsyncJiraEventListener.lambda$handleIssueEventBundle$0(AsyncJiraEventListener.java:27) [?:?]
at com.atlassian.jira.plugins.inform.events.listener.EventThreadPool.lambda$wrapThreadLocalSafe$0(EventThreadPool.java:48) [?:?]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
at java.base/java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
at java.base/java.lang.Thread.run(Unknown Source) [?:?]
診断
Jira 8.+ と Oracle データベースを利用している。
データベースで確認すると、バッチ通知イベント テーブルである AO_733371_EVENT
から行が返されない。つまり、バッチ通知イベントがこれまでに生成されていない。
SQL> select * from AO_733371_EVENT;
no rows selected
原因
SQLException: Protocol violation
そのものは通常は Oracle ドライバで発生します。このため、まずはご利用の Jira インスタンスで適切な Database JDBC ドライバを利用していることをご確認ください。
当社のサポート対象プラットフォームに記載されているように、Oracle データベースを利用している場合は Oracle JDBC 19.3 ドライバの利用が必要です。
ソリューション
- 適切な Oracle ドライバ JDBC 19.3 (ojdbc8.jar) をダウンロードします
- ドライバの JAR ファイルを Jira インストールの
$JIRA_INSTALL/lib
フォルダにコピーすることで JDBC ドライバを更新します。このフォルダから以前のフォルダを移動し、$JIRA_INSTALL/atlassian-jira/WEB-INF/lib
に他の ojdbc8.jar ファイルがないことを確認します。 - Jira を再起動します。