jBPMの状態をJRubyで転がしてみる
id:n_shuyoさんの情報を見てたらJRubyを試したくなって、せっかくなので簡単なjBPMのプロセスを定義して、そのプロセスをjirbで対話で状態を遷移してみた。思いのほか簡単。JRuby1.0.3をインストール.JRUBY_HOMEとPATHをセット。
んで次に簡単に試すのにJava側でFactoryクラスを用意して単純なプロセス定義からプロセスインスタンスの生成を行なうようにした。クラスはこんな感じ。
public class ProcessInstanceFactory { public static ProcessInstance get() { ProcessDefinition pd = ProcessDefinition.parseXmlString( "<process-definition>" + " <start-state name='start'>" + " <transition to='a' />" + " </start-state>" + " <state name='a'>" + " <transition to='b' />" + " </state>" + " <state name='b'>" + " <transition to='c' />" + " </state>" + " <state name='c'>" + " <transition to='end' />" + " </state>" + " <end-state name='end'/>" + "</process-definition>" ); ProcessInstance pi = new ProcessInstance( pd ); return pi; } }
でこれだけでjarにする。jBPM.cfg.xmlを空設定で用意してそれもjarにしまっとく。んでこのjarとjBPMの関係ライブラリのjbpm-jpdl.jar,commons-logging.jar,dom4j.jarにclasspathを通して、「jirb」とコマンドプロンプトでポチっとな。
irb(main):001:0> require 'java' => false irb(main):002:0> import 'com.waki.ProcessInstanceFactory' => ["com.waki.ProcessInstanceFactory"] irb(main):003:0> pi = ProcessInstanceFactory.get 2008/02/15 2:24:51 org.jbpm.JbpmConfiguration getInstance 情報: using jbpm configuration resource 'jbpm.cfg.xml' 2008/02/15 2:24:52 org.jbpm.persistence.db.StaleObjectLogConfigurer hideStaleObj ectExceptions 情報: stale object exceptions will be hidden from logging => #<Java::OrgJbpmGraphExe::ProcessInstance:0x1493102 @java_object=org.jbpm.grap h.exe.ProcessInstance@302e67>
ここまででpiの変数はjavaで用意したプロセスインスタンスを参照しています.書かないけど、pi.methodsとうつとメソッドがものすごく表示された。リフレクション操作は簡単だなぁ。。。
で、実際に状態を遷移させていく。
irb(main):004:0> pi.signal => nil irb(main):005:0> pi.rootToken.node.to_s => "State(a)" irb(main):006:0> pi.signal => nil irb(main):007:0> pi.rootToken.node.to_s => "State(b)" irb(main):008:0> pi.signal => nil irb(main):009:0> pi.rootToken.node.to_s => "State(c)" irb(main):010:0> pi.signal => nil irb(main):011:0> pi.rootToken.node.to_s => "EndState(end)"
signalで遷移させてnodeの中身が遷移しているのがよくわかる。って感じ。んでもって、JRubyは簡単に試せるのがよくわかった。もうちょっといろいろやってみたいと思う。更に改めて「対話」というものを考えさせられた。うん、いいよ、対話。