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.
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
Accedi al tuo account