Detecte o mestre do Cluster

Problema

Como detectar se o código está sendo executado no nó mestre em um cluster (se o armazenamento em cluster estiver habilitado).

Solução

Use o descritor de repositório "crx.cluster.master. Mas observe que o valor poderá ser nulo se o armazenamento em cluster estiver desabilitado em algumas versões do CRX. Use o seguinte código (funciona em qualquer aplicativo baseado em CRX usando o CRX2.1.0.10+)

package sample.demo;
public interface ClusterService {
public boolean isMaster();
}
package sample.demo;

import sample.demo.ClusterService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Reference;
import javax.jcr.Repository;

@Component(metatype = false)
@Service(value = ClusterService.class)

public class MyClusterAwareService implements ClusterService {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyClusterAwareService.class);

    @Reference
    private Repository repository;
    
    public boolean isMaster() {
       String v = repository.getDescriptor("crx.cluster.master");
        boolean isOnMaster = v == null || Boolean.parseBoolean(v);
        LOGGER.info("MyClusterAwareService isMaster" + isOnMaster );
        return isOnMaster;
    }
    
    @Activate
    protected void activate() {
        LOGGER.info("service activated" );
    }
    @Deactivate
    protected void deactivate() {
        LOGGER.info ("service deactivated");
    }
}
<%
sample.demo.ClusterService clusterService =  sling.getService(sample.demo.ClusterService.class);
%>
Am I master <%= clusterService.isMaster() %>
Observação:

Observação: No CQ5, existem algumas bibliotecas para ajudar a implementar serviços OSGi com reconhecimento de cluster.Veja aqui.

** O CRX 2.1 deverá ter o hotfix 2.1.0.10 aplicado

Observação:

O AEM 5.6.1 (CRX 2.4.30) em diante usa a nova API de topologia. Detalhes em http://helpx.adobe.com/br/cq/kb/create-cluster-aware-osgi-service.html

 Adobe

Receba ajuda com mais rapidez e facilidade

Novo usuário?