問題点

どうすれば、AEM 5.6.1 クラスターでリーダーノードで実行されているかどうかを認識する OSGi サービスを作成できますか?

解決策

AEM 5.6.1以降では、新しいトポロジ API を使用します。詳細については、http://sling.apache.org/documentation/bundles/discovery-api-and-impl.html を参照してください

AEM 以前のバージョンでは、レポジトリ記述子「crx.cluster.master」またはクラスターアウェアインターフェイスのいずれかを使用してクラスター環境のマスターを識別します。

サンプル

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);


        }
    }


}

例示パッケージをダウンロードします

ダウンロード

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー