BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

BPM プラグイン プログラミング ガイド

 前 次 目次 索引 PDFで表示  

プラグイン セッション EJB の定義

この章では、プラグイン セッション EJB を定義する方法について説明します。この章の内容は以下のとおりです。

 


概要

プラグイン セッション EJB を定義するには、次の表に説明する 3 つの事前定義されたインタフェースを実装する必要があります。

表3-1 プラグイン セッション EJB で必要なインタフェース

名前

インタフェース

説明

セッション EJB

javax.ejb.SessionBean

すべてのセッション EJB により実装される必要のあるインタフェース。

プラグイン ホーム インタフェース

com.bea.wlpi.server.plugin.PluginHome

javax.ejb.EJBHome インタフェースの拡張。すべてのプラグインのためのホーム インタフェースを定義する。

プラグイン リモート インタフェース

com.bea.wlpi.server.plugin.Plugin

javax.ejb.EJBObject インタフェースの拡張。すべてのプラグインのためのリモート インタフェースを定義する。


 

次の節では、プラグイン セッション EJB を定義する際に実装する必要のある各インタフェースとメソッドについて説明します。プラグイン サンプルからの抜粋も示します。

 


セッション EJB インタフェース

定義により、セッション EJB は、javax.ejb.SessionBean とそのメソッドを実装する必要があります。

注意: SessionBean インタフェース メソッドの内容は、空であることも、単純にメッセージをログに返すこともありますが、必ず実装します。

次の表に、実装する必要のあるセッション EJB メソッドを示します。

表3-2 セッション EJB メソッド

メソッド

説明

public void ejbActivate() throws javax.ejb.EJBException, java.rmi.RemoteException

インスタンスをアクティブ化する。

public void ejbPassivate() throws javax.ejb.EJBException, java.rmi.RemoteException

インスタンスをパッシブにする。

public void ejbRemove() throws javax.ejb.EJBException, java.rmi.RemoteException

インスタンスを削除する。

public void setSessionContext(javax.ejb.SessionContext ctx) throws javax.ejb.EJBException, java.rmi.RemoteException

関連付けられたセッション コンテキストを設定する。

メソッド パラメータの定義は次のとおり。

ctx −セッション コンテキストを示す
javax.ejb.SessionContext オブジェクト。


 

各メソッドの詳細については、javax.ejb.SessionBean Javadoc を参照してください。

プラグイン サンプルから抜粋した次のコード リストは、javax.ejb.SessionBean インタフェースとそのメソッドを実装する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SamplePluginBean.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 3-1 セッション EJB インタフェースの実装

package com.bea.wlpi.tour.po.plugin;

import com.bea.wlpi.common.VersionInfo;
import com.bea.wlpi.common.plugin.*;
import com.bea.wlpi.common.plugin.PluginData;
import com.bea.wlpi.server.plugin.InstanceNotification;
import com.bea.wlpi.server.plugin.Plugin;
import com.bea.wlpi.server.plugin.PluginManagerCfg;
import com.bea.wlpi.server.plugin.PluginManagerCfgHome;
import com.bea.wlpi.server.plugin.TaskNotification;
import com.bea.wlpi.server.plugin.TemplateDefinitionNotification;
import com.bea.wlpi.server.plugin.TemplateNotification;
import java.lang.reflect.Constructor;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.Locale;
import java.net.URL;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.io.*
/**
* @homeInterface com.bea.wlpi.server.plugin.PluginHome
* @remoteInterface com.bea.testplugin.SamplePlugin
* @statemode Stateless
*/
public class SamplePluginBean implements SessionBean {
private SessionContext ctx;
private final static String PLUGIN_MANAGER_CFG_HOME =
"java:comp/env/ejb/PluginManagerCfg";
private static byte[] ICON_BYTE_ARRAY;

// javax.ejb.SessionBean を実装

public void ejbActivate() {
}
    // javax.ejb.SessionBean を実装

public void ejbRemove() {
}

// javax.ejb.SessionBean を実装

public void ejbPassivate() {
}

// javax.ejb.SessionBean を実装

public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
.
.
.

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

 


プラグイン ホーム インタフェース

ホーム インタフェースは、ユーザのために BPM プラグイン フレームワークにより定義されます。com.bea.wlpi.server.plugin.PluginHome インタフェースは、javax.ejb.EJBHome インタフェースを拡張し、すべてのプラグインのホーム インタフェースを定義します。

次の表で、PluginHome ホーム インタフェースにより定義されるメソッドについて説明します。

表3-3 ホーム インタフェース メソッド

メソッド

説明

public com.bea.wlpi.server.plugin.Plugin create() throws java.rmi.RemoteException java.rmi.RemoteException

リモート プラグイン オブジェクト インタフェースを作成する。

imageStreamToByteArray() メソッドを com.bea.wlpi.common.plugin.InfoObject に対して使用することにより、WebLogic Integration Studio インタフェース ビューのためのカスタム プラグイン アイコンを設定することもできる。例を示す。

ICON_BYTE_ARRAY = InfoObject.imageStreamToByteArray(
getClass().getResourceAsStream(
"image")
);

この例では、image は、カスタム プラグイン アイコンを指定する。imageStreamToByteArray() メソッドの詳細については、InfoObject オブジェクトを参照。

特定のプラグイン コンポーネントのための値オブジェクトを作成する際、インタフェース ビューが有効なときにプラグイン コンポーネントを表わすために Studio により使用されるアイコンを指定できる。詳細については、プラグイン値オブジェクトの定義を参照。

このメソッドは、com.bea.wlpi.server.plugin.Plugin オブジェクトを返す。

Studio でインタフェース ビューを有効にする方法については、『WebLogic Integration Studio ユーザーズ ガイド』の「Studio インタフェースの使用法」を参照。


 

ホーム インタフェースの詳細については、com.bea.wlpi.server.plugin.PluginHome Javadoc を参照してください。

プラグイン サンプルから抜粋した次のコード リストは、ホーム インタフェースで宣言される 1 つの create() メソッドのための ejbCreate() メソッドを実装し、Studio インタフェース ビューのためのカスタム プラグイン アイコンを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SamplePluginBean.java ファイルから取り出したものです。

コード リスト 3-2 ホーム インタフェース メソッドの実装

    // javax.ejb.SessionBean を実装

public void ejbCreate() throws CreateException {
try {
ICON_BYTE_ARRAY = InfoObject.imageStreamToByteArray(
getClass().getResourceAsStream("Sample.gif"));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

 


プラグイン リモート インタフェース

リモート インタフェースは、BPM プラグイン フレームワークにより定義されます。com.bea.wlpi.server.plugin.Plugin インタフェースは、javax.ejb.EJBObject インタフェースを拡張し、すべてのプラグインのリモート インタフェースを定義します。

プラグイン セッション EJB を定義する場合、Plugin リモート インタフェースとそのメソッドを実装する必要があります。

Plugin リモート インタフェースは、次のカテゴリのメソッドを定義します。

次の節では、実装する必要のある Plugin リモート インタフェースをカテゴリ別に説明します。

注意: リモート インタフェース メソッドの内容は、空のままにすること、あるいは単にログに対するメッセージを戻すことができますが、必ず実装します。

ライフサイクル管理メソッド

次の表に、実装する必要のあるリモート インタフェースにより定義されるライフサイクル管理メソッドを示します。BPM プラグイン ライフサイクルの詳細については、ライフサイクル タスクの管理を参照してください。

表3-4 リモート インタフェース ライフサイクル管理メソッド

メソッド

説明

public void load(
com.bea.wlpi.common.plugin.PluginObject
config) throws java.rmi.RemoteException, com.bea.wlip.common.plugin.PluginException

指定されたコンフィグレーションを使用してプラグインをロードし、指定されている場合には、そのプラグインを通知リスナとして登録する。プラグインを通知リスナとして登録する方法については、プラグイン通知の使い方を参照。

メソッド パラメータの定義は次のとおり。

config −com.bea.wlpi.common.plugin.ConfigurationInfo オブジェクト。これは、com.bea.wlpi.common.plugin.PluginObject オブジェクトにより提供され、プラグイン コンフィグレーション データを指定する。

注意: プラグインは、クラスタのプライベート ステートを、必要に応じてクラスタ全体に複製する役割を担当します。

public void unload() throws java.rmi.RemoteException, com.bea.wlip.common.plugin.PluginException

プラグインをアンロードし、必要であれば、通知リスナとしての登録を解除する。プラグインを通知リスナとして登録および登録解除する方法については、プラグイン通知の使い方を参照。


 

リモート インタフェース ライフサイクルを管理するメソッドの詳細については、com.bea.wlpi.server.plugin.Plugin Javadoc を参照してください。

通知メソッド

次の表に、実装する必要のあるリモート インタフェースにより定義される通知メソッドを定義します。

注意: 通知を受信するには、プラグインが通知リスナとして登録されている必要があります。詳細については、プラグイン通知の使い方を参照してください。

表3-5 リモート インタフェース通知メソッド

メソッド

説明

public void instanceChanged(
com.bea.wlpi.common.plugin.InstanceNotification
notify) throws java.rmi.RemoteException, com.bea.wlpi.common.plugin.PluginException

ワークフロー インスタンスに対する変更をプラグインに通知する。

メソッド パラメータの定義は次のとおり。

notify −ワークフロー インスタンス変更を示す
com.bea.wlpi.server.plugin.InstanceNotification オブジェクト。

public void taskChanged(
com.bea.wlpi.common.plugin.TaskNotification
notify) throws java.rmi.RemoteException, com.bea.wlpi.common.plugin.PluginException

タスク インスタンスに対する変更をプラグインに通知する。

メソッド パラメータの定義は次のとおり。

notify −タスク変更を示す
com.bea.wlpi.server.plugin.TaskNotification オブジェクト。

public void templateChanged(
com.bea.wlpi.common.plugin.TemplateNotification
notify) throws java.rmi.RemoteException, com.bea.wlpi.common.plugin.PluginException

テンプレートに対する変更をプラグインに通知する。

メソッド パラメータの定義は次のとおり。

notify −テンプレート変更を示す
com.bea.wlpi.server.plugin.TemplateNotification オブジェクト。

public void templateDefinitionChanged(
com.bea.wlpi.common.plugin.TemplateDefinitionNotification
notify) throws java.rmi.RemoteException, com.bea.wliwlpip.common.plugin.PluginException

テンプレート定義に対する変更をプラグインに通知する。

メソッド パラメータの定義は次のとおり。

notify −テンプレート定義変更を示す
com.bea.wlpi.server.plugin.TemplateDefinitionNotification オブジェクト。


 

リモート インタフェース通知メソッドの詳細については、com.bea.wlpi.server.plugin.Plugin Javadoc を参照してください。

プラグイン情報メソッド

次の表に、実装する必要のあるリモート インタフェースにより定義されるプラグイン情報メソッドを示します。

表3-6 リモート インタフェース プラグイン情報メソッド

メソッド

説明

public java.lang.Class classForName(
java.lang.String
className) throws java.rmi.RemoteException, java.lang.ClassNotFoundException, com.bea.wlpi.common.plugin.PluginException

プラグイン提供のメタデータ オブジェクトの 1 つを呼び出すことにより、プラグイン定義されたクラスをインスタンス化する。

メソッド パラメータの定義は次のとおり。

className −インスタンス化する Java クラスの完全修飾名を示す
java.lang.String オブジェクト。

このメソッドは、指定された名前を持つクラスを返す。

public com.bea.wlpi.common.plugin.PluginDependency[] getDependencies() throws java.rmi.RemoteException

現在のプラグインが依存しているプラグインを取得する。

Plug-in Manager は、現在のプラグインのロードを試行する前に、すべての依存プラグインがロードされていることを確認する。

このメソッドは、com.bea.wlpi.common.plugin.PluginDependency オブジェクトのリストを返す。各プラグインの依存関係に関する情報にアクセスするには、PluginCapabilitiesInfo オブジェクトに説明されている PluginDependency オブジェクト メソッドを使用する。

public java.lang.String getName() throws java.rmi.RemoteException

現在のプラグインのグローバルにユニークな名前を逆引き DNS フォーマットで取得する。

注意: 逆引き DNS フォーマットは、グローバル ネームスペースの衝突を防止します。

このメソッドは、ユニークなプラグイン名を示す java.lang.String オブジェクトを返す。

public com.bea.wlpi.common.plugin.PluginCapabilitiesInfo getPluginCapabilitiesInfo(
java.util.Locale
lc, com.bea.wlpi.common.plugin.CategoryInfo info) throws java.rmi.RemoteException

プラグイン機能に関する詳細情報を取得する。

次の場合にこのメソッドを使用する。

メソッド パラメータの定義は次のとおり。

このメソッドは、要求された場合、アクション ツリーに挿入すべき新しいカテゴリとアクションの入った com.bea.wlpi.common.plugin.PluginCapabilitiesInfo オブジェクトを返す。プラグイン機能に関する情報にアクセスするには、PluginCapabilitiesInfo オブジェクトに説明されている PluginCapabilitiesInfo オブジェクト メソッドを使用する。

public com.bea.wlpi.common.plugin.PlugInfo getPluginInfo(java.util.Locale lc) throws java.rmi.RemoteException

プラグインに関する基本情報を取得する。

メソッド パラメータの定義は次のとおり。

lc −表示文字列をローカライズするロケールを示す
java.util.Locale オブジェクト。

このメソッドは、com.bea.wlpi.common.plugin.PluginInfo オブジェクトを返す。プラグインに関する情報にアクセスするには、PluginInfo オブジェクトに説明されている PluginInfo オブジェクト メソッドを使用する。

public com.bea.wlpi.common.VersionInfo getVersion() throws java.rmi.RemoteException

プラグイン バージョン情報を取得する。

このメソッドは、com.bea.wlpi.common.VersionInfo オブジェクトを返す。プラグインに関する情報にアクセスするには、『BPM クライアント アプリケーション プログラミング ガイド』の「値オブジェクトのまとめ」の「VersionInfo オブジェクト」に説明されている VersionInfo オブジェクト メソッドを使用する。

public void setConfiguration(com.bea.wlpi.common.plugin.PluginObject config) throws java.rmi.RemoteException

プラグイン コンフィグレーション情報を設定する。

メソッド パラメータの定義は次のとおり。

config −プラグイン コンフィグレーション情報を示す
com.bea.wlpi.common.plugin.PluginInfo オブジェクト。

詳細については、プラグインの管理を参照。


 

リモート インタフェース プラグイン情報メソッドの詳細については、com.bea.wlpi.server.plugin.Plugin Javadoc を参照してください。

オブジェクト作成メソッド

次の表に、実装する必要のあるリモート インタフェースにより定義されるオブジェクト作成メソッドを定義します。

表3-7 リモート インタフェース オブジェクト作成メソッド

メソッド

説明

public java.lang.Object getObject(
java.util.Locale
lc,
java.lang.String
className) throws java.rmi.RemoteException, java.lang.ClassNotFoundException, com.bea.wlip.common.plugin.PluginException

プラグイン提供のメタデータ オブジェクトの 1 つを呼び出すことにより、プラグイン定義されたオブジェクトを取得する。

メソッド パラメータの定義は次のとおり。

このメソッドは、名前付きクラスの java.lang.Object インスタンスを返す。


 

リモート インタフェース オブジェクト作成メソッドの詳細については、com.bea.wlpi.server.plugin.Plugin Javadoc を参照してください。

リモート インタフェースの実装例

プラグイン サンプルから抜粋した次のコード リストは、リモート インタフェースとそのメソッドを実装する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SamplePluginBean.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 3-3 リモート インタフェースの実装

    // プラグインの実装

/**
* プラグインをロードする。プラグインは、この時点で、
* 各種システム イベントへの関心を登録する必要がある
* @param pluginData プラグイン コンフィグレーション データ
* @see PluginManager#addTemplateListener
* @see PluginManager#addTemplateDefinitionListener
* @see PluginManager#addInstanceListener
* @see PluginManager#addTaskListener
* @throws PluginException
*/
public void load(PluginObject pluginData) throws PluginException {

log("load called");
// このブロックによる通知のサブスクライブを有効にする

/*
PluginManagerCfg pm = null;
try {
pm = getPluginManagerCfg();
Plugin plugin = (Plugin)ctx.getEJBObject();
pm.addInstanceListener(plugin, PluginConstants.EVENT_NOTIFICATION_ALL);
pm.addTaskListener(plugin, PluginConstants.EVENT_NOTIFICATION_ALL);
pm.addTemplateDefinitionListener(plugin, PluginConstants.EVENT_NOTIFICATION_ALL);
pm.addTemplateListener(plugin, PluginConstants.EVENT_NOTIFICATION_ALL);
} catch (Exception e) {
e.printStackTrace();
throw new PluginException(SamplePluginConstants.PLUGIN_NAME, "Unable to get PluginManager");
} finally {
try {
if (pm != null)
pm.remove();
} catch (Exception e) {
}
}
*/
log("loaded");
}

/**
* プラグインをアンロードする。プラグイン フレームワークは、イベント通知を
* サブスクライブしていた場合、プラグインを登録解除する
*/
public void unload() {
log("unload called");
}

public PluginDependency[] getDependencies() {

log("getDependencies called");

return null;
}

public String getName() {
return SamplePluginConstants.PLUGIN_NAME;
}

public VersionInfo getVersion() {
return SamplePluginConstants.PLUGIN_VERSION;
}

/**
* プラグインに関する詳細情報を返す
* @param lc 表示文字列をローカライズするロケール
* @return プラグインに関する詳細情報
*/
public PluginInfo getPluginInfo(Locale lc) {

log("getPluginInfo called");

return createPluginInfo(lc);
}

public void setConfiguration(PluginObject config) throws PluginException {
}

/**
* プラグイン機能の詳しい説明を返す。新しいサブカテゴリとアクションを
* 追加するには、プラグインは、渡された<code>info</code> パラメータを
* 介して渡されるカテゴリ ID を使用して、親カテゴリ、および
* 新しいカテゴリ ID として {@link ActionCategoryInfo#ID_PLUGIN} を識別する必要がある
* PluginManager は、この呼び出しにより返される CategoryInfo 配列を
* 現在の構造(<code>info</code> パラメータにより渡される)と結合し、
* {@link ActionCategoryInfo#ID_PLUGIN} への参照を、新たに割り当てられた
* ユニークなカテゴリ ID に置き換える。この事前定義されたカテゴリは、次の ID を持つ
* {@link ActionCategoryInfo#ID_TASK}, {@link ActionCategoryInfo#ID_WORKFLOW},
* {@link ActionCategoryInfo#ID_INTEGRATION}, {@link ActionCategoryInfo#ID_MISCELLANEOUS},
* {@link ActionCategoryInfo#ID_EXCEPTION}.
     * @param lc 表示文字列をローカライズするロケール
* @param info 既存のアクション カテゴリ ツリー。事前定義された
* カテゴリとアクション、およびプラグイン定義されたカテゴリとアクション
* (以前にロードされたプラグインにより)の両方を含む
* @return ツリーに挿入する新しいカテゴリとアクション
*/
public PluginCapabilitiesInfo getPluginCapabilitiesInfo(Locale lc,
CategoryInfo[] info) {

PluginInfo pi;
FieldInfo orderFieldInfo;
FieldInfo confirmFieldInfo;
FieldInfo[] fieldInfo;
FunctionInfo fi;
FunctionInfo[] functionInfo;
StartInfo si;
StartInfo[] startInfo;
EventInfo ei;
EventInfo[] eventInfo;
SampleBundle bundle = new SampleBundle(lc);

log("getPluginCapabilities called");

pi = createPluginInfo(lc);
orderFieldInfo =
new FieldInfo(SamplePluginConstants.PLUGIN_NAME, 3,
bundle.getString("orderFieldName"),
bundle.getString("orderFieldDesc"),
SamplePluginConstants.ORDER_FIELD_CLASSES, false);
confirmFieldInfo =
new FieldInfo(SamplePluginConstants.PLUGIN_NAME, 4,
bundle.getString("confirmFieldName"),
bundle.getString("confirmFieldDesc"),
SamplePluginConstants.CONFIRM_FIELD_CLASSES, false);
fieldInfo = new FieldInfo[]{ orderFieldInfo, confirmFieldInfo };
ei = new EventInfo(SamplePluginConstants.PLUGIN_NAME, 6,
bundle.getString("confirmOrderName"),
bundle.getString("confirmOrderDesc"), ICON_BYTE_ARRAY,
SamplePluginConstants.EVENT_CLASSES,
confirmFieldInfo);
eventInfo = new EventInfo[]{ ei };
fi = new FunctionInfo(SamplePluginConstants.PLUGIN_NAME, 7,
bundle.getString("calcTotalName"),
bundle.getString("calcTotalDesc"),
bundle.getString("calcTotalHint"),
SamplePluginConstants.FUNCTION_CLASSES, 3, 3);
functionInfo = new FunctionInfo[]{ fi };
si = new StartInfo(SamplePluginConstants.PLUGIN_NAME, 5,
bundle.getString("startOrderName"),
                           bundle.getString("startOrderDesc"), ICON_BYTE_ARRAY,
SamplePluginConstants.START_CLASSES, orderFieldInfo);
startInfo = new StartInfo[]{ si };

PluginCapabilitiesInfo pci = new PluginCapabilitiesInfo(pi,
getCategoryInfo(bundle), eventInfo,
fieldInfo, functionInfo, startInfo,
null, null, null, null, null);

return pci;
}

/**
* プラグイン定義クラスを返す。呼び出し側は、プラグイン提供の
* メタデータ オブジェクトの 1 つを呼び出すことによりクラス名を検索する
* @param className インスタンス化する Java クラスの完全修飾名
* @return 指定された名前を持つクラス
* @throws ClassNotFoundException プラグインがクラスをロードできなかった場合
* @see ActionInfo
* @see EventInfo
* @see FunctionInfo
* @see FieldInfo
* @see PluginInfo
* @see StartInfo
* @see DoneInfo
* @see VariableTypeInfo
* @see TemplatePropertiesInfo
* @see TemplateDefinitionPropertiesInfo
* @throws PluginException
*/
public Class classForName(String className)
throws ClassNotFoundException, PluginException {

log("classForName called");

return Class.forName(className);
}

/**
* プラグイン定義されたオブジェクトを返す。呼び出し側は、プラグイン提供のメタデータ オブジェクトの
* メタデータ オブジェクトの 1 つを呼び出すことによりクラス名を検索する
* @param lc 表示文字列をローカライズするロケール
* @param className インスタンス化する Java クラスの完全修飾名
* @return
* @see ActionInfo
* @see EventInfo
* @see FunctionInfo
* @see FieldInfo
* @see PluginInfo
     * @see StartInfo
* @see DoneInfo
* @see VariableTypeInfo
* @see TemplateInfo
* @see TemplateDefinitionInfo
* @throws ClassNotFoundException
* @throws PluginException
*/
public Object getObject(Locale lc, String className)
throws ClassNotFoundException, PluginException {

log("getObject called with class name " + className);

try {
Class cls = Class.forName(className);
Object obj;

try {
// Locale オブジェクトを取得する ctor があるかどうかを確認する
Class[] paramType = new Class[]{ lc.getClass() };
Constructor ctor = cls.getConstructor(paramType);
Object[] param = new Object[]{ lc };

obj = ctor.newInstance(param);

return (obj);
} catch (Exception e) {
}

// ctor がロケールを取得しない場合、引数なしの ctor を呼び出す
return Class.forName(className).newInstance();
} catch (InstantiationException ie) {
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"Unable to instantiate class: " + ie);
} catch (IllegalAccessException iae) {
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"Unable to instantiate class: " + iae);
}
}

/**
* テンプレートでの変更をプラグインに通知する
* @param e 変更を示すイベント オブジェクト
*/
public void templateChanged(TemplateNotification e) {
log("templateChanged called");
}

/**
     * テンプレート定義での変更をプラグインに通知する
* @param e 変更を示すイベント オブジェクト
*/
public void templateDefinitionChanged(TemplateDefinitionNotification e) {
log("templateDefinitionChanged called");
}

/**
* ワークフロー インスタンスでの変更をプラグインに通知する
* @param e 変更を示すイベント オブジェクト
*/
public void instanceChanged(InstanceNotification e) {
log("instanceChanged called");
}

/**
* タスク インスタンスでの変更をプラグインに通知する
* @param e 変更を示すイベント オブジェクト
*/
public void taskChanged(TaskNotification e) {
log("taskChanged called");
}
    private PluginInfo createPluginInfo(Locale lc) {

HelpSetInfo helpSet;
PluginInfo pi;
SampleBundle bundle = new SampleBundle(lc);
String name = bundle.getString("pluginName");
String desc = bundle.getString("pluginDesc");
String helpName = bundle.getString("helpName");
String helpDesc = bundle.getString("helpDesc");

helpSet = new HelpSetInfo(SamplePluginConstants.PLUGIN_NAME, helpName,
helpDesc,
new String[]{ "htmlhelp/Sample", "index" },
HelpSetInfo.HELP_HTML);
pi = new PluginInfo(SamplePluginConstants.PLUGIN_NAME, name, desc, lc,
SamplePluginConstants.VENDOR_NAME,
SamplePluginConstants.VENDOR_URL,
SamplePluginConstants.PLUGIN_VERSION,
SamplePluginConstants.PLUGIN_FRAMEWORK_VERSION,
null, null, helpSet);

return pi;
}

// これらのオブジェクトは毎回作成し直す必要がある
// その理由は、結果の所有権を放棄するので、プラグイン フレームワークにより
// 各項目にシステム ID が割り当てられるからである
// 再割り当てにより、IllegalStateException が生成される
private CategoryInfo[] getCategoryInfo(SampleBundle bundle) {

ActionInfo checkInventoryAction =
new ActionInfo(SamplePluginConstants.PLUGIN_NAME, 1,
bundle.getString("checkInventoryName"),
bundle.getString("checkInventoryDesc"), ICON_BYTE_ARRAY,
ActionCategoryInfo.ID_NEW,
ActionInfo.ACTION_STATE_ALL,
SamplePluginConstants.CHECKINV_CLASSES);
ActionInfo sendConfirmAction =
new ActionInfo(SamplePluginConstants.PLUGIN_NAME, 2,
bundle.getString("sendConfirmName"),
bundle.getString("sendConfirmDesc"), ICON_BYTE_ARRAY,
ActionCategoryInfo.ID_NEW,
ActionInfo.ACTION_STATE_ALL,
SamplePluginConstants.SENDCONF_CLASSES);
ActionCategoryInfo[] actions =
new ActionCategoryInfo[]{ checkInventoryAction, sendConfirmAction };
CategoryInfo[] catInfo =
new CategoryInfo[]{ new CategoryInfo(SamplePluginConstants.PLUGIN_NAME,
0, bundle.getString("catName"),
bundle.getString("catDesc"),
ActionCategoryInfo.ID_NEW,
actions) };

return catInfo;
}

private void log(String msg) {
System.out.println("SamplePlugin: " + msg);
}

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

 

ページの先頭 前 次