<?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: Cluster aware scheduled jobs in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273258#M226388</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi, I have a cluster consisting of two machines with Alfresco 5.0 Enterprise installed and would like to create a job that gets executed on only one of these machines at a time. I have followed this article &lt;/SPAN&gt;&lt;A href="http://docs.alfresco.com/5.1/references/dev-extension-points-scheduled-jobs.html" rel="nofollow noopener noreferrer"&gt;http://docs.alfresco.com/5.1/references/dev-extension-points-scheduled-jobs.html&lt;/A&gt;&lt;SPAN&gt;, but without success - my job executes simultaneously on both nodes. Do you have any suggestions?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 24 Jun 2016 21:52:09 GMT</pubDate>
    <dc:creator>mkopacz</dc:creator>
    <dc:date>2016-06-24T21:52:09Z</dc:date>
    <item>
      <title>Cluster aware scheduled jobs</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273254#M226384</link>
      <description>Hello,We have setup a cluster of 2 nodes (active/active) and would like to make our custom scheduled jobs cluster aware. MeansJob will be configured on both the node, but should get executed on one node only and not on both.I am exploring JobLockService for this. any one tried before and would like</description>
      <pubDate>Fri, 03 Aug 2012 08:09:15 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273254#M226384</guid>
      <dc:creator>nikes</dc:creator>
      <dc:date>2012-08-03T08:09:15Z</dc:date>
    </item>
    <item>
      <title>Re: Cluster aware scheduled jobs</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273255#M226385</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The JobLockService is the way to do this.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Basically the jobs can execute on any node in the cluster but only one at a time.&amp;nbsp;&amp;nbsp; It allows you to take a system wide lock with a timeout (so if your system is shut down or stops the lock will expire.)&amp;nbsp; And in addition you can extend the lock as your job progresses, you can either do that explicitly or you can set up a callback that calls you back to say is your job still alive.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Look at the alfresco source code for examples of its use.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 Aug 2012 08:43:46 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273255#M226385</guid>
      <dc:creator>mrogers</dc:creator>
      <dc:date>2012-08-03T08:43:46Z</dc:date>
    </item>
    <item>
      <title>Re: Cluster aware scheduled jobs</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273256#M226386</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks mrogers &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am able to run jobs using JobLockService now.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For anyone looking for an example check these code&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/java/org/alfresco/repo/search/impl/solr/SolrBackupClient.java" rel="nofollow noopener noreferrer"&gt;http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/java/org/alfresco/repo/search/impl/solr/SolrBackupClient.java&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/java/org/alfresco/repo/content/cleanup/ContentStoreCleaner.java" rel="nofollow noopener noreferrer"&gt;http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/java/org/alfresco/repo/content/cleanup/ContentStoreCleaner.java&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Aug 2012 06:31:12 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273256#M226386</guid>
      <dc:creator>nikes</dc:creator>
      <dc:date>2012-08-23T06:31:12Z</dc:date>
    </item>
    <item>
      <title>Re: Cluster aware scheduled jobs</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273257#M226387</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Another way of doing it is by extending the AbstractScheduledLockedJob class and overriding &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void executeJob(JobExecutionContext context)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throws JobExecutionException {} method.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The parent class manages locking using the method&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; /**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Lazily update the job lock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void refreshLock()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pair&amp;lt;Long, String&amp;gt; lockPair = lockThreadLocal.get();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lockPair == null)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String lockToken = jobLockService.getLock(lockQName, LOCK_TTL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Long lastLock = new Long(System.currentTimeMillis());&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // We have not locked before&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockPair = new Pair&amp;lt;Long, String&amp;gt;(lastLock, lockToken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lockThreadLocal.set(lockPair);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long now = System.currentTimeMillis();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long lastLock = lockPair.getFirst().longValue();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String lockToken = lockPair.getSecond();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Only refresh the lock if we are past a threshold&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (now - lastLock &amp;gt; (long) (LOCK_TTL / 2L))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp; jobLockService.refreshLock(lockToken, lockQName, LOCK_TTL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp; lastLock = System.currentTimeMillis();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp; lockPair = new Pair&amp;lt;Long, String&amp;gt;(lastLock, lockToken);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp; lockThreadLocal.set(lockPair);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Patil&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 May 2014 09:47:10 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273257#M226387</guid>
      <dc:creator>patil</dc:creator>
      <dc:date>2014-05-09T09:47:10Z</dc:date>
    </item>
    <item>
      <title>Re: Cluster aware scheduled jobs</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273258#M226388</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi, I have a cluster consisting of two machines with Alfresco 5.0 Enterprise installed and would like to create a job that gets executed on only one of these machines at a time. I have followed this article &lt;/SPAN&gt;&lt;A href="http://docs.alfresco.com/5.1/references/dev-extension-points-scheduled-jobs.html" rel="nofollow noopener noreferrer"&gt;http://docs.alfresco.com/5.1/references/dev-extension-points-scheduled-jobs.html&lt;/A&gt;&lt;SPAN&gt;, but without success - my job executes simultaneously on both nodes. Do you have any suggestions?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Jun 2016 21:52:09 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/cluster-aware-scheduled-jobs/m-p/273258#M226388</guid>
      <dc:creator>mkopacz</dc:creator>
      <dc:date>2016-06-24T21:52:09Z</dc:date>
    </item>
  </channel>
</rss>

