Zuletzt aktualisiert am
1. Mai 2021
|
Gilt auch für CQ 5.6
Problem
Wie erstellen Sie einen OSGi-Dienst, der berücksichtigt, ob er auf einem AEM 5.6.1 Cluster als Führerknoten ausgeführt wird oder nicht?
Lösung
In AEM 5.6.1 und höher verwenden Sie eine neue API-Topologie. Weitere Informationen finden Sie unter http://sling.apache.org/documentation/bundles/discovery-api-and-impl.html
Identifizieren Sie in früheren AEM-Versionen einen Master in einer Clusterumgebung, der entweder den Repository-Descriptor „crx.cluster.master“ oder die ClusterAware-Benutzeroberfläche verwendet.
Beispiel
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.sling.discovery.TopologyEvent; import org.apache.sling.discovery.TopologyEventListener; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Service; @Component(metatype = true) @Service(value = { TopologyEventListener.class }) public class MyClusterAwareService implements Runnable,TopologyEventListener { private final Logger log = LoggerFactory.getLogger(MyClusterAwareService.class); private Boolean isLeaderInstance = Boolean.FALSE; /** * @see org.apache.sling.discovery.TopologyEventListener#handleTopologyEvent(org.apache.sling.discovery.TopologyEvent) */ public void handleTopologyEvent(final TopologyEvent event) { if ( event.getType() == TopologyEvent.Type.TOPOLOGY_CHANGED || event.getType() == TopologyEvent.Type.TOPOLOGY_INIT) { this.isLeaderInstance = event.getNewView().getLocalInstance().isLeader(); log.info("isLeader confirmed @@@@@@@@@@@@@@@@@@@"+ this.isLeaderInstance); } } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { if (isLeaderInstance) { //TODO: your code here log.info("isLeader run @@@@@@@@@@@@@@@@@@@"+ this.isLeaderInstance); } } }
Laden Sie das Beispielpaket herunter
Herunterladen