<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Dedicated job-executor for each web application possible? in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167934#M121425</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for sharing the solution. We played around with a simmilar idea, but it's not really doable in a clean/generic way, so we decided this usecase should be covered by the user's themselves, using all available pluggability points.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 10 Mar 2014 09:35:29 GMT</pubDate>
    <dc:creator>frederikherema1</dc:creator>
    <dc:date>2014-03-10T09:35:29Z</dc:date>
    <item>
      <title>Dedicated job-executor for each web application possible?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167931#M121422</link>
      <description>Hi,we plan a scenario with multiple web applications running on the same jboss instance using the same activiti database.Each web application handles one type of process. The web-applications are packaged in war-files.Is it possible to have a dedicated job executer for each web-application? The job</description>
      <pubDate>Wed, 29 Jan 2014 10:22:45 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167931#M121422</guid>
      <dc:creator>ollib</dc:creator>
      <dc:date>2014-01-29T10:22:45Z</dc:date>
    </item>
    <item>
      <title>Re: Dedicated job-executor for each web application possible?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167932#M121423</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Oliver.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;DefaultJobExecutor implementation does not support this kind of filtering. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You can try to implement your JobExecutor with this kind of filtering.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regard&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Martin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 30 Jan 2014 07:39:45 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167932#M121423</guid>
      <dc:creator>martin_grofcik</dc:creator>
      <dc:date>2014-01-30T07:39:45Z</dc:date>
    </item>
    <item>
      <title>Re: Dedicated job-executor for each web application possible?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167933#M121424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I came up with this solution. Not ideal, I know. Perhaps some kind of configurable filter can be implemented in the next version of Activiti &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;public class MyJobExecutor extends DefaultJobExecutor {&lt;BR /&gt;&amp;nbsp; private static Logger logger = Logger.getLogger(MyJobExecutor.class.getName());&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; private String processDefinitionId;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp; protected void ensureInitialization() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; acquireJobsCmd = new MyAcquireJobsCmd(this, processDefinitionId);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; acquireJobsRunnable = new AcquireJobsRunnable(this);&amp;nbsp; &lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; public void setProcessDefinitionId(String processDefinitionId) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.processDefinitionId = processDefinitionId;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; public String getProcessDefinitionId() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return processDefinitionId;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;}&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;public class MyAcquireJobsCmd implements Command&amp;lt;AcquiredJobs&amp;gt; {&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; private static Logger logger = Logger.getLogger(MyAcquireJobsCmd.class.getName());&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; private final JobExecutor jobExecutor;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; private String processDefinitionId;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; public MyAcquireJobsCmd(JobExecutor jobExecutor, String processDefinitionId) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.jobExecutor = jobExecutor;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.processDefinitionId = processDefinitionId;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&lt;BR /&gt; public AcquiredJobs execute(CommandContext commandContext) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("—-&amp;gt; execute");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String lockOwner = jobExecutor.getLockOwner();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int lockTimeInMillis = jobExecutor.getLockTimeInMillis();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int maxNonExclusiveJobsPerAcquisition = jobExecutor.getMaxJobsPerAcquisition();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AcquiredJobs acquiredJobs = new AcquiredJobs();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;JobEntity&amp;gt; jobs = commandContext&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getJobEntityManager()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .findNextJobsToExecute(new Page(0, maxNonExclusiveJobsPerAcquisition));&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (JobEntity job: jobs) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;String&amp;gt; jobIds = new ArrayList&amp;lt;String&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (job != null &amp;amp;&amp;amp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !acquiredJobs.contains(job.getId()) &amp;amp;&amp;amp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringUtils.startsWith(job.getProcessDefinitionId(), processDefinitionId)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (job.isExclusive() &amp;amp;&amp;amp; job.getProcessInstanceId() != null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // acquire all exclusive jobs in the same process instance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // (includes the current job)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;JobEntity&amp;gt; exclusiveJobs = commandContext.getJobEntityManager()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .findExclusiveJobsToExecute(job.getProcessInstanceId());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (JobEntity exclusiveJob : exclusiveJobs) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(exclusiveJob != null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockJob(exclusiveJob, lockOwner, lockTimeInMillis);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jobIds.add(exclusiveJob.getId());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockJob(job, lockOwner, lockTimeInMillis);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jobIds.add(job.getId());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; acquiredJobs.addJobIdBatch(jobIds);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return acquiredJobs;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; protected void lockJob(JobEntity job, String lockOwner, int lockTimeInMillis) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; job.setLockOwner(lockOwner);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GregorianCalendar gregorianCalendar = new GregorianCalendar();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gregorianCalendar.setTime(ClockUtil.getCurrentTime());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gregorianCalendar.add(Calendar.MILLISECOND, lockTimeInMillis);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; job.setLockExpirationTime(gregorianCalendar.getTime());&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; public void setProcessDefinitionId(String processDefinitionId) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.processDefinitionId = processDefinitionId;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; public String getProcessDefinitionId() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return processDefinitionId;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/CODE&gt;&lt;BR /&gt;&lt;CODE&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;lt;bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="databaseType" value="oracle"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="dataSource" ref="datasource"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="transactionManager" ref="transactionManager"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="databaseSchemaUpdate" value="false"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="jpaEntityManagerFactory" ref="entityManagerFactory"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="deploymentResources" value="classpath*:/org/olli/mvc/firstProcess.bpmn" /&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="jobExecutor" ref="jobExecutor"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="jobExecutorActivate" value="true" /&amp;gt;&lt;BR /&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;lt;bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="processEngineConfiguration" ref="processEngineConfiguration"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; &amp;lt;bean id="jobExecutor" class="org.olli.mvc.activiti.MyJobExecutor"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="processDefinitionId" value="myProcess"&amp;gt;&amp;lt;/property&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="waitTimeInMillis" value="30000" /&amp;gt;&lt;BR /&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/CODE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Mar 2014 06:33:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167933#M121424</guid>
      <dc:creator>ollib</dc:creator>
      <dc:date>2014-03-07T06:33:05Z</dc:date>
    </item>
    <item>
      <title>Re: Dedicated job-executor for each web application possible?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167934#M121425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for sharing the solution. We played around with a simmilar idea, but it's not really doable in a clean/generic way, so we decided this usecase should be covered by the user's themselves, using all available pluggability points.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Mar 2014 09:35:29 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/dedicated-job-executor-for-each-web-application-possible/m-p/167934#M121425</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2014-03-10T09:35:29Z</dc:date>
    </item>
  </channel>
</rss>

