[jboss-user] [JBoss jBPM] - Re: How to deploy a BPEL process using the APIs?

alex.guizar@jboss.com do-not-reply at jboss.com
Wed Jul 9 06:00:03 EDT 2008


To deploy programmatically, use the following code:
public void deployProcessDefinition(String fileName) {
  |     ProcessDefinition processDefinition = readProcessDefinition(
  |       new FileInputStream(fileName), fileName);
  |     deployProcessDefinition(processDefinition);
  |     // build and deploy web module, if the language is BPEL
  |     if (processDefinition instanceof BpelProcessDefinition)
  |       deployWebModule((BpelProcessDefinition) processDefinition, fileName);
  | }
The file name is expected to reference a process archive. The support methods are presented below.
private ProcessDefinition readProcessDefinition(InputStream fileSource, String fileName)
  |       throws IOException {
  |     try {
  |       ProcessArchive processArchive = new ProcessArchive(new ZipInputStream(fileSource));
  |       log.debug("loaded process archive: " + fileName);
  | 
  |       ProcessDefinition processDefinition = processArchive.parseProcessDefinition();
  |       log.debug("read process definition: " + processDefinition.getName());
  | 
  |       return processDefinition;
  |     }
  |     finally {
  |       fileSource.close();
  |     }
  |   }
  | 
  |   private void deployProcessDefinition(ProcessDefinition processDefinition) {
  |     JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
  |     try {
  |       if (processDefinition instanceof BpelProcessDefinition) {
  |         BpelGraphSession graphSession = BpelGraphSession.getContextInstance(jbpmContext);
  |         graphSession.deployProcessDefinition((BpelProcessDefinition) processDefinition);
  |       }
  |       else
  |         jbpmContext.deployProcessDefinition(processDefinition);
  |       log.info("deployed process definition: " + processDefinition.getName());
  |     }
  |     catch (RuntimeException e) {
  |       jbpmContext.setRollbackOnly();
  |       throw e;
  |     }
  |     finally {
  |       jbpmContext.close();
  |     }
  |   }
  | 
  |   private void deployWebModule(BpelProcessDefinition processDefinition, String fileName) {
  |     File moduleFile = new File(deployDirectory, extractFilePrefix(fileName) + ".war");
  | 
  |     WebModuleBuilder builder = new WebModuleBuilder();
  |     builder.setModuleFile(moduleFile);
  |     builder.buildModule(processDefinition);
  | 
  |     if (builder.getProblemHandler().getProblemCount() > 0)
  |       throw new BpelException("could not build web module for: " + processDefinition);
  | 
  |     log.info("deployed web module: " + moduleFile.getName());
  |   }
  | 
  |   private static String extractFilePrefix(String fileName) {
  |     int dotIndex = fileName.lastIndexOf('.');
  |     return dotIndex != -1 ? fileName.substring(0, dotIndex) : fileName;
  |   }
  | }
In method deployWebModule, the variable deployDirectory references the app server's deploy directory. Inside JBoss, this directory can be retrieved from the system properties as follows.
String deployDirectory = System.getProperty("jboss.server.home.dir") + File.separatorChar + "deploy";
The above snippets were adapted from class DeploymentServlet; you can review its source in our online repository.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4163241#4163241

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4163241



More information about the jboss-user mailing list