intra-mart IM-Workflow トラブルシューティング 第22版 2024-04-01

4.12. 処理対象者が0人になる


4.12.1. プラグイン関連の処理で NullPointerException が発生する

対象バージョン

  • iWP / iAF の場合

    • IM-Workflow 7.2.0 ~ 最新バージョン
  • intra-mart Accel Platform の場合

    • 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 2013 Winter(Felicia) IM-Workflow 8.0.6

現象

  • 申請画面で申請ボタンをクリックした場合、エラーとなる
  • 承認画面で承認ボタンをクリックした場合、エラーなく処理が実行されるが、次の承認者が展開されず、未処理一覧に案件が表示されない

条件

  • 以下の基盤の対象バージョンを使用している

    • iWP / iAF の場合

      • iWP / iAF 7.2.0 ~ iWP / iAF 7.2.6
    • intra-mart Accel Platform の場合

      • 2012 Autumn(Alba) 8.0.1 ~ 2013 Winter(Felicia) 8.0.6
  • 事象の発生時刻に該当する例外ログに下記のようなスタックトレースが出力されている

    jp.co.intra_mart.foundation.workflow.exception.WorkflowException: java.lang.NullPointerException
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowThreadExceptionHandlerImpl.execute(WorkflowThreadExceptionHandlerImpl.java:25)
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowThreadRunner.run(WorkflowThreadRunner.java:126)
    Caused by: java.lang.NullPointerException
       at jp.co.intra_mart.common.aid.jdk.javax.xml.XmlNode.lookup(XmlNode.java:727)
       at jp.co.intra_mart.common.aid.jdk.javax.xml.XmlNode.lookup(XmlNode.java:670)
       at jp.co.intra_mart.common.aid.jdk.javax.xml.XmlNode.getString(XmlNode.java:517)
       at jp.co.intra_mart.common.aid.jdk.javax.xml.XmlNode.getString(XmlNode.java:504)
       at jp.co.intra_mart.system.plugin.PluginDescriptorImp.getGroups(PluginDescriptorImp.java:101)
       at jp.co.intra_mart.foundation.plugin.PluginManager.getPluginDescriptors(PluginManager.java:582)
       at jp.co.intra_mart.system.workflow.engine.plugin.WorkflowPluginObjectCacher.getPluginDescriptorFromCache(WorkflowPluginObjectCacher.java:261)
       at jp.co.intra_mart.system.workflow.engine.plugin.WorkflowPluginObjectCacher.getObjectAryFromPluginManager(WorkflowPluginObjectCacher.java:206)
       at jp.co.intra_mart.system.workflow.engine.plugin.WorkflowPluginObjectCacher.getExecuteObject(WorkflowPluginObjectCacher.java:134)
       at jp.co.intra_mart.system.workflow.listener.context.WorkflowAuthorityEventListenerContext.execute(WorkflowAuthorityEventListenerContext.java:66)
       at jp.co.intra_mart.system.workflow.util.WorkflowPluginUtil.getUserDataModelList(WorkflowPluginUtil.java:443)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.expandUsers(AuthorityPluginDataAnalyzer.java:204)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.getExecutableUser(AuthorityPluginDataAnalyzer.java:142)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.getExecutableUser(AuthorityPluginDataAnalyzer.java:82)
       at jp.co.intra_mart.system.workflow.engine.thread.task.ProcessUserExpandRegisterTask.addExecuterUserInfo(ProcessUserExpandRegisterTask.java:176)
       at jp.co.intra_mart.system.workflow.engine.thread.task.ProcessUserExpandRegisterTask.execute(ProcessUserExpandRegisterTask.java:131)
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowThreadRunner.run(WorkflowThreadRunner.java:97)
    
  • または下記のようなスタックトレースが出力されている

    [ERROR] j.c.i.s.w.e.WorkflowExceptionDispatcher - [] [Engine - Thread]スレッドタスク実行で例外が発生しました。
    jp.co.intra_mart.foundation.workflow.exception.WorkflowException: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: 無効または不正なXML文字が指定されています。
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowThreadExceptionHandlerImpl.execute(WorkflowThreadExceptionHandlerImpl.java:25) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowThreadRunner.run(WorkflowThreadRunner.java:133) ‾[im_workflow-8.0.4-main.jar:na]
       at java.lang.Thread.run(Thread.java:724) ‾[na:1.7.0_25]
    Caused by: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: 無効または不正なXML文字が指定されています。
       at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createElement(CoreDocumentImpl.java:622) ‾[na:1.7.0_25]
       at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1543) ‾[na:1.7.0_25]
       at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1746) ‾[na:1.7.0_25]
       at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1746) ‾[na:1.7.0_25]
       at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1502) ‾[na:1.7.0_25]
       at jp.co.intra_mart.system.plugin.PluginDescriptorImp.getNode(PluginDescriptorImp.java:235) ‾[im_plugin-8.0.4-main.jar:na]
       at jp.co.intra_mart.foundation.plugin.PluginManager.copy(PluginManager.java:709) ‾[im_plugin-8.0.4-main.jar:na]
       at jp.co.intra_mart.foundation.plugin.PluginManager.getDescriptor(PluginManager.java:687) ‾[im_plugin-8.0.4-main.jar:na]
       at jp.co.intra_mart.foundation.plugin.PluginManager.getPluginDescriptors(PluginManager.java:398) ‾[im_plugin-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.plugin.WorkflowPluginObjectCacher.getPluginDescriptorFromCache(WorkflowPluginObjectCacher.java:264) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.plugin.WorkflowPluginObjectCacher.getObjectAryFromPluginManager(WorkflowPluginObjectCacher.java:210) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.plugin.WorkflowPluginObjectCacher.getExecuteObject(WorkflowPluginObjectCacher.java:136) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.core.listener.SearchListenerContext.getUserInfo(SearchListenerContext.java:260) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.util.WorkflowPluginUtil.getUserInfo(WorkflowPluginUtil.java:1180) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.thread.task.TemplateImBoxSendTask.getSingleUserInfo(TemplateImBoxSendTask.java:1519) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.thread.task.TemplateImBoxSendTask.createReplaceMap(TemplateImBoxSendTask.java:352) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.thread.task.TemplateImBoxSendTask.execute(TemplateImBoxSendTask.java:269) ‾[im_workflow-8.0.4-main.jar:na]
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowThreadRunner.run(WorkflowThreadRunner.java:103) ‾[im_workflow-8.0.4-main.jar:na]
       ... 1 common frames omitted
    

原因

製品の不具合です。

IM-Workflowにおいて申請できるかどうかの判断や次の承認者を展開する仕組みでPluginManagerを使用しています。
PluginManagerがスレッドセーフでない実装となるため本事象が発生します。
PluginManagerは iWP / iAF 、 intra-mart Accel Platform の機能です。

以下の要件で対応を行っています。

  • iWP / iAF の場合

    • 要件 #9163 PluginManagerから取得したPluginDescriptorの各メソッドのスレッドセーフ対応
    • 要件 #9125 プラグインマネージャ初期化処理がスレッドセーフでない
    • 要件 #8912 PluginManagerのスレッドセーフ対応
  • intra-mart Accel Platform の場合

    • 要件 #3172 PluginManagerから取得したPluginDescriptorの各メソッドのスレッドセーフ対応
    • 要件 #3350 プラグインマネージャ初期化処理が同期化されていません
    • 要件 #4359 PluginDescriptorのスレッドセーフ対応

解決方法

以下のパッチまたはアップデートを適用することで解決します。

  • iWP / iAF の場合

    • iWP / iAF 7.2.7
  • intra-mart Accel Platform の場合

    • intra-mart Accel Platform 2014 Spring(Granada) 8.0.7

回避方法

ありません。

復旧方法

ありません。

4.12.2. 多言語情報取得エラーのため案件の処理対象者が0人となり、未処理一覧に案件が表示されない

対象バージョン

  • iWP / iAF の場合

    • IM-Workflow 7.2.0 ~ 最新バージョン
  • intra-mart Accel Platform の場合

    • 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 最新バージョン

現象

申請や承認などの処理の後、処理待ちノードの処理対象者として展開される想定のユーザでログインし、未処理一覧を表示しても、該当案件が表示されません。

条件

  • 処理対象者として展開されるユーザの所属組織の中に、システムロケール分の国際化情報が登録されていない組織が存在する

  • 申請や承認などの処理の実行時刻付近に該当する例外ログに、下記のようなスタックトレースが出力されている

    jp.co.intra_mart.foundation.workflow.exception.WorkflowException: java.lang.NullPointerException
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowAsynchronousTask.dispatchException(WorkflowAsynchronousTask.java:159)
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowAsynchronousTask.run(WorkflowAsynchronousTask.java:100)
       at jp.co.intra_mart.system.asynchronous.TaskWrapperImpl.run(TaskWrapperImpl.java:168)
       at jp.co.intra_mart.system.asynchronous.impl.executor.work.ExecutableWrapper.run(ExecutableWrapper.java:89)
       at com.caucho.jca.ra.WorkThread.run(WorkThread.java:87)
       at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173)
       at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118)
    Caused by: java.lang.NullPointerException
       at jp.co.intra_mart.system.workflow.engine.database.model.ActvExecutableUserDataModel.addAuthUserOrganization(ActvExecutableUserDataModel.java:108)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.mergeInfo(AuthorityPluginDataAnalyzer.java:686)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.addUniqueExecutableUser(AuthorityPluginDataAnalyzer.java:93)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.expandUsers(AuthorityPluginDataAnalyzer.java:590)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.getExecutableUserSearchDate(AuthorityPluginDataAnalyzer.java:350)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.getExecutableUserSearchDate(AuthorityPluginDataAnalyzer.java:280)
       at jp.co.intra_mart.system.workflow.engine.core.tool.AuthorityPluginDataAnalyzer.getExecutableUser(AuthorityPluginDataAnalyzer.java:184)
       at jp.co.intra_mart.system.workflow.engine.thread.task.ProcessUserExpandRegisterTask.addExecuterUserInfo(ProcessUserExpandRegisterTask.java:260)
       at jp.co.intra_mart.system.workflow.engine.thread.task.ProcessUserExpandRegisterTask.execute(ProcessUserExpandRegisterTask.java:151)
       at jp.co.intra_mart.system.workflow.engine.thread.WorkflowAsynchronousTask.run(WorkflowAsynchronousTask.java:93)
       ... 5 more
    

原因

製品の仕様です。

組織の名称が全ロケール分登録されていないことが原因です。
IM-Workflow では、システムロケール毎にマスタデータが必要です。

コラム

補足として、当事象の発生手順例を示します。

  1. 次の条件を満たす組織を作成する(組織1と呼ぶ)
    • 申請基準日で有効で、日本語ロケールのみ名称設定された組織
  2. 次のロールを作成する
    • ロール1
    • ロール2
  3. 次のユーザを作成する(ユーザAと呼ぶ)
    • 名称は全ロケール設定
    • ロール1、ロール2を付与
    • 組織1に所属
  4. 次のルートを作成する(ルート1と呼ぶ)
    • S-申請-承認-E
    • 申請ノードの処理対象者をロール1、ロール2とする
    • 承認ノードの処理対象者をロール1、ロール2とする
  5. ルート1を使ったフローを作成する(フロー1と呼ぶ)
  6. ユーザAでログインし、フロー1で申請を行う
  7. 【事象発生】承認ノードの到達処理で例外が発生する

解決方法

ありません。

回避方法

組織の名称を全ロケール分設定してください。
プラグインキャッシュが有効な場合、組織名称の設定後に、 iWP / iAF / intra-mart Accel Platform の再起動を行うか、「処理対象者標準プラグイン結果キャッシュ削除」バッチ・ジョブを実行し、プラグインキャッシュを削除してください。

コラム

「処理対象者標準プラグイン結果キャッシュ削除」バッチ・ジョブは、以下のパッチ・アップデートで追加された機能です。

  • iWP / iAF の場合

    • IM-Workflow 7.2.8
  • intra-mart Accel Platform の場合

    • 2013 Summer(Damask) IM-Workflow 8.0.4

復旧方法

まず、「回避方法」で記載されている対応を行ってください。
その後、処理対象者の展開に失敗したノードに対し、案件操作機能によって処理対象者の再展開を実行してください。

4.12.3. 承認者の未処理一覧に案件が表示されない、処理対象者に承認者のユーザが表示されない

対象バージョン

  • iWP / iAF の場合

    • IM-Workflow 7.2.0 ~ IM-Workflow 7.2.8
  • intra-mart Accel Platform の場合

    • 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 2013 Spring(Climbing) IM-Workflow 8.0.3

現象

  • [未処理]、または[処理済(未完了案件)]の一覧 - [フロー] で表示される「フロー参照」で処理中の行の処理者のリンクをクリックしたときに、処理対象者に設定したユーザが表示されません。
  • 上記の現象に該当するユーザの未処理一覧に対象の案件が表示されず、処理を行うことができません。

条件

以下の条件をすべて満たす場合に発生します。

  • 案件操作や申請・処理時に処理対象者を設定する際、申請基準日と異なる基準日でユーザや組織などを検索した場合
  • 上記により、申請基準日時点で無効なユーザや組織などを処理対象者に設定した場合

原因

製品の不具合です。

処理対象者の名称の取得やノード到達時のユーザ展開処理は「申請基準日」に基づいて行います。
そのため、本来は案件に対する処理対象者の検索時は、ユーザや組織などの検索基準日として「申請基準日」を利用すべきです。
しかし、対象バージョンとして記載のバージョンでは、ユーザや組織などの検索基準日に「システム日付」が初期表示されてしまいます。
そのため、申請基準日で無効な処理対象者が検索・設定されやすい状況となっていました。

以下の要件で対応を行っています。

  • iWP / iAF の場合

    • 要件 [18213] 利用者の処理対象検索画面の検索基準日初期値が不正です。
    • 要件 [20443] 案件の処理対象者・参照者、振替先として、申請基準日時点で無効な対象を設定することができてしまいます。
  • intra-mart Accel Platform の場合

    • 要件 [19499] 利用者の処理対象検索画面の検索基準日初期値が不正です。
    • 要件 [20455] 案件の処理対象者・参照者、振替先として、申請基準日時点で無効な対象を設定することができてしまいます。

解決方法

以下のパッチまたはアップデートを適用することで解決します。

  • iWP / iAF の場合

    • 要件 [18213] 利用者の処理対象検索画面の検索基準日初期値が不正です。

      • IM-Workflow 7.2.8
    • 要件 [20443] 案件の処理対象者・参照者、振替先として、申請基準日時点で無効な対象を設定することができてしまいます。

      • IM-Workflow 7.2.9
  • intra-mart Accel Platform の場合

    • 2013 Summer(Damask) IM-Workflow 8.0.4

回避方法

本事象は、処理対象者を指定する際の検索基準日の初期値がシステム日付となる場合に発生するため、処理対象者の検索ポップアップを表示後、「検索基準日」を案件の申請基準日に変更すると回避することができます。

復旧方法

案件操作機能を利用し、対象案件の処理対象者に対し、申請基準日時点で有効なユーザや組織などを再設定してください。