error deploying by code
simonbaker May 11, 2007 2:15 PMI'm trying to deploy our ProcessDefinition by code rather than manually. We're getting an error but I don't know what it might mean:
09:36:53,968 [Start EFile Destruct Workflow-admin] INFO JBPMAccessor : [JBPMAccessor.startEfileDestructionProcess] Did not find latest Process Definition of JBPMEfileProcess...
09:36:53,968 [Start EFile Destruct Workflow-admin] INFO JBPMAccessor : [JBPMAccessor.startEfileDestructionProcess] This was the error: org.jbpm.JbpmException: couldn't find process definition 'JBPMEfileProcess'
09:36:53,968 [Start EFile Destruct Workflow-admin] INFO JBPMAccessor : [JBPMAccessor.startEfileDestructionProcess] Attempting to deploy Process Definition of JBPMEfileProcess...
09:36:53,968 [Start EFile Destruct Workflow-admin] INFO JBPMAccessor : Entering deployNewProcessDefinition
09:36:53,968 [Start EFile Destruct Workflow-admin] DEBUG JbpmContextInfo : creating jbpm context with service factories '[message, tx, scheduler, authentication, persistence, logging]'
09:36:53,968 [Start EFile Destruct Workflow-admin] DEBUG JbpmContext : creating org.jbpm.JbpmContext@16f4ce0
09:36:53,968 [Start EFile Destruct Workflow-admin] INFO JBPMAccessor : Retrieved jbpmContext.
09:36:54,031 [Start EFile Destruct Workflow-admin] WARN JpdlParser : couldn't set xml parser property property 'http://java.sun.com/xml/jaxp/properties/schemaLanguage' to 'http://www.w3.org/2001/XMLSchema'
org.xml.sax.SAXNotRecognizedException: Property: http://java.sun.com/xml/jaxp/properties/schemaLanguage
at org.apache.crimson.parser.XMLReaderImpl.setProperty(XMLReaderImpl.java:257)
at org.apache.crimson.jaxp.SAXParserImpl.setProperty(SAXParserImpl.java:177)
at org.jbpm.jpdl.xml.JpdlParser.createXmlReader(JpdlParser.java:77)
at org.jbpm.jpdl.xml.JpdlParser.createSaxReader(JpdlParser.java:62)
at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:56)
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:142)
at org.jbpm.graph.def.ProcessDefinition.parseXmlReader(ProcessDefinition.java:181)
at com.rco.bpm.util.JBPMAccessor.deployNewProcessDefinition(JBPMAccessor.java:327)
at com.rco.bpm.util.JBPMAccessor.startEfileDestructionProcess(JBPMAccessor.java:71)
at com.rco.jsp.CJobs2$CStartElectronicFileDestructionWorkflowJob.runJob(CJobs2.java:197)
at com.rco.jsp.CJobControl$CJobThread.run(CJobControl.java:2246)
The ap runs under Tomcat. We have another installation where we deployed the process definition manually and we do not have any problem with the jBPM engine. I'm wondering if I have some wrong or missing jar on my system. In case it helps, the code that creates this error is below:
/** * Method to create a new JBPM process * * @param orgNumber The organization number for the new process * @param suborgNumber The suborg number for the new process * @return processID The unique ID of this newly created destruction task */ public static long startEfileDestructionProcess(String orgNumber, String suborgNumber) throws RMSException{ long processID = -1; log.info("Entering startEfileDestructionProcess"); //Check if the jbpmConfiguration has been setup if( jbpmConfiguration == null ){ //retrieve it log.info("JBPMConfiguration was null, creating instance."); jbpmConfiguration = JbpmConfiguration.getInstance(); } //Doing a try and catch for all so the RMSException can contain the relevant info // Lookup the pojo persistence context-builder that is configured above JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); log.info("Retrieved jbpmContext."); try { // Make sure we're deployed. String strFilePath = "C:\\Documents and Settings\\All Users\\Documents\\RoyImage2000\\application\\webapps\\Image2000\\WEB-INF\\classes\\processdefinition.xml"; try { log.info("[JBPMAccessor.startEfileDestructionProcess] Finding latest Process Definition of JBPMEfileProcess " + " in file: " + strFilePath); jbpmContext.getGraphSession().findLatestProcessDefinition("JBPMEfileProcess"); log.info("[JBPMAccessor.startEfileDestructionProcess] Found latest Process Definition of JBPMEfileProcess"); } catch (JbpmException je) { // Procession definition probably not deployed. Deploy it. log.info("[JBPMAccessor.startEfileDestructionProcess] Did not find latest Process Definition of JBPMEfileProcess..."); log.info("[JBPMAccessor.startEfileDestructionProcess] This was the error: " + je.toString()); log.info("[JBPMAccessor.startEfileDestructionProcess] Attempting to deploy Process Definition of JBPMEfileProcess..."); deployNewProcessDefinition(strFilePath); log.info("[JBPMAccessor.startEfileDestructionProcess] After attempting to deploy Process Definition of JBPMEfileProcess..."); } log.info("Creating process"); //Create a new Process Instance of JBPMEfileProcess ProcessInstance processInstance = jbpmContext.newProcessInstance("JBPMEfileProcess"); log.info("Created process"); processID = processInstance.getId(); log.info("ProcessID is ["+processID+"]"); //Set the key variables processInstance.getContextInstance().createVariable("OrgNumber",orgNumber); log.info("Set Org Number"); processInstance.getContextInstance().createVariable("SubOrgNumber",suborgNumber); log.info("Set SubOrg Number"); // Now the processInstance is saved in the database. So the // current state of the execution of the process is stored in the // database. processInstance.signal(); jbpmContext.save(processInstance); log.info("Saved New Process"); }catch(Exception e){ String message = "Error creating new RMS process["+e.getMessage()+"]"; e.printStackTrace(); throw new RMSException(1,message); } finally { // Tear down the pojo persistence context. jbpmContext.close(); } log.info("Exiting startEfileDestructionProcess, created processID["+processID+"]"); return processID; } /** * Method to deploy a new Process Definition, this method most likely will be removed * or otherwise protected * @param arg The full filepath of the new process definition to deploy */ public static void deployNewProcessDefinition(String arg){ log.info("Entering deployNewProcessDefinition"); //Check if the jbpmConfiguration has been setup if( jbpmConfiguration == null ){ //retrieve it log.info("JBPMConfiguration was null, creating instance."); jbpmConfiguration = JbpmConfiguration.getInstance(); } //Doing a try and catch for all so the RMSException can contain the relevant info // Lookup the pojo persistence context-builder that is configured above JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); log.info("Retrieved jbpmContext."); if( arg == null || arg.length() == 0 ){ log.error("File name must be specified, cannot deploy new process."); } else{ try { FileReader fr = new FileReader(arg); ProcessDefinition newProcessDefinition = ProcessDefinition.parseXmlReader(fr); log.info("Deploying process"); jbpmContext.deployProcessDefinition(newProcessDefinition); log.info("Deployed New ProcessDefinition"); }catch(Exception e){ e.printStackTrace(); } finally { // Tear down the pojo persistence context. jbpmContext.close(); } } log.info("Exiting deployNewProcessDefinition"); }