JBM 3ソースファイルの解読FieldInstantiation実装集合Field
2847 ワード
以前のアプリケーションではノードインイベントでActionHandlerを定義していましたが、Fieldではユーザの検索方法と検索パラメータを定義していて、良いようです^^;しかし、人員検索の方法とパラメータは異なるノードで異なる(方法名、パラメータ個数、パラメータ値)、長期的に考慮すると、人員検索サービスが確認されている場合、人員検索Actionは確認されているため、繰り返し設計する必要はありません.人員検索サービスが現在のニーズを満たすインタフェースを追加できない場合、プロセス定義は必ず新しいバージョンをアップグレードします.人員はActionを探して変更しないことができて、あるいは変更が少ないことができますか?私はできると思います.解決したい問題です.
ユーザが検索するインタフェース、パラメータ、およびパラメータタイプは、反射で解決できます.プロセス定義ActionHandlerのFieldを集合タイプとして定義すると,パラメータタイプが不確定な場合に対応できる.ネットでしばらくぶらぶらしていたが、関連資料が見つからなかった.Jbpmの学習資料は相対的に小さく、多くの問題はソースコードから手をつけるしかなく、ソースコードを見に行くしかなかった.
Instantiatorインタフェースとインプリメンテーションクラスから答えが見つかります.
FieldはListのテストActionHandler
FieldはListのフロー定義部
FieldはMapのテストActionHandler
FieldはMapのプロセス定義部分
processDefinitionからActionHandlerのクラスメンバーまで、jbpmはクラスを反射して動的ロードを実現し、サポートされるタイプが多く、FieldInstantiatorクラスのgetValue(Class type,Element propertyElement)メソッドを表示することができます.アイデアはいいですが、機能は確かに強いので、集合クラスを定義するときに複数のデータ型をサポートすればいいですね(Map).
ユーザが検索するインタフェース、パラメータ、およびパラメータタイプは、反射で解決できます.プロセス定義ActionHandlerのFieldを集合タイプとして定義すると,パラメータタイプが不確定な場合に対応できる.ネットでしばらくぶらぶらしていたが、関連資料が見つからなかった.Jbpmの学習資料は相対的に小さく、多くの問題はソースコードから手をつけるしかなく、ソースコードを見に行くしかなかった.
Instantiatorインタフェースとインプリメンテーションクラスから答えが見つかります.
FieldはListのテストActionHandler
public class FieldOfListTest implements ActionHandler {
private static final long serialVersionUID = 1L;
public List<String> parameters;
public void execute(ExecutionContext executionContext) throws Exception {
System.out.println(parameters);
}
}
FieldはListのフロー定義部
<action class="com.jbpm.test.FieldOfListTest">
<parameters element-type="java.lang.String">
<parameter>admin</parameter>
<parameter>manager</parameter>
</parameters>
</action>
FieldはMapのテストActionHandler
public class FieldOfMapActionTest implements ActionHandler {
private static final long serialVersionUID = 1L;
public Map<String, String> parameters;
public void execute(ExecutionContext executionContext) throws Exception {
if (parameters != null){
Iterator<Entry<String, String>> iterator = parameters.entrySet().iterator();
while(iterator.hasNext()){
Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
FieldはMapのプロセス定義部分
<action class="com.jbpm.test.FieldOfMapTest">
<parameters key-type="java.lang.String" value-type="java.lang.String">
<parameter>
<key>role</key>
<value>ROLE_0</value>
</parameter>
<parameter>
<key>level</key>
<value>LEVEL_0</value>
</parameter>
</parameters>
</action>
processDefinitionからActionHandlerのクラスメンバーまで、jbpmはクラスを反射して動的ロードを実現し、サポートされるタイプが多く、FieldInstantiatorクラスのgetValue(Class type,Element propertyElement)メソッドを表示することができます.アイデアはいいですが、機能は確かに強いので、集合クラスを定義するときに複数のデータ型をサポートすればいいですね(Map