2011-02-10 33 views
6

Me gustaría reemplazar la implementación de BPM personalizada con Activiti o jBPM-5 en un producto que utiliza Hibernate (sin JPA) con Spring para la implementación de capa persistente. Desafortunadamente, tanto Activiti como jBPM5 requieren JPA (de acuerdo con su documentación) y no es posible migrar todas las implementaciones de Hibernate existentes a JPA en el producto.¿Se pueden usar archivos .hbm en una aplicación JPA con Hibernate como proveedor JPA?

  1. ¿Hay una manera de configurar JPA 2.0 (proveedor JPA es Hibernate) con Spring 3 sin migrar aplicación Hibernate JPA (es decir, retener .hbm archivos)?

Nota: Soy consciente de que la aplicación no será compatible con JPA y que no se puede usar otro proveedor de JPA.

  1. Si hay forma, suponga que el administrador de transacciones Spring JTA está configurado con la configuración adecuada. ¿se puede ejecutar la lógica de aplicación y la lógica de flujo de trabajo BPM en una sola transacción de Spring?
+0

esto no responde exactamente a su pregunta, pero recientemente he tenido una situación similar, y terminó usando HibernateTools para convertir mis archivos * .hbm.xml a los granos de la APP anotada. Fue bastante sencillo y me ahorró el esfuerzo de pasar por lo que estás haciendo ahora. Es ésta una opción para usted? – Fil

+0

Gracias @Filip Zalewski. El producto es grande en términos de su tamaño. La única razón, me gustaría cambiar a JPA es ejecutar BPM y la aplicación en la misma transacción. No creo, la migración es la elección correcta. – Sujee

+0

Parece que es posible: http://bill.burkecentral.com/2007/07/06/co-existence-with-hibernate-jpa-and-ejb3/ http://docs.jboss.org/hibernate/entitymanager/ 3.6/reference/es/html/configuration.html –

Respuesta

1

En relación con las transacciones, ver Activiti Spring Transaction Docs. Si no puede portar su aplicación para usar JPA, otra opción es colocar una fachada sobre su dominio de Hibernate. Activiti le permite invocar métodos en beans manejados por resorte, para que pueda crear una fachada o utilizar una capa de servicio existente. Eche un vistazo a las aplicaciones de muestra que se entregan con Activity para ver cómo funciona la integración de Spring.

0

jBPM w/JPA puede integrarse con aplicaciones antiguas que no son JPA utilizando Spring. Las interacciones con jBPM usan JPA, pero su aplicación usaría hibernate. El único inconveniente es que debe lidiar con 2 transacciones diferentes, pero cualquier problema puede mitigarse principalmente.

enter image description here

  1. Comience su transacción de hibernación y de realizar cualquier lógica de negocio que desea

  2. Comience su transacción JBPM llamando a las API de jBPM para iniciar un proceso, o enviar un evento, etc.

  3. Cualquier implementación de WorkItemHandler debe unirse a la transacción externa utilizando las API de la fábrica de sesiones

  4. Hibernate flush() necesita ser llamado al final de cada ejecución WorkItemHandler con el fin de desencadenar la mayoría de las excepciones generadas por el código de negocio

  5. El WorkItemHandler deben detectar cualquier excepción que genera el código de negocio y volver a lanzar de forma que el JBPM transacción también falla