JBPM 3 : EL resolution issue
rododendro.ivan Nov 24, 2011 12:17 PMHi all,
I'm quite new to JBPM / Seam, I'm facing a problem of missing resolution of a Seam component in a jpdl transition : in a process definition we use a reference to a seam component called "etatEvenenemt", normally it works. In the transition "ok" of the node "presenter" EL cannot resolve "etatEvenement" and the property is set to "0". I have no other component with the same name. No exception is thrown
Please help, I'm getting crazy...
JBoss 4.2
Seam 2.1.1
this is the process definition :
<process-definition name="gestionEvenement" xmlns="urn:jbpm.org:jpdl-3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jbpm.org:jpdl-3.2 http://jbpm.org/xsd/jpdl-3.2.xsd"> <start-state name="start"> <transition to="instruire"> <action expression="#{evenementHome.changeEtat(etatEvenement.etatEvenementEnCoursDInstruction)}" /> <create-timer name="rappelInstruction" duedate="2 business days"> <action class="fr.vdm.eventsoe.commun.MailJbpmVdm"> <to> #{evenementList.getEvenementParId(Id).instructeur.email} </to> <subject> EventsOE - Rappel d'instruction pour l'évènement F#{evenementList.getEvenementParId(Id).code.code} </subject> <text> <![CDATA[ --- MESSAGE AUTOMATIQUE --- Le delai de 48h pour l'instruction de l'évènement F#{evenementList.getEvenementParId(Id).code.code} "#{evenementList.getEvenementParId(Id).nom}" est écoulé. --- MESSAGE AUTOMATIQUE --- PS: Ce mail vous a été envoyé de manière automatique. Il est inutile d'y répondre. ]]></text> </action> </create-timer> </transition> </start-state> <task-node name="instruire"> <event type="node-enter"> <script> <expression> viewId = "/evenement.seam"; objId = Id; objNameId = "evenementId"; </expression> <variable name='viewId' access='write' mapped-name='viewId' /> <variable name='objId' access='write' mapped-name='objId' /> <variable name='objNameId' access='write' mapped-name='objNameId' /> </script> </event> <task name="Instruire un dossier" duedate="2 business days" description="Evenement #{gestionEvenementCommun.value}"> <assignment pooled-actors="#{ (not empty evenementHome and not empty evenementHome.instance and not empty evenementHome.instance.instructeur) ? evenementHome.instance.instructeur.username : cIHome.instance.evenement.instructeur.username }" /> </task> <transition to="valider" name="valider"> <action expression="#{evenementHome.changeEtat(etatEvenement.etatEvenementValidationInstruction)}" /> <cancel-timer name="rappelInstruction" /> </transition> <transition to="completer" name="completer"> <action expression="#{evenementHome.changeEtat(etatEvenement.etatEvenementAttente)}" /> <cancel-timer name="rappelInstruction" /> </transition> </task-node> <task-node name="valider"> <event type="node-enter"> <script> <expression> viewId = "/evenement.seam"; objId = Id; objNameId = "evenementId"; </expression> <variable name='viewId' access='write' mapped-name='viewId' /> <variable name='objId' access='write' mapped-name='objId' /> <variable name='objNameId' access='write' mapped-name='objNameId' /> </script> </event> <task name="Valider un dossier" duedate="1 business day" description="Evenement #{gestionEvenementCommun.value}"> <assignment pooled-actors="#{evenementHome.instance.autorite.username}" /> </task> <transition to="diffuser" name="diffuser"> <action expression="#{evenementHome.changeEtat(etatEvenement.etatEvenementDiffusionAuxServices)}" /> </transition> <transition to="instruire" name="instruire"> <action expression="#{evenementHome.changeEtat(etatEvenement.etatEvenementEnCoursDInstruction)}" /> </transition> </task-node> <task-node name="completer"> <event type="node-enter"> <script> <expression> viewId ="/ajoutCI.seam"; objNameId ="cIId"; </expression> <variable name='viewId' access='write' mapped-name='viewId' /> <variable name='objNameId' access='write' mapped-name='objNameId' /> </script> </event> <task name="Completer un dossier" duedate="15 business days" description="Evenement #{gestionEvenementCommun.value}"> <assignment pooled-actors="#{identity.username}" /> </task> <transition to="instruire" name="instruire"> <action expression="#{cIHome.instance.evenement.setEtat(etatEvenement.etatEvenementEnCoursDInstruction)}" /> </transition> </task-node> <task-node name="diffuser"> <event type="node-enter"> <create-timer duedate="15 business days" transition="compiler" /> </event> <task name="Diffusion du dossier" /> <transition to="compiler" name="compiler"> <action expression="#{avisHome.changeEtat(etatEvenement.etatEvenementAttentePresentation)}" /> </transition> </task-node> <task-node name="compiler"> <event type="node-enter"> <script> <expression> viewId ="/compilerPrescriptions.seam"; objNameId ="evenementId"; objId = Id; </expression> <variable name='viewId' access='write' mapped-name='viewId' /> <variable name='objNameId' access='write' mapped-name='objNameId' /> <variable name='objId' access='write' mapped-name='objId' /> </script> </event> <task name="Compiler les prescriptions" duedate="1 business days" description="Evenement #{gestionEvenementCommun.value}"> <assignment pooled-actors="#{identity.username}" /> </task> <transition to="presenter" name="presenter"> <action expression="#{compilationHome.changeEtat(etatEvenement.etatEvenementValidationCabinetMaire)}" /> </transition> </task-node> <task-node name="presenter"> <event type="node-enter"> <script> <expression> viewId ="/saisirDecisionCab.seam"; objNameId ="evenementId"; objId = Id; </expression> <variable name='viewId' access='write' mapped-name='viewId' /> <variable name='objNameId' access='write' mapped-name='objNameId' /> <variable name='objId' access='write' mapped-name='objId' /> </script> </event> <task name="Saisir une decision du cabinet" duedate="5 business days" description="Evenement #{gestionEvenementCommun.value}"> <assignment pooled-actors="#{identity.username}" /> </task> <transition to="Ok" name="Ok"> <action expression="#{saisirDecisionCabHome.instance.setEtat(etatEvenement.etatEvenementAvisFavorable)}" /> </transition> <transition to="NOk" name="NOk"> <action expression="#{saisirDecisionCabHome.instance.setEtat(etatEvenement.etatEvenementAvisDefavorable)}" /> </transition> </task-node> <task-node name="Ok"> <transition to="termine" /> <transition to="presenter"></transition> </task-node> <task-node name="NOk"> <transition to="termine" /> <transition to="presenter"></transition> </task-node> <end-state name="termine" /> <event type="process-start"> <action expression="#{evenementHome.processStart}" /> <!-- <action expression="#{evenementHome.processStart}" /> <script name="affecterVars"> <expression> evt = executionContext.getVariable("Evenement"); id = executionContext.getVariable("Id"); ins = executionContext.getVariable("Instructeur"); dat = executionContext.getVariable("DateFin"); </expression> <variable name='Evenement' access='write' mapped-name='evt' /> <variable name='Instructeur' access='write' mapped-name='ins' /> <variable name='Id' access='write' mapped-name='id' /> <variable name='DateFin' access='write' mapped-name='dat' /> </script> --> </event> </process-definition>
this is the seam component which (sometimes) is not resolved.
/** * Utilisé de partout pour les constantes qu'elle contient, on a decidé ivan et moi de la garder et de la renomer. * @author OYA * 25/10/2011 */ @Name("etatEvenement") @Scope(ScopeType.STATELESS) public class EtatEvenement implements Serializable { public static final Integer etatEvenementInitialise = 0; public static final Integer etatEvenementHorsPerimetre = 1; public static final Integer etatEvenementHorsDelai = 2; public static final Integer etatEvenementEnCoursDInstruction = 3; public static final Integer etatEvenementDiffusionAuxServices = 4; public static final Integer etatEvenementValidationCabinetMaire = 5; public static final Integer etatEvenementAvisFavorable = 6; public static final Integer etatEvenementAvisDefavorable = 7; public static final Integer etatEvenementAvisReserve = 8; public static final Integer etatEvenementAnnule = 9; public static final Integer etatEvenementRefuse = 10; public static final Integer etatEvenementTermine = 11; public static final Integer etatEvenementAttente = 12; public static final Integer etatEvenementValidationInstruction = 13; public static final Integer etatEvenementAttentePresentation = 14; public EtatEvenement(){ super(); } /** * @return the etatEvenementInitialise */ public Integer getEtatEvenementInitialise() { return etatEvenementInitialise; } /** * @return the etatEvenementHorsPerimetre */ public Integer getEtatEvenementHorsPerimetre() { return etatEvenementHorsPerimetre; } /** * @return the etatEvenementHorsDelai */ public Integer getEtatEvenementHorsDelai() { return etatEvenementHorsDelai; } /** * @return the etatEvenementEnCoursDInstruction */ public Integer getEtatEvenementEnCoursDInstruction() { return etatEvenementEnCoursDInstruction; } /** * @return the etatEvenementDiffusionAuxServices */ public Integer getEtatEvenementDiffusionAuxServices() { return etatEvenementDiffusionAuxServices; } /** * @return the etatEvenementValidationCabinetMaire */ public Integer getEtatEvenementValidationCabinetMaire() { return etatEvenementValidationCabinetMaire; } /** * @return the etatEvenementAvisFavorable */ public Integer getEtatEvenementAvisFavorable() { return etatEvenementAvisFavorable; } /** * @return the etatEvenementAvisDefavorable */ public Integer getEtatEvenementAvisDefavorable() { return etatEvenementAvisDefavorable; } /** * @return the etatEvenementAvisReserve */ public Integer getEtatEvenementAvisReserve() { return etatEvenementAvisReserve; } /** * @return the etatEvenementAnnule */ public Integer getEtatEvenementAnnule() { return etatEvenementAnnule; } /** * @return the etatEvenementRefuse */ public Integer getEtatEvenementRefuse() { return etatEvenementRefuse; } /** * @return the etatEvenementTermine */ public Integer getEtatEvenementTermine() { return etatEvenementTermine; } /** * @return the etatEvenementAttente */ public Integer getEtatEvenementAttente() { return etatEvenementAttente; } /** * @return the etatEvenementValidationInstruction */ public Integer getEtatEvenementValidationInstruction() { return etatEvenementValidationInstruction; } public Integer getEtatEvenementAttentePresentation() { return etatEvenementAttentePresentation; } }