2016-09-14 4 views
1

私たちは出版社の業績に問題があります。私はJVMをプロファイリングし、私たちのカスタムリンクトランスフォーマーに関連するコードでホットスポットを見つけました。ほとんどのCPUは、サイトの構成値を含むJCRノードの検索、読取り、および適合に使用されています。アドビのAEMコードを最適化し、各要求に対してノードのアクセスと適合を防ぐ方法を教えてください。

リンクトランスフォーマーは、発生したリンクごとにこのコードを呼び出しているため、これは意味があります。だから、私は、ノードの場所の特定、読み取り、および適応を「キャッシュ」する方法を探しています。しかし、私はこれをどうやって行うのか分からず、ノードの値が変更された場合に変更が取得されるようにする方法についてはわかりません。

私はこれを行うシングルトンOSGIサービスを作ると想像することができます。ただし、ノードが変更された場合に再ロードする方法を確認する方法がわかりません。

誰かが概念レベルからこの問題に取り組む方法についていくつかのヒントを与えることができますか?私はコードを探すのではなく、ルートを探すのですか?

助けていただければ幸いです。

(AEM 6.1)

答えて

0

あなたはOSGiサービスを実装し、サービスクラスのサービスPIDにバインドされたsling:osgiConfigを使用して構成を結合することができます。サンプルhereを参照してください。here

さらに、ManagedServiceを使用して、変更時にプロパティが自動的に更新されるようにすることができます。私はここで2つのオプションを参照してください

@Component(immediate = true, metatype = true) 
@Service({YourServiceInterface.class, ManagedService.class}) 
public class YourService implements YourServiceInterface, ManagedService { 

/** 
    * Activate. 
    * 
    * @param componentContext the component context 
    * @throws org.osgi.service.cm.ConfigurationException the configuration exception 
    */ 
    @Activate 
    public void activate(ComponentContext componentContext) throws ConfigurationException { 
     updated(componentContext.getProperties()); 
    } 

/* 
    * (non-Javadoc) 
    * 
    * @see org.osgi.service.cm.ManagedService#updated(java.util.Dictionary) 
    */ 
    @Override 
    public void updated(Dictionary<String, ?> configuration) throws ConfigurationException { 
     if (configuration != null && !configuration.isEmpty()) { 
      // Handle your logic for config items population here 
     } 
    } 

} 
0

- スリングのマニュアルをhere

サンプル・コードを参照してください。

  1. EVENT_TOPICのリソースの変更に関連する特定のJCRパス上に聞くでしょうEventHandlerの作成(JCRに保管しないでください)

  2. を設定自体が含まれているOSGiサービスを作成します - このEventHandlerは、OSGiサービスであろうと古い純粋な静的なものであろうと、キャッシュのモデルを無効にすることができます。

関連する問題