演習 2.4:ジョブ結果ハンドラの実装
推定所要時間
SimpleModelGeometryCheck アクション用のジョブ結果ハンドラを作成する
説明:
5 分
演習:
15 分
説明
ジョブ結果ハンドラは、インターフェイス IJobResultHandler を実装する必要があります。
setInputDirectory - このメソッドを呼び出して、ジョブ結果データを読み出すディレクトリを設定します。
getInputDirectory - setInputDirectory に対応するゲッターメソッドです。
importJobResultData(String elementElid, Properties jobParameters) - このメソッドを呼び出して、ジョブ実行結果を処理します。
インターフェイス IJobResultHandler を実装するよりも、以下の基本サポートを提供している AbstractJobResultHandler クラスを拡張する方が便利な場合があります。
作成される index.xml の読み出し
結果ファイルへのアクセス
この演習で扱うジョブ結果ハンドラ実装は以下のとおりです。
EmailJobResultHandler: ジョブ実行結果 (生成された Neutral フォーマットなど) を電子メールで送信します。
SaveToFileSystemJobResultHandler: ジョブ実行結果 (生成された Neutral フォーマットなど) をファイルシステムに保存します。
StoreToDatabaseJobResultHandler: ジョブ実行結果 (生成された Neutral フォーマットなど) をデータベースに保管します。
ジョブの結果として作成される index.xml
ジョブ結果には、エラー状態や結果ファイルなど、ジョブの実行に関する追加情報を記述した index.xml ファイルを含める必要があります。ジョブ結果ハンドラは、index.xml ファイル内の情報を使用します。
Simple Model Geometry Check は、チェック結果を results 要素の modelcheck 属性に返します。
<?xml version="1.0" encoding="utf-8" ?>
<job type="modeling.simplegeometrycheck" version="20.7">.
<element id="BYNP7GNE2VLHYS" timestamp="1196780288000" />
<results modelcheck="model_corrupt">
<result-file format="PKG" mimetype="" zipname="model.pkg" name="model.pkg" />
</results>
</job>
* 
EmailJobResultHandlerStoreToDatabaseJobResultHandlerSaveToFileSystemJobResultHandler は、電子メール送信するファイル、データベースに保管するファイル、またはファイルシステムに保存するファイルがあるかどうか、<result-file> エントリをチェックします。result-file タグでサポートされている属性については、AbstractJobResultHandler.ResultFileEntry JavaDoc を参照してください。
演習
この演習では、図形チェックが問題またはエラーを検出した場合にのみ注釈作成済みのモデルを電子メールで送信するよう EmailJobResultHandler を拡張し、新しい結果ハンドラを使用するようジョブの xml 設定ファイルを更新します。
前提条件
演習 2.3 の SimpleModelGeometryCheckJob.xml ファイルと SimpleModelGeometryCheckTemplate.lsp ファイルが必要です。
EmailJobResultHandler の拡張
Simple Model Geometry Check では、図形チェックが問題またはエラーを検出した場合にのみ注釈作成済みのモデルを電子メールで送信するよう、EmailJobResultHandler を拡張します(ここをクリックして表示されるファイルからコードをコピーアンドペーストできます)。
package com.acme;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import com.osm.automation.EmailJobResultHandler;
import com.osm.automation.JobExecutionFailedException;
import com.osm.automation.JobResultOutOfDateException;
import com.osm.exception.WMException;
import com.osm.util.Strings;
public class SimpleModelGeometryCheckJobResultHandler extends EmailJobResultHandler {
@Override
public void importJobResultData(String elementElid, Properties jobParams)
throws JobExecutionFailedException, WMException, IOException, JobResultOutOfDateException {
final SimpleModelGeometryCheckJobResultIndex index = (SimpleModelGeometryCheckJobResultIndex) getResultIndex();
if (!index.isModelOK()) {
// only send e-mail if model is not o.k.
super.importJobResultData(elementElid, jobParams);
}
}
@Override
protected JobResultIndex createResultIndex(File indexXmlFile)
throws Exception {
return new SimpleModelGeometryCheckJobResultIndex(indexXmlFile);
}
// special JobResultIndex that evaluates the modelcheck attribute
private static class SimpleModelGeometryCheckJobResultIndex extends JobResultIndex {
private static String XPATH_MODEL_CHECK = "//results/@modelcheck"; //frozen
private String modelcheck;
public SimpleModelGeometryCheckJobResultIndex(File xmlFile)
throws Exception {
super(xmlFile);
}
@Override
protected void parseXml(Document indexDoc) throws Exception {
super.parseXml(indexDoc);
final XPath xpath = XPathFactory.newInstance().newXPath();
this.modelcheck = xpath.evaluate(XPATH_MODEL_CHECK, indexDoc);
}
public boolean isModelOK() {
return !Strings.isEmpty(modelcheck) && modelcheck.equals("model_ok");
}
}
}
この特殊な実装 SimpleModelGeometryCheckJobResultIndex は、index.xml ファイルを読み込み、モデル図形チェックのエラー状態に簡単にアクセスできるようにします。
XML ファイルでの新しい SimpleModelGeometryCheckJobResultHandler の設定
新しい SimpleModelGeometryCheckJobResultHandlerSimpleModelGeometryCheckJob.xml ジョブ設定ファイルに追加します。
<?xml version="1.0" encoding="UTF-8"?>
<Job type="modeling.simplegeometrycheck" has_result_data="true">
<DisplayName>Simple Model Geometry Check</DisplayName>
<UI>
<ActionMenu wm_java_class="com.osm.datamgmt.biz.Model" include_derived="true">
<Name>Simple Model Geometry Check</Name>
<JobGroup>Model Checks</JobGroup>
<Action java_class="com.osm.automation.action.MultiSelectCreateJobScheduleAction">
<Description>Checks a model's geometry</Description>
</Action>
</ActionMenu>
</UI>
<Exporter java_class="com.acme.SimpleModelGeometryCheckJobExporter">
<StartScriptTemplate>SimpleModelGeometryCheckTemplate.lsp</StartScriptTemplate>
<ModelLoadRule catalog="model" msg_num="728">Highest Revisions</ModelLoadRule>
</Exporter>
<ResultHandler java_class="com.acme.SimpleModelGeometryCheckJobResultHandler">
<EmailFiles>
<Subject>Model check had failures</Subject>
<Body> Model check had failures for '{1}'. Annotated model is attached.</Body>
</EmailFiles>
</ResultHandler>
</Job>
オプション: XML ファイルでの複数のジョブ結果ハンドラの設定
異なる方法でジョブ結果を処理する (エラー時に電子メール通知を送信する、結果をデータベースまたはファイルシステムに保管する) よう、複数のジョブ結果ハンドラを設定することが望ましい場合があります。CompoundJobResultHandler は、複数の (任意の) ジョブ結果ハンドラを統合する特殊なジョブ結果ハンドラです。
モデル図形チェックが返した注釈作成済みモデルを保管するため、SimpleModelGeometryCheckJobResultHandlerSaveToFileSystemJobResultHandler を含めるよう、CompoundJobResultHandler を設定できます。
<?xml version="1.0" encoding="UTF-8"?>
<Job type="modeling.simplegeometrycheck" has_result_data="true">
<DisplayName>Simple Model Geometry Check</DisplayName>
<UI>
<ActionMenu wm_java_class="com.osm.datamgmt.biz.Model" include_derived="true">
<Name>Simple Model Geometry Check</Name>
<JobGroup>Model Checks</JobGroup>
<Action java_class="com.osm.automation.action.MultiSelectCreateJobScheduleAction">
<Description>Checks a model's geometry</Description>
</Action>
</ActionMenu>
</UI>
<Exporter java_class="com.acme.SimpleModelGeometryCheckJobExporter">
<StartScriptTemplate>SimpleModelGeometryCheckTemplate.lsp</StartScriptTemplate>
<ModelLoadRule catalog="model" msg_num="728">Highest Revisions</ModelLoadRule>
</Exporter>
<ResultHandler java_class="com.osm.automation.CompoundJobResultHandler">
<ResultHandlerOption name="MailOnFailureOption" ignore_errors="false">true
<ResultHandler java_class="com.acme.SimpleModelGeometryCheckJobResultHandler">
<DisplayName>Send e-mail in case of failures</DisplayName>
<EmailFiles>
<Subject>Model check had failures</Subject>
<Body> Model check had failures for '{1}'. Annotated model is attached.</Body>
</EmailFiles>
</ResultHandler>
</ResultHandlerOption>
<ResultHandlerOption name="SaveToFileSystem" ignore_errors="false">true
<ResultHandler java_class="com.osm.automation.SaveToFileSystemJobResultHandler">
<DisplayName>Save annotated model to server directory</DisplayName>
<TargetDirectory>C:\taskagent</TargetDirectory>
</ResultHandler>
</ResultHandlerOption>
</ResultHandler>
</Job>
ResultHandlerOption の値によって、結果ハンドラをデフォルトで有効にするかどうかが決定されます。ジョブの UI 設定が Creo Elements/Direct Model Manager クライアントでのタスクスケジュールの作成を許可している場合、統合されたジョブ結果ハンドラ SimpleModelGeometryCheckJobResultHandlerSaveToFileSystemJobResultHandler が独立した結果処理オプションとして「タスクの作成」ダイアログに表示されます。
これは役に立ちましたか?