Problem

Ermitteln ob der Code auf dem Masterknoten in einem Cluster ausgeführt wird (wenn Clustering aktiviert ist).

Lösung

Verwenden Sie den Repository-Deskriptor „crx.cluster.master“. Beachten Sie jedoch, dass der Wert null sein könnte, wenn das Clustering für einige Versionen von CRX deaktiviert ist. Verwenden Sie den folgenden Code (funktioniert in jeder CRX-basierten App mit CRX 2.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() %>

Hinweis:

Hinweis: In CQ5 gibt es einige Bibliotheken, welche mit der Implementierung von clusterabhängigen OSGi-Diensten helfen.Siehe hier.

** CRX 2.1 muss Hotfix 2.1.0.10 angewendet haben.

Hinweis:

Ab Version AEM 5.6.1 (CRX 2.4.30) wird eine neue Topologie-API verwendet. Details unter https://helpx.adobe.com/de/cq/kb/create-cluster-aware-osgi-service.html

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie