سؤال

وفقا ل WhitePaper على صفحة JBPM [1]، يمكن استخدام JBMP بسهولة في تطبيق مستقل. ومع ذلك، لم أتمكن من العثور على أي معلومات حول كيفية القيام بذلك بالفعل. أريد إنشاء تطبيق Java بسيط (ربما مع SWT)، والذي يعرض عملية مع JBPM. يجب أن يكون المستخدم قادرا على تعديل سلوك التطبيقات، عن طريق تعديل مخطط JBPM. لهذا الغرض، يجب أن أدمج بعض مكونات الكسوف وأعتقد .. أي أفكار كيف يعمل هذا؟

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

هل كانت مفيدة؟

المحلول

قبل أن تبدأ، قد ترغب أيضا في معرفة ما إذا كان roamflow. تلبي احتياجاتك كما يبدو أن Eclipse jbpm / RCP المستند إلى JBPM المستقل.

وإلا يجب أن تعرف كيفية بناء المكونات الإضافية الكسيفية، أو احصل على الكتاب الذي وجدته مفيدا لمعظم احتياجات تنمية المساعد / SWT الكسوف، "Eclipse Building Building Plug-INS"، نشرته Eclipse and Addison-Wesley. أيضا، لن أجلس واكتب لك تطبيق اختبار، تحتاج إلى فهم الأساسيات على أي حال.

  1. من خلال الوقوف وحدها تعني تشغيل أي JVM قديم مع المكتبات المناسبة. يجب نشرها في حاوية J2EE، التي ينظر إليها من خلال الويب، إلخ.

  2. إلقاء نظرة على التعليمات البرمجية المصدر لمكونات Eclipse JBPM لأنه يحتوي على الميزات التي تبحث عنها أليس كذلك؟ SWT / Eclipse بناء على ذلك يعرض JBPM. يتضمن ذلك التحقق من وجود نقاط التمديد التي قد تقوم بها JBPM بتثبيتها والتي يمكنك استخدامها لإنشاء المكون الإضافي الخاص بك باستخدام برنامج Eclipse الخاص بك بسرعة. على سبيل المثال: رمز محرر JBPM، هنا. وبعد أو كيفية تسلسل، هنا, ، إعادة استخدام.

  3. فيما يلي SWT / الرسم الحاسم، يتحول الخط الحرج إلى JBPM في وشيء SWT "G = 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 هنا في هذه الحالة. على سبيل المثال، هنا هو JBPM مضيفا أنه عرض ل Eclipse:

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

    هذه قد يكون امتدادا واحدا تريد نسخه كما يبدو أنه يقف "عرض". هذا سيساعدك على فهم كيفية إنشاء قطع التطبيق القائم على Eclipse. يمكنك البحث عن هذه الفئات في مساحة عملك وعرض التعليمات البرمجية المصدر إذا قمت بتثبيت إصدارات المطور على المكونات الإضافية JBPM.

  5. حدد ما إذا كنت بحاجة إلى اختراق أجزاء التطبيق التي تم بناؤها كأشياء GMF (إطار النمذجة الرسومية)، مثل نموذج أو سلوك العرض / الرسم البياني وأجزاء التعديل / الرسم المختلفة. لا تعبث مع هذا إلا إذا كان لديك أيضا. ومع ذلك، فهم موظفة GMF الإضافية أو البحث عن أن الأمثلة ستساعدك على فهم ما قد تحتاج إلى اتصالات JBPM التي قد تحتاجها للاستخدام، خاصة إذا كانت هناك حاجة إلى التحرير.

  6. لفة القطع في مكون إضافي، تذكر إعادة استخدام القطع (الإضافات / البرنامجان الإضافية) يمكنك من مشروع JBPM. قد تكون متأكدا من إنشاء البرنامج المساعد Eclipse الخاص بك كعميل RCP أو ريتش ... (ملاحظة JBPM ليس لدى RCP حاليا بريد) بحيث يمكن أن يكون كمطلب مستقل Eclipse لنشر أسهل للأشخاص الذين ليس لديهم معرفة أداة Eclipse.

اسمحوا لي أن أعرف إذا كان هذا يجعلك توجهت إلى أسفل المسار الصحيح.

نصائح أخرى

نعم، من الممكن تشغيل محرك عملية JBPM مستقل تماما، كبرنامج Java بسيط. لا حاوية J2EE اللازمة. على الأقل هذا هو الحال مع JBPM 4.4

بقدر ما يذهب متطلبات التعليمات البرمجية،

  1. إعداد مخطط قاعدة بيانات JBPM الخاص بك
  2. أضف الجرار التالية من مكتبة توزيع JBPM إلى تطبيقات ClassPath: Antlr-Runtime.jar Antlr.jar Dom4j.Jar Hibernate-core.jar Javassist.jar JBPM.JAR SLF4J-API.JAR SLF4J-JDK14.JAR SLF4J-LOG4J12. Jar Commons-Collections.jar JTA.JAR JEEL-API.JAR JEEL-ENGORN.JAR JEEL-IMST.JAR MAIL.JAR وبرامج تشغيل JDBC اللازمة ل DB التي تستخدمها.
  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، فإن محرك العملية موجود على نفس JVM مثل SWT، لذلك تأكد من تخصيص مساحة كافية.

أتمنى أن يساعدك هذا :-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top