Problema

Criação de um serviço OSGi que esteja ciente de estar em execução em um nó subordinado ou em um nó mestre de cluster no CQ5 / CRX.

Solução

No CQ5, você poderá usar a interface ClusterAware para verificar o descritor periodicamente de forma automática.  Isso facilitará as coisas se o nó for eleito como mestre:

import com.day.cq.jcrclustersupport.ClusterAware;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype = false, policy = ConfigurationPolicy.IGNORE)
@Service(ClusterAware.class)
public class MyClusterAwareService implements ClusterAware {
  public void unbindRepository() {
    log.info("No Repository is bound or Repository is unbound");
  }

  public void bindRepository(String repositoryId, String clusterId, boolean isMaster) {
    log.info("Bound to Repository {} Node {} (Cluster: {})",
      new Object[] { (isMaster ? "Master" : "Slave"), repositoryId, clusterId });
    doSomethiing(isMaster);
  }

  private void doSomething(boolean isMaster) {
    //TODO: your code here
  }
}

Observação: o recurso ClusterAware se aplica apenas ao CQ5.3 com o Feature Pack 34071 instalado, CQ5.4 ou versão posterior.

Aplica-se a

CQ 5.3

CQ 5.4

CRX 2.1

CRX 2.2

** Caso deseje usá-lo no CQ5.3, será necessário o 5.3 Feature Pack 34071 e o CRX hotfix 2.1.0.10.  Caso você não tenha esses hotfixes, poderá solicitá-los via daycare.

Observação:

O AEM 5.6.1 em diante usa a nova api baseada em topologia. Veja os detalhes em http://helpx.adobe.com/br/cq/kb/create-cluster-aware-osgi-service.html