문제

JBPM 페이지 [1]의 백서에 따르면, JBMP는 독립형 앱에서 쉽게 사용할 수 있습니다. 그러나 실제로이 작업을 수행하는 방법에 대한 정보를 찾을 수 없었습니다. JBPM과 함께 프로세스를 표시하는 간단한 Java 앱 (SWT와 함께)을 만들고 싶습니다. 그런 다음 사용자는 JBPM 다이어그램을 수정하여 응용 프로그램 동작을 수정할 수 있어야합니다. 이를 위해 나는 또한 내가 생각하는 몇 가지 일식 구성 요소를 통합해야합니다. 이것이 어떻게 작동하는지 아이디어?

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

도움이 되었습니까?

해결책

시작하기 전에 로밍 플로우 독립형 JBPM Eclipse/RCP 기반 뷰어/편집기 인 것처럼 보이므로 귀하의 요구를 충족시킵니다.

그렇지 않으면 Eclipse 플러그인을 구축하는 방법을 알고 있거나 Eclipse 및 Addison-Wesley가 게시 한 대부분의 Eclipse 플러그인/SWT 개발 요구에 유용한 "Eclipse Building Commercial Quality 플러그인"에 유용한 책을 가져와야합니다. 또한, 나는 앉아서 테스트 앱을 작성하지 않을 것입니다. 어쨌든 기본 사항을 이해해야합니다.

  1. 독립형으로 그들은 올바른 라이브러리가있는 오래된 JVM에서 실행한다는 의미입니다. J2EE 컨테이너, 웹 등을 통해 볼 필요가 있습니다.

  2. JBPM Eclipse 플러그인의 소스 코드를 찾으십시오. 이를 기반으로 한 SWT/Eclipse는 JBPM을 표시합니다. 여기에는 JBPM이 설치할 수있는 확장 지점을 확인하는 것이 포함됩니다. 예 : JBPM 편집기 코드, 여기. 또는 직렬화 방법, 여기, 재사용.

  3. 중요한 SWT/드로잉은 다음과 같습니다. 중요한 라인은 JBPM을 "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. 플러그인의 플러그인 .xml, SRC에 배우십시오 여기 이 경우. 예를 들어, 다음은 Eclipse에보기를 추가하는 JBPM입니다.

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

    이것 "보기"를 견딜 수있는 것처럼 복사하려는 하나의 확장자 일 수 있습니다. 이렇게하면 이클립스 기반 앱의 작품을 어떻게 구성하는지 이해하는 데 도움이됩니다. JBPM 플러그인에 개발자 버전을 설치 한 경우 작업 공간에서 이러한 클래스를 검색하고 소스 코드를 볼 수 있습니다.

  5. 모델,보기/다이어그램의 동작 및 다른 편집/드로잉 부분과 같은 GMF (그래픽 모델링 프레임 워크) 재료로 구축 된 앱 부품을 해킹 해야하는지 결정하십시오. 당신도 가지고 있지 않는 한 이것을 엉망으로 만들지 마십시오. 그러나 GMF 플러그인을 이해하거나 예제가 사용해야 할 JBPM 플러그인 조각, 특히 편집이 필요한 경우 어떤 JBPM 플러그인 조각을 이해하는 데 도움이 될 것입니다.

  6. JBPM 프로젝트에서 할 수있는 조각 (플러그인/플러그 레트)을 재사용하는 것을 기억하면서 조각을 플러그인으로 굴립니다. Eclipse 플러그인을 RCP 또는 Rich Client로 구축 할 수 있습니다 ... (참고 JBPM은 현재 RCP가 없습니다. 게시하다) 이클립스 도구 지식이없는 사람들에게 더 쉽게 배포 할 수 있도록 Eclipse 독립형 응용 프로그램으로 만들 수 있습니다.

이것이 올바른 길로 향하게되면 알려주세요.

다른 팁

예, 간단한 Java 프로그램으로 JBPM 프로세스 엔진을 완전히 독립형으로 실행할 수 있습니다. J2EE 컨테이너가 필요하지 않습니다. 적어도 이것은 JBPM 4.4의 경우입니다

코드 요구 사항이 진행되는 한

  1. JBPM 데이터베이스 스키마를 설정하십시오
  2. JBPM 배포 라이브러리에서 다음 항아리를 응용 프로그램 클래스 경로에 추가하십시오 : antlr-runtime.jar antlr.jar dom4j.jar hibernate-core.jar javassist.jar jbp.jar slf4j-api.jar slf4j-jdk14.jar slf4j-log4j12. 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에 상주하므로 충분한 공간을 할당해야합니다.

도움이 되었기를 바랍니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top