Вопрос

Согласно техническому документу на странице jBPM [1], jBMP можно легко использовать в автономном приложении.Однако я не смог найти никакой информации о том, как на самом деле это сделать.Я хочу создать простое java-приложение (возможно, с SWT), которое отображает процесс с помощью jBPM.Затем пользователь должен иметь возможность изменять поведение приложений, изменяя диаграмму jBPM.Для этой цели я также должен интегрировать некоторые компоненты eclipse, я думаю..есть какие-нибудь идеи, как это работает?

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

Это было полезно?

Решение

Прежде чем начать, вы также можете проверить, Роумфлоу отвечает вашим потребностям, поскольку кажется автономным средством просмотра/редактором jBPM Eclipse/RCP.

В противном случае вам следует знать, как создавать плагины eclipse, или получить книгу, которую я нашел полезной для большинства нужд разработки плагинов eclipse/SWT, «Eclipse Building Commercial-Quality Plugins», опубликованную eclipse и Addison-Wesley.Кроме того, я не собираюсь сесть и написать вам тестовое приложение, вам все равно нужно понимать основы.

  1. Под автономным подходом они подразумевают запуск в любой старой JVM с подходящими библиотеками.Его необходимо развернуть в контейнере J2EE, просмотреть через Интернет и т. д.

  2. Посмотрите исходный код плагина jBPM eclipse, ведь он имеет те функции, которые вам нужны, верно?SWT/eclipse, основанный на этом, отображает jBPM.Это включает в себя проверку точек расширения, которые может установить 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 плагина, источник которого находится здесь в этом случае.Например, вот jBPM, добавляющий свое представление в eclipse:

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

    Этот может быть одно расширение, которое вы хотите скопировать, поскольку оно, кажется, поддерживает «представление».Это поможет вам понять, как они создают части своего приложения на основе Eclipse.Вы можете искать эти классы в своем рабочем пространстве и просматривать исходный код, если вы установили версии для разработчиков в надстройках JBPM.

  5. Решите, нужно ли вам разбирать части приложения, созданные как элементы GMF (Graphical Modeling Framework), такие как модель, поведение представления/диаграммы и различные части редактирования/рисования.Не связывайтесь с этим, если у вас тоже нет.Однако понимание плагинов GMF или просмотр примеров поможет вам понять, какие части плагина jBPM вам, возможно, придется использовать, особенно если требуется редактирование.

  6. Объедините эти части в плагин, не забывая повторно использовать те части (плагины/плаглеты), которые вы можете использовать из проекта jBPM.Обязательно создайте свой плагин eclipse как RCP или Rich Client...(Обратите внимание, что у jBPM в настоящее время нет RCP, согласно почта), чтобы его можно было использовать как автономное приложение eclipse для упрощения развертывания для людей, не обладающих знаниями об инструментах eclipse.

Дайте мне знать, если это приведет вас на правильный путь.

Другие советы

Да, можно запустить jbpm process engine полностью автономно, как простую java-программу.Контейнер J2EE не требуется.По крайней мере, так обстоит дело с jbpm 4.4

Что касается требований к коду,

  1. настройте схему базы данных jbpm
  2. добавьте следующие jar-файлы из библиотеки распространения jbpm в путь к классу приложений: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 juel-api.jar juel-engine.jar juel-impl.jar mail.jar И необходимые драйверы 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. Обратите внимание, что когда вы запускаете process engine из with в приложении SWT, process engine находится в той же JVM, что и SWT, поэтому убедитесь, что вы выделили достаточно места.

Надеюсь, это поможет :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top