簡體   English   中英

什么會導致Apache Felix不調用@Activate方法?

[英]What would cause the @Activate method to not be invoked for Apache Felix?

我有一個Apache Felix組件,其定義如下:

...
@Component(immediate=true)

@Service
public class myClass implements myClassInterface {
    ...
    @Activate
    public void activate(final Map<String, Object> properties) {
        //Do activation stuff
    }
    ...
}

從閱讀關於@Component@Activate注釋的Apache Felix文檔( http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#component ),我明白了@Componentimmediate=true屬性是“立即激活”。 我的問題是我的activate方法似乎永遠不會被調用。 從我構建項目的那一刻起直到我使用OSGi請求服務myClass的那一刻,我都有調試器,但似乎永遠不會調用activate方法。

所以,我的問題有幾個層次:1。告訴我, immediate=true屬性導致組件“立即激活”並沒有給我足夠的信息。 這是否意味着組件在構建項目后立即激活,在創建myClass實例后立即激活,或者在OSGi包請求服務myClass之后立即激活? 2.盡管我使用了immediate=true ,是否有任何可能導致我的activate方法無法被調用的東西? 如果是這樣,我該怎么做才能解決問題?

在此先感謝您的幫助。 如果我需要提供更多信息,請與我們聯系。

Immediate = false表示只有在另一個組件請求時才激活該組件。 Immediate = true表示一旦所有強制引用都存在,它就會被激活。

因此,如果您的組件未激活,那么可能不需要它所需的服務。 您可以使用gogo shell中的scr命令查看組件的狀態。

另一件事是定義用於發布服務的接口。 我不確定felix SCR注釋,但如果類沒有實現任何接口,則需要使用DS注釋設置@Component(service = myClass.class)。

順便說一句。 您應該切換到標准DS注釋。 http://enroute.osgi.org/doc/217-ds.html felix的現在已被棄用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM