Comment créer un service OSGi compatible avec les clusters

Problème

Comment créer un service OSGi qui sait s'il fonctionne sur un nœud esclave de cluster CQ5 / CRX ou sur un nœud maître?

Résolution

Dans CQ5, vous pouvez utiliser l'interface ClusterAware qui va gérer automatiquement la vérification périodique du descripteur pour vous.  Cela facilite la tâche si le nœud est élu comme principal :

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

Remarque: la fonctionnalité ClusterAware s'applique uniquement à CQ5.3 avec Feature Pack 34071 installé, CQ5.4 ou version ultérieure.

S’applique à

CQ 5.3

CQ5.4

CRX 2.1.

CRX 2.2.

** Si vous voulez utiliser ceci dans CQ5.3, vous avez besoin du Feature Pack 34071 et du correctif CRX 2.1.0.10+.  Si vous ne disposez pas de ces correctifs, vous pouvez les demander via daycare.

Remarque :

AEM 5.6.1 : utiliser la nouvelle topologie api. Plus de détails sur http://helpx.adobe.com/cq/kb/create-cluster-aware-osgi-service.html

 Adobe

Recevez de l’aide plus rapidement et plus facilement

Nouvel utilisateur ?