Pregunta

De acuerdo con el documento técnico en la página jBPM [1], JBMP puede ser utilizado fácilmente en una aplicación independiente. Sin embargo no pude encontrar ninguna información acerca de cómo realmente hacer esto. Quiero crear una aplicación Java sencilla (tal vez con SWT), que muestra un proceso con jBPM. El usuario debe entonces ser capaz de modificar el comportamiento aplicaciones, mediante la modificación del diagrama jBPM. Para este propósito también tengo que integrar algunos componentes de Eclipse creo .. alguna idea de cómo funciona esto?

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

¿Fue útil?

Solución

Antes de empezar, es posible que desee también para ver si Roamflow se adapte a sus necesidades, ya que parece ser un independiente jBPM Eclipse / RCP visor / editor basado.

De lo contrario, debe saber cómo construir Eclipse plug-ins, o conseguir el libro que encontré útil para la mayoría de las necesidades de desarrollo Eclipse plug-in / SWT, "Eclipse Edificio Comercial-Calidad Plug-ins", publicado por Eclipse y Addison-Wesley. Además, yo no voy a sentarse y escribir una aplicación de prueba, es necesario comprender los fundamentos de todos modos.

  1. Por autónoma que significan ejecutar en cualquier máquina virtual Java de edad con las bibliotecas adecuadas. Se necesita ser desplegado en un contenedor J2EE, visto a través de la web, etc.

  2. Mira el código fuente para el jBPM eclipsar plug-in, ya que tiene las características que busca para el correcto? Un SWT / eclipse basado que muestra a jBPM. Esto incluye la comprobación de los puntos de extensión que jBPM puede instalar que se puede utilizar para construir su plug-in de Eclipse con rapidez. Por ejemplo: El código de editor jBPM, aquí . O cómo serializar, aquí , re-uso.

  3. Aquí está el SWT / dibujo crítico, una línea crítica es la conversión de la jBPM en y cosa SWT "g = new SWTGraphics (GC);". Esto parece generar una imagen desde un modelo de 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. Aprender de plugin.xml del plug-in, situado src aquí en este caso. Por ejemplo, aquí está el jBPM agregarlo de vista para eclipsar:

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

    Esta puede ser una extensión que desea copiar, ya que parece resistir la 'vista'. Esto le ayudará a entender cómo se construyen las piezas de su aplicación basada en Eclipse. Puede buscar estas clases en su espacio de trabajo y ver el código fuente si ha instalado las versiones Developer en los jbpm plug-ins.

  5. Decidir si es necesario cortar las piezas separadas de aplicaciones construidas como GMF cosas (Graphical Modeling Framework), al igual que el modelo, comportamiento de la vista / diagrama y los diferentes editar / dibujo partes. No se metan con este a menos que tenga también. Sin embargo, la comprensión de GMF plug-ins o en busca de que los ejemplos ayudarán a entender lo que jBPM plug-in de piezas puede que tenga que utilizar, especialmente si se necesita la edición.

  6. Rollo de las piezas en un plug-in, sin olvidarse de volver a utilizar qué piezas (plugins / pluglets) se puede desde el proyecto jBPM. Puede asegúrese de construir su plug-in de Eclipse RCP o como un cliente rico ... (Nota jBPM no tiene actualmente una RCP, por después ) para que pueda como una aplicación independiente Eclipse para el despliegue más fácil a las personas que no tienen conocimiento de herramientas eclipse.

Quiero saber si esto se pone se dirigió por el camino correcto.

Otros consejos

Sí, es posible hacer funcionar el motor de procesos jbpm completamente independiente, como un simple programa java. No se necesita contenedor J2EE. Al menos este es el caso con jbpm 4.4

En cuanto a la exigencia de código va,

  1. Esquema de configuración de la base de datos jbpm
  2. añadir los siguientes frascos de la biblioteca de distribución jbpm a la ruta de clase de aplicaciones: 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 Y los controladores JDBC necesarios para la base de datos que está utilizando.
  3. y su clase independiente tiene este aspecto:

    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. Tenga en cuenta que cuando se está ejecutando el motor de procesos de aplicación con la SWT, el motor de procesos reside en la misma JVM que la SWT, así que asegúrese de que se puede asignar espacio suficiente.

Espero que esto ayude: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top