Problem
Wie erstelle ich einen OSGi-Dienst, der berücksichtigt, ob er auf einem CQ5-/CRX-Gruppen-Sklavenknoten oder einem Master-Knoten läuft?
Lösung
In CQ5 können Sie die ClusterAware-Schnittstelle verwenden, die regelmäßig automatisch den Deskriptor für Sie überprüft. Dadurch ist es einfacher, wenn der Knoten als Master ausgewählt ist:
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
}
}
Hinweis: Die ClusterAware-Funktion ist nur bei CQ5.3 mit installiertem Feature Pack 34071, CQ5.4 und höher verfügbar.
Gilt für
CQ 5.3
CQ 5.4
CRX 2.1
CRX 2.2
** Wenn Sie dieses in CQ5.3 verwenden möchten, benötigen Sie das 5.3 Feature Pack 34071 und CRX hotfix 2.1.0.10+. Wenn Sie keine dieser Hotfixes haben, können Sie sie über Daycare anfordern.
Ab AEM 5.6.1 wird eine neue Typologie-api verwendet. Details unter http://helpx.adobe.com/cq/kb/create-cluster-aware-osgi-service.html