Init Developers

coding and blogging

En este post vamos a ver como iniciarnos en el uso de las herramientas y del entorno de Bonita Open Solution(Bonita OS) para la gestión de procesos de negocio(BPM), si se quiere seguir el ejemplo es recomendable tener instalado el Bonita Studio.

Lo primero que vamos a hacer es repasar las herramientas principales que nos ofrece el entorno de Bonita para desarrollar nuestras aplicaciones.

  • Bonita Studio: nos permite modelar el proceso, es decir, definir las tareas , definir el flujo del proceso, definir grupos de usuarios, asignar conectores definir el look & feel y un largo etcétera.
  • Bonita Form Builder: forma parte del Bonita Studio, es el modulo en el que se definen los formularios que habrán de ser rellenados por los usuarios y se declaran validadores para el formulario entero o para los campos del mismo.
  • Bonita User Experience: Es una aplicacion encargada de desplegar y gestionar los procesos ya desplegados así como las instancias de cada proceso.
  • APIs: contamos con 4 APIs distintas para poder comunicarnos con el motor de Bonita(aunque, de momento, no entraremos a ver en detalle estas APIs), una API java, una api para acceder mediante un servidor REST y por ultimo 2 APIs para acceder mediante EJB (una para EJB2 y otra para EJB3).

Conceptos:

Antes de empezar a trabajar con Bonita hay una serie de conceptos que conviene tener claros:

Primero, ¿Qué es un proceso? : un proceso es un conjunto ordenado de fases o tareas para conseguir un objetivo, esto incluye desde el montaje de un coche a la tramitacion de una licencia de pesca.

ProcessDefinition(proceso): Se trata de la definición del proceso, con su flujo, sus conectores, sus actividades etc.

ProcessInstance(Instancia de proceso): Los procesos no suelen realizarse una única vez, por eso, cada instancia de proceso corresponde con una ejecución diferente del mismo, con su estado(terminado, en ejecución,…),  sus variables y todo lo necesario para que se ejecute el proceso.

ActivityDefinition(Actividad): Es la definición de una actividad, es decir, como serán los formularios(si los tiene),  que usuarios deben realizarla, cuales son sus conectores…

ActivityInstance(Instancia de actividad): A medida que una instancia de proceso se va ejecutando por cada actividad que ejecuta se crea una instancia de actividad que recoge valores como el momento en el que fue iniciada, que usuario la inició, el estado de un ficheros tras justo antes de finalizar ese activity, etc.

Creación de un proceso:

La creación de un proceso comienza en el Bonita Studio . Lo primero es añadir un evento de inicio:

Tenemos 4 tipos de inicio:

  • El normal, inicia la instancia de proceso y da paso a la primera actividad sin hacer nada más.
  • Inicio con mensaje: inicia un proceso y envía un mensaje.
  • Inicio Programado: inicia la instancia del proceso en función de una fecha u hora.
  • Inicio de señal: inicia una instancia de proceso al recibir una señal.

Una vez iniciado el proceso debemos definir las tareas y la transición entre ellas.

esquemaMini

Ejemplo de flujo de un proceso en el Bonita Studio

Bonita Studio incluye una serie de ejemplos de procesos para familiarizarse con el entorno y descubrir las posibilidades que ofrece,  estos procesos de ejemplo se pueden encontrar y cargar en nuestro workspace desde la opción Examples del menú principal.

Añadir un formulario:

Para añadir un formulario necesitamos una tarea humana (existen tareas automáticas , tareas humanas y subprocesos). Al crearla veremos que  nos solicitará que le se la asignemos a un grupo de usuarios, para ello la seleccionamos para ver su menú de opciones.

y desde la pestaña de actores podremos crear un nuevo usuario, introduciendo su nombre, o un nuevo grupo de usuarios definiendo si se cargan de una base de datos, a través de LDAP, etc.

Una vez tenemos los usuarios vamos a crear el formulario. Para ello accedemos a la ventana formulario y seleccionamos “agregar”, tras lo cual se nos abrirá una ventana para elegir el tipo de widgets que podremos utilizar en el formulario,  seleccionamos los que creamos que vamos a usar y finalizamos la creación del formulario.

Ahora se nos abrirá el Bonita Form Builder desde el que podremos crear nuestro formulario con los campos que deseemos de una forma sencilla e intuitiva.

Con lo visto hasta ahora podremos crear procesos sencillos y asignar tareas con formularios a distintos grupos de usuarios.

En el siguiente post explicaré como desplegar nuestro proceso en un servidor de aplicaciones y en el bonita experience así como a generar conectores para enviar correos o conectar con la base de datos y validadores para nuestros formularios utilizando para ello groovy.

Categorías: Tutoriales

About rzornoza

"If you're going to do something, do it the fun way." - Aeon Dragonfun

29 Respuestas hasta ahora.

  1. afernandez dice:

    Un post muy entretenido y muy bien explicado. Jamás había oído hablar de este tipo de herramientas y para una primera vez ha sido agradable de leer.

    Un saludo

  2. Jon dice:

    Gran producto y gran post! esperamos más pronto ;)

  3. jordi dice:

    Ruben, muy bueno el post. Muy completo. Seguro que en los foros de bonita te lo agradecen :)

  4. Oscar dice:

    Hola, muy interesante… sabes hasta donde puede uno profundizar en la interface a cliente para facilitar el trabajo a los usuarios finales? por ejemplo temas como web 2.0? además, sabes donde se pueden ver ejemplo de implementaciones?

    Gracias…

    • rzornoza dice:

      Hola Oscar. Para cambiar la apariencia y personalizar los formularios es posible cambiar las plantillas de todo el proceso si quieres que el cambio sea general .En este link lo esplican muy bien( http://www.bonitasoft.org/blog/video/exploring-bonita-open-solution-change-default-web-app-template-and-customize-confirmation-messages/ ), con un video incluso(en perfecto inglés). Además de las plantillas predeterminadas es posible crear una propia, la forma más sencilla es descargar la plantilla por defecto (Download default…) y editarla a nuestro gusto.

      También es posible cambiar la plantilla de cada formulario de manera independiente desde la pestaña “General” del Form Builder(de nuevo, lo más facil es una vez terminado el formulario descargar la plantilla por defecto).

      No es facil entrar a los detalles de todas las opciones en un simple comentario sin imagenes y sin alargarlo demasiado, creo que este tema se merece un post para él solito :P , de todos modos si tienes alguna duda especifica no dudes en hacernosla saber, será un placer contestar.

      Un saludo, y gracias a ti por comentar.

      • jmarti dice:

        Yo añadiría el hecho de que si los formularios no son lo suficientemente flexibles, siempre puedes hacerte una aplicación adhoc que haga luego llamadas a la API para enviar los datos introducidos por el usuario. (el formulario de bonita podría hacer un redirect a esta pantalla)

  5. jairo dice:

    hola, estoy interesado en aprender a utilizar bonitasoft, pero se me está haciendo complicada la conectividad con mysql.

    ya hice algunos ejercicios pero sin conectarme a ninguna db, y me pareció muy interesante, ahora lo que necesito es:

    1- cargar información desde mysql (pedidos por ejemplo)
    2- darle seguimiento a esos pedidos a través de BOS

    Para el efecto necesito tanto cargar información desde mysql así como vaciar la información relativa a la situación actual del proceso.

    He buscado como hacerlo por todos lados y no he obtenido información relevante.

    Gracias por la ayuda.

    • rzornoza dice:

      Hola Jairo,

      Si te he entendido bien necesitas configurar la base de datos de Bonita, para ello lo primero que tienes que saber es que por cuestion de eficiencia, bonita utiliza 2 bases de datos de forma simultanea, una para almacenar todos los datos de los procesos ya terminados (bonita_history) y otra para todo los procesos que siguen activos (bonita), si no las tienes tendrás que crearlas y al conectarse a ellas por primera vez bonita generará las tablas que necesite.

      Para usar una base de datos que no sea la H2 que viene predeterminada hay que modificar varios ficheros,

      primero el bonita-journal.properties y el bonita-history.propertes que podrás encontrar en :BONITA_HOME/server/default/conf

      En la seccion comentada como “Database Connection” hay una lista de configuraciones para las distintas bases de datos.
      Asegurate de comentar la configuracion de h2 y busca la configuracion de MySql y descomentalá de modo que quede algo similar a esto:

      hibernate.dialect org.hibernate.dialect.MySQL5InnoDBDialect
      #hibernate.connection.shutdown true
      bonita.hibernate.interceptor org.ow2.bonita.env.interceptor.MySQLDescNullFirstInterceptor

      esta operación hay que realizarla en los dos ficheros.

      Despues tenemos que editar el fichero
      conf/context.xml
      donde nuevamente tenemos que comentar los datos de la conexion h2 y descomentar el ejemplo de MySql que debería estar debajo.

      despues de descomentarlo tenemos que configurar los datos de nuestra base de datos.

      Debe quedar algo similar a esto(asegurate de tener la librería c3p0):

      Resource
      name="bonita/default/journal"
      auth="Container"
      type="com.mchange.v2.c3p0.ComboPooledDataSource"
      factory="org.apache.naming.factory.BeanFactory"
      description="DB Connection"
      driverClass="com.mysql.jdbc.Driver"
      jdbcUrl="jdbc:mysql://localhost:3306/bonita?dontTrackOpenResources=true"
      user="root"
      password="password"
      initialPoolSize="1"
      maxPoolSize="15"
      minPoolSize="3"
      maxConnectionAge="0"
      maxIdleTime="1800"
      maxIdleTimeExcessConnections="120"
      idleConnectionTestPeriod="30"
      testConnectionOnCheckout="true"
      acquireIncrement="3"/>
      ResourceLink
      global="bonita/default/journal"
      name="bonita/default/journal"
      type="javax.sql.DataSource" />
      Resource
      name="bonita/default/history"
      auth="Container"
      type="com.mchange.v2.c3p0.ComboPooledDataSource"
      factory="org.apache.naming.factory.BeanFactory"
      description="DB Connection"
      driverClass="com.mysql.jdbc.Driver"
      jdbcUrl="jdbc:mysql://localhost:3306/bonita_history?dontTrackOpenResources=true"
      user="root"
      password="password"
      initialPoolSize="1"
      maxPoolSize="15"
      minPoolSize="3"
      maxConnectionAge="0"
      maxIdleTime="1800"
      maxIdleTimeExcessConnections="120"
      idleConnectionTestPeriod="30"
      testConnectionOnCheckout="true"
      acquireIncrement="3"/>
      ResourceLink
      global="bonita/default/history"
      name="bonita/default/history"
      type="javax.sql.DataSource" />
      /Context>

      (En los comentarios no permite etiquetas xml dejo solo el nombre de la etiqueta pero verás la estructura en el fichero de configuración)

      Si no tienes problemas con el inglés la página de bonita donde explican este proceso es :
      http://www.bonitasoft.com/resources/documentation/bos-56/system-administration/installation/prepare-databases-use-bos/configure-mysql-and-postgresql

      pero necesitas estar registrado para poder leer algo relevante.

      Un saludo y espero que te sea de ayuda.

  6. Natalia dice:

    Hola, buscando información sobre este producto llegué a este blogg. Junto con un compañero de la facultad estamos desarrollando una herramienta y lo que necesitamos saber es si existe alguna forma de exportar, por ejemplo a un formato XML, una instantánea (snapshot) de un proceso en algún momento dado? Necesitamos obtener información (pensamos en obtenerla en xml) para poder generar estadísticas parecidas a las que muestra el “Bonita User Experience”.
    Consultamos en el foro de BonitaSoft y nos dicen que existe algo parecido en el BonitaSoft-SP. El problema es que nosotros estamos trabajando con la versión open source.
    Desde ya muchas gracias.

    • rzornoza dice:

      Hola Natalia,
      Si quieres el resultado directamente en xml puedes hacer uso de la API rest. El agregar el servicio rest puede ser un poco lio pero aquí lo explican bastante bien.

      http://www.eintel.com.au/content/bonita-using-rest-api

      Está en perfecto inglés y es de la versión 5.3, espero que no haya cambiado mucho este proceso en las últimas versiones.
      Otra alternatiba sería utilizar la API java, pero esto ya implicaría crear una aplicacion que se conectara a nuestro bonita y una vez tenemos los objetos en java puedes hacer las estadisticas sin necesidad de formatear el xml.
      Y por último, si tienes acceso a la base de datos toda la información que maneja bonita se guarda ahí. Quizá asuste un poco al principio pero los nombres de la mayoría de las tablas son bastante descriptivos y una vez que la conoces puedes acceder directamente a cualquier cosa.

      Si analizamos las 3 opciones tenemos que:

      -El acceso directo a la base de datos no es recomendable si tienes previsto cambiar de versión de Bonita ya que la estructura puede cambiar y habría que modificar las SQLs. Además, no hay ningún control de usuarios ni nigun tipo de filtro o ayuda (tienes acceso a las tablas con todos los datos y si buscas datos especificos de un proceso o usuario tienes que filtrar mediante los ids de las tablas). Si sólo se quieren sacar unos cuantos datos puede ser lo más rápido y directo, sólo hace falta saber SQL y ver donde se guardan los datos, pero no vas a encontrar documentación de ningún tipo y no te recomiendo hacer ningun tipo de insert, delete o update.

      -El acceso mediante la API rest te devuelve los datos en XML y despues puedes tratarlos desde donde quieras; PHP, java, .net e incluso android o iOS. Además es un proceso documentado y puedes encontrar ayuda si te atascas.

      -Si vas a usar la API java hay que desarrollar otra aplicacion que se conecte a Bonita. A cambio, tienes acceso directo a toda la API y una vez montado resulta relativamente facil consultar o incluso modificar o lanzar cualquier proceso y es quizás la forma más habitual de acceso y por tanto, la mejor documentada.

      Sea cual sea la forma que elijais mucho ánimo y suerte con el proyecto y si teneís cualquier duda por aquí estaremos encantados de ayudar en lo posible.

      Un saludo

      • jmarti dice:

        Nosotros en un proyecto cogemos la instantánea de un proceso mediante la API y luego lo mostramos en plan “bonito”.

        La API de java es muy completa.

        • Natalia dice:

          rzornoza y jmarti Muchas Gracias por respondernos tan rápido!!! Estaba perdiendo las esperanzas de encontrar opciones fuera de BonitaSoft Subscription Pack. En breve nos ponemos a trabajar en ello.
          El acceso mediante la API rest me parece muy interesante!
          Lo de la API java, aun no me imagino cómo obtener los datos de bonita pero analizaremos bien las propuestas y veremos que podemos hacer. Seguramente los estaré molestando con alguna nueva duda!
          Nuevamente Mil Gracias!!! Saludos.

          • rzornoza dice:

            De nada Natalia,

            Obtener los datos de Bonita mediante la API java es posible mediante el Bonita Runtime que sería algo así como el motor de bonita, te dejo un par de links de por si quieres echarle un vistazo al proceso de conectar una aplicación con Bonita.

            http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-part-2/
            http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-%E2%80%93-part-3/

            La parte 1 de la guía es teoría más general, no está de más conocerla (de hecho es recomendable que al menos te suene si empiezas a trabajar con la API) pero no es necesaria para ver cómo funciona.

            Te cuentan sobre todo qué es lo que puedes configurar y tienes un ejemplo de aplicacion.

            La forma en la que lo hacen no es la que más me gusta pero lo bueno es que al final tienes el ejemplo para descargar y puedes tenerlo conectado en poco tiempo.

            Utilizan maven para la gestion de dependencias por que la verdad es que son bastantes pero básicamente valdría con tener el bonita-server.jar en el classpath y despues usar la API (Pero obviamente, sin las dependencias el bonita server no funcionará).

            Un saludo, y pregunta sin miedo, no es molestia alguna.

            P.S: por cierto, cuidado con el ejemplo si tienes más procesos desplegados. Si no me equivoco la última instruccion borra todos los procesos.

            P.P.S: veo que en los comentarios dejan un link con las dependencias de maven:
            http://maven.ow2.org/maven2/org/ow2/bonita/bonita-distrib/5.2.2/bonita-distrib-5.2.2.zip

            es bonita 5.2.2 no se si será compatible con la versión que esteis usando, pero seguro que jugando con la URL de maven podeis encontrar las librerías de vuestra versión ;) .

  7. Diego Armando Muñoz dice:

    Un post muy completo. Felicitaciones!

    En estos momentos estoy intentando hacer una aplicación web que se comunique con el Motor de procesos de Bonita usando la API java, y que los valores que ingrese el usuario por el formulario web de mi aplicación se graben adecuadamente en las BD de Bonita((bonita_journal y bonita_history)) en mi caso configuradas en Oracle, sin embargo estoy un poco confundido al usar la API de java :(

    Podrías por favor explicar como usar algunos de los métodos de cada uno de los “componentes principales” de la API como ManagementAPI, RuntimeAPI, QueryRuntimeAPI y QueryDefinitionAPI??

    La única información que tengo es la que ofrece Bonita: http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/ y el ejemplo desarrollado en http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-part-2/ y la parte 3

    Pero como dije anteriormente me tiene un poco confundido.

    Infinitas Gracias por la ayuda. Saludos :)

  8. Alejandra dice:

    Hola, estoy utilizando BonitaSoft para un proyecto y necesito saber si es posible generar actores a partir de usuarios cargados en una base de datos MySQL.
    Seria de gran ayuda tu pronta respuesta.

    Muchas Gracias! Excelente Post

    Saludos

    • rzornoza dice:

      Hola Alejandra,
      Si lo que quieres es añadir nuevos usuarios a la base de datos de bonita a partir de otra base de datos puedes utilizar la API: Interface IdentityAPI. En esta, cuentas con los métodos para añadir usuarios y gestionar los grupos.
      Puedes generar un proceso que recoja los datos de los usuarios de la base de datos y añadirlos mediante “addUser(String username, String password) “.
      Despues para asignarle roles y añadirle a grupos puedes usar setUserMemberships(String userUUID, Collection membershipUUIDs) estos membersips identifican tanto los roles como los grupos y se pueden obtener mediante getMembershipForRoleAndGroup(String roleUUID, String groupUUID).
      No se si me he explicado bien, si te queda alguna duda pregunta sin miedo.

      Otra cosa que se puede hacer es que bonita utilice los usuarios de otra base de datos, pero perderías los usuarios que tubieses en bonita y es un poco más complicado. Y aunque no estoy muy seguro y tendría que mirarlo creo que también puedes hacer que bonita busque los usuarios en 2 bases de datos distintas. Si te interesa alguna de estas 2 alternativas hazmelo saber para explicarlas más al detalle.

      Un saludo y muchas gracias a ti, por comentar.

  9. Alejandra dice:

    Hola, nuevamente consultando…
    estoy creando formularios, y en uno de ellos necesito cargar una campo lista con diferentes valores que voy seleccionando desde una lista desplegable, pero no encuentro eventos para crear desde botones, y no se me ocurre otra manera de hacerlo. Es posible encontrarle una solucion a este problema??

    Muchas Gracias! Saludos

    • rzornoza dice:

      Hola de nuevo Alejandra.
      Si te he entendido bien lo que quieres es rellenar una lista a partir de otra. Lo más parecido son las checkbox list, aunque visualmente sean checkboxes recibe de entrada una lista o un map y la salida es una nueva lista o map con los checkboxes seleccionados y creo que esa es la funcionalidad que intentas implementar.
      Funcinalmente la única pega que veo es que sólo se puede añadir un elemento de cada tipo, aunque si fuese necesario se podría solucionar con una lista gemela donde se indicasen las unidades, o una simple lista de unidades donde 0 sería que no está seleccionado, pero creo que me estoy desviando…

      De todas formas, si quieres que visualmente se muestren dos listas y que se vayan moviendo elementos de una a otra creo que no habría más remedio que hacerlo mediante javascript.

      Si no he entendido bien la pregunta o tienes alguna otra duda pregunta sin miedo.
      Un saludo y gracias por tu comentario.

      • Alejandra dice:

        Ante todo gracias por tu pronta respuesta.
        La idea es la siguiente, tengo un select list desplegable y necesito que a medida que el usuario vaya seleccionando diferentes valores del mismo, éstos se copien a un campo list, luego recorreria todo el list y guardaria dichos valores en una db. A esta forma de trabajar llegue, debido a que se me hizo realmente dificil poder manejar una matriz editable o tabla. Si tienen informacion sobre esto ultimo te agradeceria.

        • rzornoza dice:

          Entonces me parece que entendí bien la idea.

          Lo único que se me ocurre para poder mostrar una matriz editable es o bien desarrollar una aplicacion paralela en java que se comunique mediante la API con bonita, que de este modo se puede hacer practicamente cualquier cosa.

          O bien si los campos son siempre los mismos se podria hacer un “apaño” generando la matriz a base de campos de texto sin label y jugando un poco con los estilos para que quedasen juntos.

          Personalmente no conozco ningun elemento del formbuilder con el que se pueda hacer lo que necesitas de una forma elegante.

          Espero que sirva de ayuda y de nuevo gracias por tu comentario.

  10. Alejandra dice:

    Hola, he cambiado la idea de un list ya que no hay manera de que funcione…
    Opte por cargar todos los datos en un checkbox y ahi selecciono los elementos que necesito. El problema que se me presento es como guardo dichos elementos seleccionados en una nueva variable.

    • rzornoza dice:

      Hola Alejandra,
      desde el form builder(donde diseñas el formulario), al seleccionar el checkboxlist en la seccion “data”, tienes la opcion, “guardar en”. Ahí debes poner la nueva variable.

      Un saludo.

  11. aitor dice:

    Hola, tengo instalado un bonita 5.6.2 con jboss y accedo perfectamente, pero pasado un tiempo, no superior a media hora, no 8 horas como he leido por ahí que hay problemas, parece que pierdo conexión y no tengo otra manera de acceder que reiniciar. Los errores que me dan son de este tipo. ¿Puedes ayudarme?

    type Informe de Excepción

    mensaje

    descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

    excepción

    java.lang.reflect.UndeclaredThrowableException
    $Proxy531.generateTemporaryToken(Unknown Source)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.ow2.bonita.facade.interceptor.ClientRemoteAPIInterceptor.invoke(ClientRemoteAPIInterceptor.java:136)
    $Proxy532.generateTemporaryToken(Unknown Source)
    org.bonitasoft.console.security.server.api.impl.CredentialsEncryptionAPIImpl.generateTemporaryToken(CredentialsEncryptionAPIImpl.java:157)
    org.bonitasoft.console.security.server.CredentialsEncryptionServlet.doPost(CredentialsEncryptionServlet.java:127)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.bonitasoft.forms.server.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

    causa raíz

    java.io.IOException: The hierarchy of org.hibernate.exception.JDBCConnectionException is different in your current classPath
    org.jboss.serial.classmetamodel.StreamingClass.readStream(StreamingClass.java:80)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:381)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
    org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
    org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:353)
    org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:273)
    org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
    org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
    org.jboss.serial.io.MarshalledObjectForLocalCalls.get(MarshalledObjectForLocalCalls.java:60)
    org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:93)
    org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
    org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    $Proxy533.invoke(Unknown Source)
    org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
    org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
    $Proxy531.generateTemporaryToken(Unknown Source)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.ow2.bonita.facade.interceptor.ClientRemoteAPIInterceptor.invoke(ClientRemoteAPIInterceptor.java:136)
    $Proxy532.generateTemporaryToken(Unknown Source)
    org.bonitasoft.console.security.server.api.impl.CredentialsEncryptionAPIImpl.generateTemporaryToken(CredentialsEncryptionAPIImpl.java:157)
    org.bonitasoft.console.security.server.CredentialsEncryptionServlet.doPost(CredentialsEncryptionServlet.java:127)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.bonitasoft.forms.server.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

    • rzornoza dice:

      Hola Aitor
      nunca he montado bonita sobre jboss pero quizá por el error se me ocurren dos posibles causas.
      1ª algún conflicto de librerías o de versiones de hibernate.

      2ª la configuracion de la base de datos del journal o del histórico tiene algún error, si fuese esto, revisa los ficheros bonita-hournal y bonita-history. Quizá este post te pueda ser util http://www.bonitasoft.org/forum/viewtopic.php?id=5211.

      Siento no poder ser de más ayuda, pero al no haber montado nunca este entorno no estoy familiarizado con los errores que pueda dar bonita en jboss.

      Un saludo y gracias por tu comentario.

  12. Alejandra dice:

    Hola nuevamente, estoy intentando asignarle un valor true o false a una variable de tipo boolean, he creado un conector en la tarea pero no me funciona correctamente.
    Tiene idea de como hacerlo?

    • rzornoza dice:

      Un placer tenerte de nuevo aquí Alejandra.

      Si tratas de modificar una variable dentro del proceso basta con poner “nombre_variable”=”valor”, pero el conector necesita ver esa variable, si has declarado una variable en una actividad sólo esta puede acceder a esa variable, si quieres utilizarla en otra actividad debes declarar la variable como variable de proceso (para probar siuna actividad tiene acceso a una variable puedes darle un valor por defecto y comprobar el comportamiento del proceso).

      Si estas haciendo uso de la API de java para modificar una variable necesitas hacer uso de la RuntimeAPI.

      Existen 2 tipos de variables, de proceso y de actividad, según sea una u otra tienes que utilizar un método distinto; setProcessInstanceVariable o setActivityInstanceVariable. Cómo la actividad pertenece a un proceso, si no sabes si es una variable de actividad o de proceso también existe el método setVariable. Pero como te he dicho arriba, asegurate de que el conector tiene acceso a la variable o cambiar esta no servirá de mucho

      Para llamar a estos métodos vas a necesitar:
      1º ActivityInstanceUUID o ProcessInstanceUUID, según a qué método llames.
      2º el id de la variable (suele ser parecido al nombre que se le da pero sin caracteres especiales, puede verse en el BonitaStudio (o quizá sea esactamente el mismo nombre, no lo recuerdo bien, no suelo utilizar caracteres especiales en mis variables))
      3º el objeto con el nuevo valor de la variable, en este caso necesitarias un Boolean.

      Un saludo


Antes de enviar el formulario:
Human test by Not Captcha
  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin
  • Youtube

Artículos populares

Ubuntu 11.04 y Unity, i

Cada 6 meses, los 04 y los 10 exactamente, algo...

Bonita Open Solution, u

En este post vamos a ver como iniciarnos en el...

Desarrollos con Liferay

Un gestor de portales A día de hoy existen múltiples...

Android, su SDK y sus X

Como bien sabréis una aplicación Android se basa en dos...

Adentrándose en la nub

Es curioso el revuelo generado por el Cloud Computing desde...