Problema
¿Crear un servicio OSGi que sepa si se está ejecutando en un nodo esclavo de clúster CQ5/CRX o en un nodo maestro?
Resolución
En CQ5, puede utilizar la interfaz de ClusterAware que se encargará automáticamente de comprobar periódicamente el descriptor por usted. Esto facilita las cosas si el nodo es elegido como maestro:
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 característica ClusterAware solo se aplica a CQ5.3 con Feature Pack 34071 instalado, CQ5.4 o una versión posterior.
Se aplica a
CQ 5.3
CQ 5.4
CRX 2.1
CRX 2.2
** Si quiere usar esto en CQ5.3 necesita 5.3 Feature Pack 34071 y CRX hotfix 2.1.0.10+. Si no dispone de estas correcciones, puede solicitarlos a través del centro de soporte.
AEM 5.6.1 en adelante usar nueva topología api. Detalles en http://helpx.adobe.com/es/cq/kb/create-cluster-aware-osgi-service.html