2011-07-27 12 views
8

Bu senaryoyu kullanıyorum, aynı arabirimi sağlayan üç bildirici hizmetim var (bir okuyucu arabirimi ve ben de readerimpl1-database-readerimpl2-flat dosya-readerimpl3-bellek var). Sadece veritabanı uygulamasına bağlanan bir tüketici istiyorum. Bileşen tanımında bir isim veriyoruz, bu yüzden adın kayıt defterinde olduğundan eminim, bu yüzden bir etkinleştirme yöntemi ekleyeceksem, bileşen bağlamından adı kullanarak arama yapabilirim.Osgi Deklarasyon hizmeti koşullu bağlanma

Parametre olarak hizmet adını kullanarak buna bağla/çözümle denemek istiyorum. Bileşen referans öğesindeki "hedef" parametresinin bunu yapmak için kullanılabildiğinden oldukça eminim ancak nasıl kullanılacağını bulamadım.

Bunu yapan başka biri var mı?

Bu

+0

Bu bir hizmetlerinizin değerlere file veya database ile backend adında özelliği var ise, aşağıdaki hedefle bağlayabilir gerçekten ilginç bir soru. Eğer veritabanı * tercih ederseniz, bir başkasını kabul edip edemezseniz, ilgili soru üzerine düşünmemi sağlıyor. Bu senaryoda, @Reference (cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC) aracılığıyla uygulayabilir ve sonra ekleme/çıkarma yöntemlerinizdeki listeyi tarayabilirsiniz. –

cevap

14

Hedef sadece bir OSGi filter olan @Reference (eşlenmiş adı = "fon") kullanılarak benzer olacaktır. Herhangi bir hizmet özelliğine göre filtrelemek için kullanabilirsiniz. olarak

<scr:reference ... target="(backend=database)"/> 

Ve kendisi kaydeder veritabanı ve hizmet:

<scr:component ...> 
    ... 
    <property name="backend" type="String" value="database"/> 
</scr:component>