3

jBPM ページ [1] のホワイトペーパーによると、jBMP はスタンドアロン アプリで簡単に使用できます。ただし、実際にこれを行う方法に関する情報は見つかりませんでした。jBPM でプロセスを表示する単純な Java アプリ (おそらく SWT を使用) を作成したいと考えています。ユーザーは、jBPM ダイアグラムを変更することで、アプリケーションの動作を変更できるはずです。この目的のために、私が思ういくつかのEclipseコンポーネントも統合する必要があります..これがどのように機能するかについてのアイデアはありますか?

[1] http://www.jboss.com/pdf/jbpm_whitepaper.pdf

4

2 に答える 2

2

はい、jbpm プロセス エンジンを単純な Java プログラムとして完全にスタンドアロンで実行することは可能です。J2EE コンテナは必要ありません。少なくともこれは jbpm 4.4 の場合です。

コード要件に関する限り、

  1. jbpm データベース スキーマを設定する
  2. 次の jar を jbpm 配布ライブラリからアプリケーション クラスパスに追加します。 jar commons-collections.jar jta.jar juel-api.jar juel-engine.jar juel-impl.jar mail.jar および使用している DB に必要な JDBC ドライバー。
  3. スタンドアロン クラスは次のようになります。

    package test.ayusman;

    import java.util.HashMap;
    import java.util.Map;

    import org.jbpm.api.Configuration;
    import org.jbpm.api.ExecutionService;
    import org.jbpm.api.ProcessEngine;
    import org.jbpm.api.ProcessInstance;
    import org.jbpm.api.RepositoryService;

    public class ProcessDeployer {

        // Create a process engine that can be used for all other work...
        // ProcessEngine is starting point for all other application.
        private static ProcessEngine jbpmProcessEngine = new Configuration()
                .setResource("jbpm.cfg.xml").buildProcessEngine();
        // private static Logger logger = Logger.getLogger(JBPMDao.class);

        private static RepositoryService repositoryService = null;
        private static ExecutionService executionService = null;
        private static ProcessInstance pi = null;
        private static String processInstanceState;
        private static String processInstanceId;


        public static void main(String[] args) {
            try {

                ProcessDeployer ejm = new ProcessDeployer();

                //Start the process...
                ejm.startProcess();

                //Analyze process... just a small fancy method
                ejm.analyzeProcess();


            } catch (Exception e) {
                e.printStackTrace();
            }

        }// End of main()


        void startProcess() throws Exception
        {

            repositoryService = jbpmProcessEngine.getRepositoryService();
            executionService =  jbpmProcessEngine.getExecutionService();

            //NOTE: The example assumes that the process definition file name is: your_process.jpdl.xml
            processInstanceId = repositoryService.createDeployment().addResourceFromClasspath("your_process.jpdl.xml").deploy();             

            //NOTE: The jpdl file has key name as "Java"
            pi = executionService.startProcessInstanceByKey("Java");  

            System.out.println("Obtained processInstanceId is: "+processInstanceId);             
        }

        void analyzeProcess() throws Exception
        {
            processInstanceState = pi.getState();
            System.out.println("processInstanceState is: "+processInstanceState);
            System.out.println("processInstanceId is: "+processInstanceId);
        }


    }// End of class ProcessDeployer
  1. SWT アプリケーションでプロセス エンジンを実行する場合、プロセス エンジンは SWT と同じ JVM に存在するため、十分なスペースを割り当てるようにしてください。

お役に立てれば :-)

于 2011-05-07T08:52:55.377 に答える
2

Roamflowは、スタンドアロンの jBPM Eclipse/RCP ベースのビューアー/エディターのように見えるため、開始する前に、Roamflowがニーズを満たしているかどうかを確認することもできます。

それ以外の場合は、Eclipse プラグインの作成方法を知っているか、ほとんどの Eclipse プラグイン/SWT 開発のニーズに役立つと思われる本「Eclipse Building Commercial-Quality Plug-ins」(Eclipse と Addison-Wesley が発行) を入手する必要があります。また、座ってテスト アプリを作成するつもりはありません。いずれにせよ、基礎を理解する必要があります。

  1. スタンドアロンとは、適切なライブラリを使用して古い JVM で実行することを意味します。J2EE コンテナーにデプロイしたり、Web 経由で表示したりする必要があります。

  2. jBPM eclipse プラグインのソース コードを見てください。探している機能が含まれています。jBPM を表示することに基づく SWT/eclipse。これには、jBPM がインストールする可能性のある拡張ポイントのチェックが含まれます。これを使用して、Eclipse プラグインをすばやくビルドできます。例: jBPM エディターのコードは、ここにあります。もしくは連載の仕方、こちら、再利用。

  3. これが重要な SWT/描画です。重要な行は、jBPM を SWT のもの「g = new SWTGraphics(gc);」に変換しています。これは、jBPM モデルから画像を生成するようです。

    protected void writeImage() {           
    SWTGraphics g = null;
    GC gc = null;
    Image image = null;
    LayerManager lm = (LayerManager)getGraphicalViewer().getEditPartRegistry().get(LayerManager.ID);
    IFigure figure = lm.getLayer(LayerConstants.PRINTABLE_LAYERS);
    
    try {
        Rectangle r = figure.getBounds();
        image = new Image(Display.getDefault(), r.width, r.height);
        gc = new GC(image);
        g = new SWTGraphics(gc);
        g.translate(r.x * -1, r.y * -1);
        figure.paint(g);
        ImageLoader imageLoader = new ImageLoader();
        imageLoader.data = new ImageData[] {image.getImageData()};
        imageLoader.save(getImageSavePath(), SWT.IMAGE_JPEG);
        refreshProcessFolder();
    
    } finally {
        //SNIP
    }
    }
    
  4. この場合、ここにあるプラグインの plugin.xml、src から学びます。たとえば、これは eclipse にビューを追加する jBPM です。

    point="org.eclipse.ui.views" ... view class="org.jboss.tools.flow.jpdl4.view.DetailsView"...
    

    これは、「ビュー」を立ち上げているように見えるので、コピーしたい拡張機能の 1 つかもしれません。これは、Eclipse ベースのアプリの構成要素をどのように構築しているかを理解するのに役立ちます。JBPM プラグインに開発者バージョンがインストールされている場合は、ワークスペースでこれらのクラスを検索し、ソース コードを表示できます。

  5. モデル、ビュー/ダイアグラムの動作、さまざまな編集/描画部分など、GMF (グラフィカル モデリング フレームワーク) として構築されたアプリ パーツをハックする必要があるかどうかを判断します。あなたも持っていない限り、これを台無しにしないでください。ただし、GMF プラグインを理解したり、例を調べたりすると、特に編集が必要な場合に、どの jBPM プラグインを使用する必要があるかを理解するのに役立ちます。

  6. jBPM プロジェクトからどの部分 (プラグイン/プラグレット) を再利用できるかを覚えておいてください。Eclipse プラグインを RCP またはリッチ クライアントとしてビルドすることをお勧めします (投稿ごとに、jBPM には現在 RCP がないことに注意してください)。これにより、Eclipse ツールの知識を持たない人に簡単にデプロイできるように、Eclipse スタンドアロン アプリケーションとして使用できます。 .

これで正しい道に進むことができたかどうか教えてください。

于 2009-06-07T19:50:46.843 に答える