package org.jbpm.seam; import org.jbpm.JbpmContext; import org.jbpm.db.JobSession; import org.jbpm.job.Job; import org.jbpm.job.executor.JobExecutor; import org.jbpm.job.executor.JobExecutorThread; public class CustomJobExecutorThread extends JobExecutorThread { private JobExecutor jobExecutor; public CustomJobExecutorThread(String name, JobExecutor jobExecutor) { super(name, jobExecutor); this.jobExecutor = jobExecutor; } protected void executeJob(Job job) { JbpmContext jbpmContext = jobExecutor.getJbpmConfiguration().createJbpmContext(); try { JobSession jobSession = jbpmContext.getJobSession(); jobSession.reattachJob(job); // custom stuff job.getProcessInstance().getContextInstance().setVariable("custom", Boolean.TRUE); if (job.execute(jbpmContext)) jobSession.deleteJob(job); } catch (Exception e) { e.printStackTrace(); jbpmContext.setRollbackOnly(); } finally { jbpmContext.close(); } } }