2017-08-04 15 views
2

AEM 6.1アプリケーションをAEM 6.3に移行しています。 Felix注釈(org.apache.felix.scr.annotations。*)は廃止予定ですので、私はOSGi注釈(org.osgi.service.component.annotations。*)にコンポーネントを移行することに決めました。AEM 6.3 - FelixをOSGiアノテーションに移行する:propertyPrivateの処理方法?

私はそれがどのように動作するかを考えれば、かなり簡単です。しかし、私は対処方法がわからないケースが1つあります:propertyPriavte = trueのプロパティ。

古い実装は次のようになります。

@Component(metatype = true) 
@Service(Servlet.class) 
@Properties({ 
     @Property(name = "sling.servlet.selectors", value = "overlay", propertyPrivate = true), 
}) 
public class OverlayServletImpl extends OverlayServlet { 
... 
} 

プロパティsling.servlet.selectors AEMコンソールでConfiguration Managerで設定可能ではないだろうが、それが原因設定ファイルに設定可能になります、 右?だから、私はまだこのプロパティを定義する必要があります。その他のプロパティについては

私はこのように私の実装を変更:

// OverlayServletImpl 
@Component(
     service = Servlet.class, 
     configurationPid = "my.package.path.OverlayServletImpl" 
) 
@Designate(
     ocd = OverlayServletImplConfiguration.class 
) 
public class OverlayServletImpl extends OverlayServlet { 
... 
} 

// Configuration 
@ObjectClassDefinition(name = "Overlay Servlet") 
public @interface OverlayServletImplConfiguration { 

    String sling_servlet_selectors() default "overlay"; 
... 
} 

は今、私はプロパティにsling.servlet.selectorsを持っているが、それはConfiguration Managerとそれ'S値でも使用可能ですが変更することができます。しかし私はそれを望んでいません。

どうすればいいですか?これはOSGiアノテーションで可能ですか?

ありがとうございます!

+0

あなたはOSGI注釈の移行に関連するすべてのドキュメントを持っていますか?私もAEM6.1から6.3に移行しています。移行する必要はありますか? – Sara

+1

こんにちは! Felix注釈は推奨されていませんが、AEM 6.3でも機能します。つまり、まだ移行する必要はありませんが、将来のバージョンのAEMに移行する予定です。 ドキュメントとして、私は次のページ[AEMのオフィシャルOSGI宣言サービスの注釈](http://www.nateyolles.com/blog/2017/05/osgi-declarative-services-annotations-in-aem)をお勧めします。また、GitHubプロジェクトへのリンクもあります.GitHubプロジェクトは、FelixアノテーションとオフィシャルOSGiアノテーションでどのように同じサービスを実装する必要があるかを示しています。それは移行のために私を助けました。 – user2960606

答えて

0

@Componentアノテーションを使用してプライベートプロパティを指定すると、このようになる可能性があります。

@Component(service = Servlet.class, 
    property = 
    { SLING_SERVLET_RESOURCE_TYPES + "=aemhtlexamples/structure/page", 
    SLING_SERVLET_METHODS + "=GET", 
    SLING_SERVLET_EXTENSIONS + "=html", 
    SLING_SERVLET_SELECTORS + "=hello" }) 
public class SimpleServlet extends SlingSafeMethodsServlet { 

    @Override 
    protected void doGet(final SlingHttpServletRequest req, final SlingHttpServletResponse resp) 
     throws ServletException, IOException { 
    final Resource resource = req.getResource(); 
    resp.getOutputStream().println(resource.toString()); 
    resp.getOutputStream().println("This content is generated by the SimpleServlet"); 
    } 
} 

出典:https://github.com/heervisscher/htl-examples/blob/master/core/src/main/java/com/adobe/examples/htl/core/servlets/SimpleServlet.java

+0

こんにちは、私の食べ物の返事をおかけして申し訳ありませんが、私はその話題に取り組むことができませんでした。 @ミッケルローイの答えは正しいと動作します。 – user2960606

0

私が知る限り、これは不可能です。定義するすべてのプロパティは、configによって上書きできます。

関連する問題