Problema

Come creare un servizio OSGi che sia consapevole se è in esecuzione su un nodo secondario cluster CQ5/CRX o su un nodo master?

Risoluzione

In CQ5, puoi utilizzare l'interfaccia ClusterAware che gestisce automaticamente il controllo periodico del descrittore.  Questo rende le cose più facili se il nodo viene eletto come master:

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
  }
}

Nota: la funzione ClusterAware si applica solo a CQ5.3 con Feature Pack 34071 installato, CQ5.4 o versione successiva.

Si applica a

CQ 5.3

CQ 5.4

CRX 2.1

CRX 2.2

** Se si desidera utilizzare questa funzione in CQ5.3, sono necessarie 5.3 Feature Pack 34071 e CRX hotfix 2.1.0.10+.  Se non si dispone di questi hotfix, è possibile richiederli tramite daycare.

Nota:

AEM 5.6.1 in seguito utilizzare nuova topologia api. Dettagli su http://helpx.adobe.com/it/cq/kb/create-cluster-aware-osgi-service.html

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online