Moteur de flux de travail léger pour Java
est-il préférable d'écrire un nouveau moteur de flux de travail en utilisant un moteur BPM existant: jBPM 5, Activiti 5?
mon application est une application basée sur le web et la performance est importante. Mon doute est de savoir si l'utilisation de jBPM/Activiti sera une performance overhead par rapport à l'écriture d'un simple moteur de flux de travail.
si j'opte pour l'auto-implémentation, la visualisation du flux de travail me manquera. Pour les performances, il peut être échangé.
9 réponses
Cela dépend vraiment de vos besoins. Tout d'abord, voir si vous avez vraiment besoin d'un moteur de flux de travail ( ce ou d'autres sources). Sauf si tu en as vraiment besoin, tu devrais probablement l'éviter.
si vous avez vraiment besoin de ce qui fournit un moteur de flux de travail, je choisirais celui qui est déjà construit. Les personnes qui travaillent avec jBPM ou activiti ont beaucoup plus d'expérience que vous dans la construction de moteurs de flux de travail, il est donc probablement déjà tunned pour améliorer les performances.
je suis d'accord avec les gars qui ont déjà posté des réponses ici, ou une partie de leurs réponses de toute façon :P, mais comme ici dans l'entreprise où je travaille actuellement nous avons eu un défi similaire j'ai pris la liberté d'ajouter mon opinion, basée sur notre expérience.
nous avions besoin de migrer une application qui utilisait le moteur de flux de travail jBPM dans des applications liées à la production et comme il y avait un certain nombre de défis dans la maintenance de l'application, nous avons décidé de voir si il sont de meilleures options sur le marché. Nous sommes venus à la liste déjà mentionnée:
- Activiti (prévu pour l'essayer à travers un prototype)
- Bonita (prévu pour l'essayer à travers un prototype)
- jBPM (disqualifié en raison de l'expérience passée)
nous avons décidé de ne plus utiliser jBPM car notre expérience initiale avec elle était pas la meilleure, à part cela la rétrocompatibilité a été brisée avec chaque nouvelle version qui a été publiée.
enfin la solution que nous avons utilisée, était de développer un moteur de flux de travail léger, basé sur des annotations ayant des activités et des processus comme abstractions. C'était plus ou moins une machine d'état qui faisait son travail.
un autre point qui vaut la peine d'être mentionné lors de la discussion sur le moteur de flux de travail est le fait qu'ils dépendent du support DB-it était le cas avec les deux moteurs de flux de travail que j'ai l'expérience avec ( sag webMethods et jPBM ) - et de mon expérience qui était un peu d'un overhead en particulier pendant les migrations entre les versions.
donc, je dirais que l'utilisation d'un moteur de flux de travail est autorisé seulement pour les applications qui en bénéficieraient vraiment et où la plupart du flux de travail des applications tourne autour du flux de travail lui-même sinon il y a de meilleurs outils pour le travail:
- wizards ( Spring Web Flow )
- auto-construit machines d'état
en ce qui concerne les machines d'état, je suis tombé sur cette réponse qui contient une collection assez complète de cadres java machine d'état.
Espérons que cette aide.
les moteurs de flux de travail basés sur Java comme Activiti, Bonita ou jBPM prennent en charge une large gamme de la spécification BPMN 2.0. Par conséquent, vous pouvez modéliser les processus de manière graphique. En outre, certains de ces moteurs ont des capacités de simulation comme Activiti (avec Activiti Crystalball). Si vous codez les processus vous-même, vous n'êtes pas aussi flexible lorsque vous devez changer le processus. Par conséquent, je conseillerais également d'utiliser un moteur BPM basé sur java.
j'ai fait une recherche concernant les moteurs Open Source BPMN 2.0. Voici les points clés qui étaient pertinents pour notre cas d'utilisation concrète:
1. Bonita:
Bonita a une approche de codage zéro qui signifie qu'ils fournissent un IDE facile à utiliser pour construire vos processus sans avoir besoin de codage. Pour ce faire, Bonita a le concept de connecteurs. Par exemple, si vous souhaitez consommer un service web, ils vous fournir un graphique wizzard. Le l'inconvénient est que vous devez écrire l'enveloppe de savon XML simple manuellement et le copier dans une boîte de texte graphique. Le problème avec cette approche est que vous pouvez seulement réaliser des cas d'utilisation qui sont prévus par Bonita. Si vous voulez intégrer un système pour lequel Bonita n'a pas développé de connecteur, vous devez coder un tel connecteur par vous-même, ce qui est très douloureux. Par exemple, Bonita offre un connecteur de savon pour consommer des services web de savon. Ce connecteur ne fonctionne qu'avec SOAP 1.2, mais pas pour SOAP 1.1 ( http://community.bonitasoft.com/answers/consume-soap-11-webservices-bonita-secure-web-service-connector ). Si vous avez une application héritée avec SOAP 1.1, vous ne pouvez pas l'intégrer facilement dans votre processus. La même chose est vraie pour les bases de données. Il n'y a que quelques connecteurs de base de données pour les versions de base de données dédiées. Si vous avez une version qui ne correspond pas à un connecteur, vous devez le coder vous-même.
en outre, Bonita n'a aucun soutien pour LDAP ou Active Directory Sync dans la free community edition qui est tout à fait un showstopper pour un environnement de production. Une autre chose à considérer est Que Bonita est sous licence GPL / LGPL ce qui pourrait causer des problèmes lorsque vous voulez intégrer Bonita dans une autre application d'entreprise. En outre, le soutien communautaire est très faible. Il y a plusieurs messages qui ont plus de 2 ans et ces messages ne sont toujours pas répondus.
une Autre chose importante est Alignement des activités informatiques. Les processus de modélisation sont une discipline de collaboration dans laquelle les TI et les analystes commerciaux sont impliqués. C'est pourquoi vous avez besoin d'outils adéquats pour les deux groupes d'utilisateurs (par exemple un Plugin Eclipse pour les développeurs et un modeleur web facile à utiliser pour les gens d'affaires). Bonita ne propose Bonita Studio, qui doit être installé sur votre machine. Cet IDE est très technique et ne convient pas aux utilisateurs professionnels. Par conséquent, il est très difficile de réaliser L'alignement Business-IT avec Bonita.
Bonita est un outil BPM pour des processus très simples et faciles. En raison de l'approche de zéro-codage, la courbe de lerning est très faible et vous pouvez commencer la modélisation très rapide. Vous avez besoin de moins de compétences en programmation et vous êtes en mesure de réaliser vos processus sans avoir besoin de codage. Mais dès que vos processus deviendront très complexes, Bonita pourrait ne pas être la meilleure solution en raison du manque de flexibilité. Vous pouvez seulement réaliser des cas d'utilisation qui sont prévus par Bonita.
2. jBPM:
jBPM est un moteur BPM Open Source très puissant qui a beaucoup de fonctionnalités. Le modeleur web prend même en charge les modèles préfabriqués de certains modèles de flux de travail de van der Aalst (workflowpatterns.com). L'Alignement Business-IT est réalisable car jBPM offre une intégration Eclipse ainsi qu'un modeleur basé sur le web. Un peu délicat est que vous ne pouvez définir que des formes dans le web modeler, mais pas dans le Plugin Eclipse, autant que je sache. Résumer jusqu', jBPM est un bon candidat pour l'utilisation dans l'entreprise. Notre spectacle a été l'évolutivité. jBPM est basé sur les règles-bave moteur. Cela conduit au fait que des instances entières du processus sont persistées comme des BLOBS dans la base de données. Il s'agit d'un showstopper critial quand vous considérez la recherche et l'évolutivité.
en outre, la courbe d'apprentissage est très élevée en raison de la complexité. jBPM n'offre pas une tâche de Service comme la norme BPMN suggère en revanche, vous devez définir vos propres tâches de service Java et vous devez les enregistrer manuellement dans le moteur, ce qui entraîne une programmation de niveau assez faible.
3. Activités:
en fin de compte, nous sommes allés avec Activiti parce que c'est un moteur très facile à utiliser à base de cadre. Il offre un Plugin Eclipse ainsi qu'un modeleur Web AngularJS moderne. De cette façon, vous pouvez réaliser d'Affaires IL-Alignement. L'API REST-est sécurisée par la sécurité des ressorts, ce qui signifie que vous pouvez étendre le moteur très facilement avec une seule fonction de connexion. En raison de la licence Apache 2.0, Il n'y a pas de copyleft, ce qui signifie que vous êtes complètement libre en termes d'utilisation et d'extensibilité, ce qui est très important dans un environnement productif.
en outre, la couverture BPMN est très bonne. Tous les éléments BPMN ne sont pas réalisés, mais je ne connais aucun moteur qui fait cela.
the Activiti Explorer est une interface de démonstration qui montre la utilisation des API Activiti. Comme ce frontend est basé sur VAADIN, il peut être étendu très facilement. La communauté est très active, ce qui signifie que vous pouvez obtenir de l'aide très rapidement si vous avez des problèmes.
Activiti offre de bons points d'intégration pour les formes externes-des technologies qui sont très importantes pour un usage productif. Les formes-technologies de tous les candidats sont très restrictives. Par conséquent, il est logique d'utiliser une technologie de forme standard comme XForms en combinaison avec moteur. Même ces choses plus complexes sont réalisables via l'attribut formKey.
Activiti ne suit pas l'approche du zéro-codage qui signifie que vous aurez besoin d'un peu de codage si vous voulez orchestrer des services. Mais même la communication avec les services SOAP peut être réalisée en utilisant une tâche de service Java et Apache CXF. L'effort de codage est faible.
j'espère que mes points clés peuvent aider en prenant une décision. Pour être clair, ce n'est pas une publicité pour l'Or. Le bon choix du produit dépend des cas concrets d'utilisation. Je veux seulement souligner les points les plus importants dans notre projet
la question Est ce que vous voulez vraiment réaliser lorsque vous demandez un moteur de flux de travail.
l'objectif général que vous souhaitez atteindre en utilisant un moteur de flux de travail, est de devenir plus flexible dans la modification de votre logique d'affaires pendant l'exécution. La partie modelage est certainement l'une des plus importantes ici. Le BPMN 2.0 est une norme de facto dans ce domaine et tous les moteurs examinés respectent cette norme.
Le deuxième objectif est de contrôler le processus d'affaires de la manière de décrire le " ce qui devrait se produire quand...' des questions. Et cette partie a beaucoup à voir avec les exigences commerciales auxquelles vous êtes confrontés dans votre projet.
certains des moteurs de flux de travail ( activité , JBPM ) peuvent vous aider à répondre à cette exigence en "codant" vos processus. Cela signifie que vous modélisez le ' ce qui devrait se passer quand.. paradigme d'une manière, où vous décidez quelle partie de votre code (E. g une tâche ou un événement) doit être exécuté par le moteur de flux de travail dans diverses situations. Ce concept fait l'objet de nombreuses discussions. Et les développeurs se demandent naturellement si cela ne peut même pas être mis en œuvre par eux-mêmes. (En fait, c'est pas si facile qu'il y paraît au premier coup d'oeil)
D'autres moteurs de flux de travail ( Imixs-flux de travail , Bonita ) peuvent vous aider à répondez au ' ce qui doit arriver quand...' exigence d'une plus centrée sur l'utilisateur. Il s'agit du domaine de la gestion des processus d'affaires axée sur l'humain, qui soutient les compétences et les activités humaines par un moteur de flux de travail orienté vers les tâches. L'accent est davantage mis sur la répartition des tâches et des processus au sein d'une organisation. Le moteur de flux de travail vous aide à distribuer une tâche à un certain utilisateur ou groupe d'utilisateurs et à sécuriser, enregistrer et surveiller un processus d'affaires en cours depuis longtemps. Peut-être que ce sont des les choses que vous ne voulez pas vraiment mettre en œuvre par vous-même.
donc mon conseil est de ne pas mélanger les choses qui doivent être considérées séparément, parce que le flux de travail couvre un domaine très large.
je voudrais ajouter mes commentaires. Lorsque vous choisissez un moteur prêt, comme jBPM, Activity et d'autres (Il ya beaucoup d'entre eux), puis vous devez passer un certain temps à apprendre le système lui-même, ce ne peut pas être une tâche facile. Surtout quand vous n'avez besoin que d'automatiser un petit morceau de code.
alors, quand un problème se produit, vous devez traiter avec le soutien du vendeur, qui n'est pas aussi rapide que vous l'imaginez. Même payer pour certains de conseil.
Et, enfin, la raison la plus importante, vous devez développer l'écosystème du moteur. Bien que les vendeurs aient tendance à dire que leur système est flexible pour être incorporé dans n'importe quel système, ce n'est peut-être pas le cas. Finalement, vous finissez par réécrire votre application pour qu'elle corresponde à l'écosystème BPM.
Oui, de mon point de vue, il n'y a aucune raison pour que vous écriviez les vôtres. La plupart des cadres Open Source BPM/Workflow sont extrêmement flexibles, vous avez juste besoin d'apprendre les bases. Si vous choisissez jBPM, vous obtiendrez beaucoup plus qu'un simple moteur de flux de travail, donc cela dépend de ce que vous essayez de construire.
Cheers
je vous recommande l'utilisation d'une solution out-of-the-box. Étant donné que le développement d'un moteur de flux de travail nécessite beaucoup de ressources et de temps, un moteur prêt à l'emploi est une meilleure option. Jetez un oeil à moteur de flux de travail . C'est un composant léger qui vous permet d'ajouter des flux de travail exécutables personnalisés de toute complexité à n'importe quelle solution Java.
I recently open sourced Piper ( https://github.com/creactiviti/piper ) un poids distribué et très léger, à base de ressort, moteur de flux de travail.
vous pouvez regarder @ Apache Ant pour construire un moteur de flux de travail.Elle est beaucoup plus robuste et est une pure machine d'état avec la plupart des exigences requises.
en outre, vous pouvez également intégrer différents codes/scripts dynamiques en langage Java/Groovy/JS et donc cela le rend très puissant. Il permet aussi des tâches de vulgarisation.
il y a une bonne quantité de tooling autour de lui ou vous pouvez construire sur elle si un IDE est nécessaire.