¿Cómo consumir un servicio de bonita bpm a través de rest api, desde una aplicación externa?

Hola, por favor soy nueva en bonita bpm, y quiero hacer un ejemplo de proceso, y necesito los servicios del motor de bonita para consumirles desde una app externa, sin utilizar los ui ni los formularios propios de bonita bpm

Hola,

Pues los pasos que describiste dicen lo que tienes que hacer:

  1. Diseña el proceso, eso incluye definir el contrato (los datos que necesita el proceso para instanciarse), por ejemplo la dirección de correo electrónico y el mensaje. También los conectores que envían el correo y se conectan a Alfresco.
  2. En tu app externa define la lógica para que al final se envíe un JSON a bonita de la manera apropiada para que el proceso se instancie.
  3. Consume la REST API.

Pásate por la documentación, aunque está en inglés, puedes sacar lo que necesitas para resolver tus dudas.

REST API: http://documentation.bonitasoft.com/?page=rest-api-overview
Correo electrónico: http://documentation.bonitasoft.com/?page=messaging
Alfresco: http://documentation.bonitasoft.com/?page=alfresco o este: http://documentation.bonitasoft.com/?page=cmis

Espero que eso ayude.

Adiós.

Hola. Logré crear la instancia siguiendo los pasos que comentan.

Solamente no me funciona pasar los datos a las variables del contrato.

La instancia se crea dentro del portal solamente que no se vizualizan los datos.

En el postman no da error solamente no se porque sale   200  ok   pero no logro visualizar los datos en el fotmulario inicial.

Si alguien pudiera ayudarme.

Estoy haciando pruebas con el postman. Aqui les dejo panatallas de mis pruebas a ver si alguien me puede apoyar. Gracias.

Imagen 1

Imagen 2

¿Puedes ser mas específico? No hay mucha información para seguir aquí. ¿Qué es lo que realmente quieres hacer?

Etc.

Saludos
Seán

1.Tengo un proceso en bonita bpm, debe realizar la conexión a correo y alfresco.
2.Necesito separar el motor de bonita para consumir los servicios desde una app externa, no quiero utilizar ui designer, ni los formularios de bonita.
3.Deseo consumir a través de rest api los servicios del proceso

Espero darme a entender.

Saludos.

Gracias, el problema que tengo es que no logro el funcionamiento del rest api, no me da la conexión para la app externa.

Saludos.

Hola,

Debes verificar, conectividad, puertos y firewall. Lo estás haciendo todo en un entorno? o lo tienes partido?, El portal de bonita te funciona normalmente?, Qué excepción te lanza cuando intentas enviar la información?.

He leído la documentación, pero no logró entender los pasos para la ejecución, en que parte de mi proceso inicio la conexión con el rest api para la aplicación externa, lo probe con un formulario de ui designer y el proceso corre, pero no entiendo la conexión para empezar la app externa.

Muchas gracias, voy a seguir los pasos.

Hola,

El servidor de bonita siempre está a la espera de peticiones, sólo tienes que iniciar el Tomcat y empezará a escuchar.

Lo que debes es pensar que quién lo inicia todo sería tu aplicación externa, ellá llama al servicio de Bonita, Ejemplo:

Lo primero de siempre es iniciar sesión, esto lo haces con esta URL usando el método POST:

http://tubonita:puerto/bonita/loginservice

Form data:

{
“username” : “nombreDeUsuario”,
“password” : “laContraseña”
}

Antes debiste haber instalado (o ejecutado desde el studio) un proceso que cuando está desplegado genera un id de proceso (por ejemplo 123456), este ID lo puedes encontrar en el portal de Bonita como administrador yendo a Procesos y luego seleccionando el proceso que vas a usar. Hay una manera para obtenerlo en tiempo de ejecución, lee esto: http://documentation.bonitasoft.com/?page=bpm-api#toc28

Ya con el ID lo que tienes que hacer es instanciar el proceso, usando esta URL con el método POST:

http://tubonita:puerto/bonita/API/bpm/process/123456/instantiation

Y enviando los datos definidos en el contrato. Por ejemplo si era como te había dicho sería algo así:

{ "direccion" : "pepito@servidor.com", "asunto" : "Lorem ipsum dolor sit amet.", "mensaje" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." }

Ya luego Bonita te responderá con un 200 si pudo instanciar el proceso.

Eso es todo en resumen, espero que sirva.

Buenas noches,
He hecho la conexión y al momento de ejecutar la app me sale el siguiente error:

INFORMACIÓN: Desplieque del descriptor de configuración C:\BonitaBPMCommunity-7.3.3\workspace\tomcat\conf\Catalina\localhost\bonita.xml
dic 20, 2016 7:56:16 PM org.apache.catalina.startup.TldConfig execute
INFORMACIÓN: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
dic 20, 2016 7:56:16 PM org.apache.catalina.core.NamingContextListener addResource
ADVERTENCIA: No pude registrar en JMX: javax.naming.NamingException: no resource registered with uniqueName ‘jdbc/BusinessDataDSXA’, available resources:
dic 20, 2016 7:56:16 PM org.apache.catalina.core.NamingContextListener addResource
ADVERTENCIA: No pude registrar en JMX: javax.naming.NamingException: no resource registered with uniqueName ‘jdbc/bonitaDSXA’, available resources:
dic 20, 2016 7:56:16 PM org.bonitasoft.platform.setup.PlatformSetup initDataSource
INFORMACIÓN: Connected to ‘null’ database with url: ‘jdbc:h2:tcp://localhost:9091/bonita_journal.db’ with user: ‘SA’
dic 20, 2016 7:56:16 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.bonitasoft.engine.api.internal.servlet.EngineInitializerListener
java.lang.RuntimeException: Error while initializing the Engine
at org.bonitasoft.engine.api.internal.servlet.EngineInitializerListener.contextInitialized(EngineInitializerListener.java:39)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5077)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5591)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:677)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1939)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: dbVendor is null
at org.bonitasoft.platform.setup.ScriptExecutor.(ScriptExecutor.java:87)
at org.bonitasoft.platform.setup.PlatformSetup.initServices(PlatformSetup.java:357)
at org.bonitasoft.platform.setup.PlatformSetup.initPlatformSetup(PlatformSetup.java:402)
at org.bonitasoft.platform.setup.PlatformSetup.init(PlatformSetup.java:118)
at org.bonitasoft.engine.api.internal.servlet.EngineInitializerListener.contextInitialized(EngineInitializerListener.java:35)
… 13 more

Hola,

Tienes un problema en la configuración de tu servidor pues según lo visto en el log el motor no sabe cuál es el proveedor de base de datos.

Nota: cuando pongas logs o código por favor enciérralo entre las etiquetas < code> y < /code> (sin los espacios) para mejorar la lectura.

Buenos días, he configurado el archivo bonita.xml y configurado para postgres, pero sigue dando error y he vuelto a la configuración anterior. ¿Cuál es el archivo que debería configurar? Ya he revisado algunos y bota otros errores

Hola, Depende de la versión, no he usado la versión 7.3, pero sé que desde esa versión todo se configura en Base de datos.

Puede haber algún problema por el uso de bonita client, ¿Es necesario en las últimas versiones?, he estado leyendo y hay preguntas con la versión 5.*

La verdad no sé, pero la excepción es más porque no encontró la configuración de la DB, qué versión tienes?

La 7.3, al cambiar la configuracaión de bonita.xml a postgres salen los siguientes errores:

INFORMACIÓN: Desplieque del descriptor de configuración C:\BonitaBPMCommunity-7.3.3\workspace\tomcat\conf\Catalina\localhost\bonita.xml dic 21, 2016 12:51:53 PM org.apache.catalina.startup.TldConfig execute INFORMACIÓN: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. dic 21, 2016 12:51:53 PM org.apache.catalina.core.NamingContextListener addResource ADVERTENCIA: No pude registrar en JMX: javax.naming.NamingException: no resource registered with uniqueName 'jdbc/BusinessDataDSXA', available resources: [] dic 21, 2016 12:51:53 PM org.apache.catalina.core.NamingContextListener addResource ADVERTENCIA: No pude registrar en JMX: javax.naming.NamingException: no resource registered with uniqueName 'jdbc/bonitaDSXA', available resources: [] dic 21, 2016 12:51:53 PM org.apache.tomcat.jdbc.pool.ConnectionPool init GRAVE: Unable to create initial connections of pool. java.sql.SQLException: org.postgresql.Driver at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254) at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:710) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:644) at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:466) at org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:143) at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:554) at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242) at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141) at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source) at org.apache.naming.NamingContext.lookup(NamingContext.java:842) at org.apache.naming.NamingContext.lookup(NamingContext.java:167) at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1103) at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:682) at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:271) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5479) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:677) at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1939) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246) ... 30 more

Mira, la excepción te lo pone:

ADVERTENCIA: No pude registrar en JMX: javax.naming.NamingException: no resource registered with uniqueName ‘jdbc/BusinessDataDSXA’, available resources:
dic 21, 2016 12:51:53 PM org.apache.catalina.core.NamingContextListener addResource
ADVERTENCIA: No pude registrar en JMX: javax.naming.NamingException: no resource registered with uniqueName ‘jdbc/bonitaDSXA’, available resources:

Verifica que las entradas correspondientes están bien y no están comentariadas.

Este es el código de bonita.xml:

<?xml version='1.0' encoding='utf-8'?>
<!--  To not persist the session after reboot tomcat -->
<Manager pathname="" />

<!-- ##################################################### -->
<!-- Configure Datasource for Bonita BPM standard database -->
<!-- ##################################################### -->
<Resource name="bonitaDS" auth="Container" type="javax.sql.DataSource"
          factory="bitronix.tm.resource.ResourceObjectFactory" uniqueName="jdbc/bonitaDSXA" />

<!-- H2 Example -->
<Resource name="bonitaSequenceManagerDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="sa"
          password=""
          driverClassName="org.h2.Driver"
          url="jdbc:h2:tcp://localhost:9091/bonita_journal.db;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;IGNORECASE=TRUE;" />

<!-- Postgresql Example -->
<!--
<Resource name="bonitaSequenceManagerDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://localhost:5432/bonita"/>
-->

<!-- Oracle Example -->
<!--
<Resource name="bonitaSequenceManagerDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1 FROM dual"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@localhost:1521:XE"/>
-->

<!-- SQL Server Example -->
<!--
<Resource name="bonitaSequenceManagerDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
          url="jdbc:sqlserver://localhost:1433;database=journal"/>
-->

<!-- MySQL Example -->
<!--
<Resource name="bonitaSequenceManagerDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/bonita?dontTrackOpenResources=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
-->

<!-- ##################################################### -->
<!-- Configure Business Data Datasource -->
<!-- ##################################################### -->
<Resource name="BusinessDataDS" auth="Container" type="javax.sql.DataSource"
          factory="bitronix.tm.resource.ResourceObjectFactory" uniqueName="jdbc/BusinessDataDSXA" />

<!-- H2 Example -->
<Resource name="NotManagedBizDataDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="sa"
          password=""
          driverClassName="org.h2.Driver"
          url="jdbc:h2:tcp://localhost:9091/business_data.db;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;IGNORECASE=TRUE;" />

<!-- Postgresql Example -->
<!--
<Resource name="NotManagedBizDataDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://localhost:5432/business_data"/>
-->

<!-- Oracle Example -->
<!--
<Resource name="NotManagedBizDataDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1 FROM dual"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="business_data"
          password="bpm"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@localhost:1521:XE"/>
-->

<!-- SQL Server Example -->
<!--
<Resource name="NotManagedBizDataDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
          url="jdbc:sqlserver://localhost:1433;database=business_data"/>
-->

<!-- MySQL Example -->
<!--
<Resource name="NotManagedBizDataDS"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="17"
          minIdle="5"
          maxIdle="17"
          maxWait="10000"
          initialSize="3"
          validationQuery="SELECT 1"
          validationInterval="30000"
          removeAbandoned="true"
          logAbandoned="true"
          username="bonita"
          password="bpm"
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/business_data?dontTrackOpenResources=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
-->

Ahí están las dos sin comentar.

Hola, el bonita.xml no está configurado para postgres, si ves la parte de su configuración está comentariada y la del servidor h2 está activa.

Por otro lado no vi esto en tus logs:

Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver

Verifica que pusiste el driver correcto, leer http://documentation.bonitasoft.com/7.3?page=database-configuration

Adiós.