Question

Je suis en train de créer un outil de configuration interface utilisateur pour mon projet animal de compagnie. Un aspect de cet outil permet à l'utilisateur final DEFINE son orchestration. Il me faut ensuite enregistrer cette définition d'orchestration dans une base de données. Il y aura une version exécutable de cette définition dans un système en cours d'exécution. La version exécutable est créé de façon dynamique à la demande.

L'idée est de séparer les DEFINITION Exécutable la version pour que j'ai la possibilité de choisir la version d'exécution entre BPMN ou JPDL ou une solution de workflow POJO (BeanFlow) .

Limitation :. Je ne peux pas utiliser les éditeurs de BPMN qui viennent avec des cadres comme jBPM, Activiti etc que je wan't d'utiliser ma propre interface utilisateur qui est spécifique à mon domaine

J'ai besoin des suggestions pour PERSISTERONT la définition.

  1. Dois-je utiliser des tables de SGBDR? Si oui, est-il un schéma db je peux emprunter proche de concepts d'orchestration?

  2. Devrais-je sérialiser ma définition à BPMN / JPDL instance de document XML?

  3. Y a-t-il d'autres formats simples que je peux utiliser?

Était-ce utile?

La solution

Par "orchestration" Je suppose que vous voulez dire une machine d'état finie . Lorsque les diktats de l'état actuel ce que les transitions peuvent être suivies pour d'autres Etats. La représentation des états et des transitions comme arêtes et sommets produit souvent un , mais il y a des moments lorsque le cycle de volonté graphique (par exemple projet - soumettre à l'approbation -> en attente d'approbation - rejeter -> projet).

Dans la pratique, la séparation de la définition des appels d'exécution pour un format de persistance qui peut facilement accueillir la personnalisation. À mesure que votre système évolue, vous trouverez un certain nombre de cas de pointe non anticipés dont la solution ne devrait pas nécessiter la modification d'un schéma de persistance, code uniquement. Cela implique XML ou une solution NoSQL - quelque chose dont le schéma est facilement changé ou non existant.

Maintenant, après avoir écrit ma propre définition XML à cet effet (pour des raisons sans intérêt, j'exclurai), ma suggestion utilise JPDL (ou BPMN). La raison est leur définition intègrent probablement ce que vous envisagez maintenant, allez à l'avenir, et permettre la personnalisation - telles que la pendaison des données arbitraires ou le comportement de leur à un moment donné. Vous obtenez également l'avantage d'outils déjà construit - pas seulement l'interface utilisateur -. Pour faire face à la détection du cycle et en veillant à un chemin à l'achèvement par exemple

Une partie des intéressantes caractéristiques que je sais JPDL possède sont une capacité d'aider les processus fourchue de fusion, chronométré tâches (y compris celles qui se répètent périodiquement) et les installations pour l'envoi d'une notification. Ce dernier élément - notification - porte une autre exposition. L'une des choses que j'ai trouvé avec mon propre système est la nécessité d'envoyer des e-mail configurable dont le contenu est basé sur les données qui passent par. Ces moteurs existants font que relativement facile en fournissant un moyen de plug-in des variables, par exemple, dans le texte qui est ensuite évalué dynamiquement lors de l'exécution avant la transmission. Ils fournissent également des ponts entre le moteur et tout magasin d'utilisateur dans le but d'envoyer des notifications aux groupes de personnes, les tâches et l'application de la politique de sécurité.

Enfin, en fonction de la portée de votre système, vous serez probablement encore en utilisant une base de données aussi bien. Ce que je suggère est le stockage de XML et des données orchestrée dans la base de données dans un format sérialisé. Ensuite, si les données sont modifiées comme il se déplace à travers l'exécution, écrire sérialisation des données - et peut-être flux de travail si elle est également modifiée -. Dans une table de journal historique / audit et

Autres conseils

Je ne voudrais pas utiliser des tables de SGBDR, ou si vous le faites, stocker les définitions blobs de texte. Essayer de faire des enregistrements pour la définition est une mauvaise idée, car il est beaucoup plus rigide et difficile de changer votre définition au fil du temps. Beaucoup de gens utilisent des approches différentes, mais j'utiliser JSON ou YAML, et éviter XML. La motivation pour cela est de le rendre aussi simple que possible. Essayer d'utiliser XML, en particulier un format spécifique formalisés de XML va vous faire passer beaucoup plus de temps à répondre à une spécification exacte qui ne fait pas vraiment quoi que ce soit à l'aide ce que vous essayez d'accomplir. JSON et YAML sont à la fois très facile à travailler dans une perspective de code. YAML est plus facilement lisible par l'homme et plus facile à modifier et n'est pas aussi difficile pour les signes de ponctuation et d'échapper JSON. JSON est plus largement utilisé et est plus petit que YAML. JSON a aussi une contrepartie binaire, BSON, si la taille du document est une préoccupation.

Une fois que vous avez un importateur / exportateur qui va à / de vos objets internes à votre format de données, puis persistant en utilisant SGBDR, ou d'autres mécanismes, sera simple. Vous pouvez même utiliser CouchDB, ce qui pourrait offrir d'autres avantages pour votre application et peut être un grand ajustement.

Très bonne question! Voici mes deux cents:

  1. SGBDR : si vous faites cela, vous serez en mesure d'interroger les instances de flux de travail, par exemple, qui sont des jetons au « nœud X »
  2. Stockage XML comme clob: la simplicité est la vérité de cette solution, mais vous ne pouvez pas vraiment interroger ces simplement les obtenir par id
  3. NoSQL : il y a beaucoup de solutions différentes pour des problèmes différents. MongoDB est une solution populaire, il fournit le document persistance orienté.

Que diriez-vous d'une sérialisation simple de l'interface utilisateur composée en utilisant par exemple XStream puis stocker les bits sérialisés dans la base de données en tant que colonne binaire. Ensuite, lorsque l'utilisateur se connecte, obtenir les données associées, deserialise, Initialiser si nécessaire et l'affichage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top