2010-10-27 13 views
10

Kısa bir süre önce OSGi'deki Deklarasyon Hizmetlerinin, bir bileşenin yapılandırmasını, bileşen aktivasyonu ve yapılandırması arasındaki boşluğu kaldırarak etkinleştirilmesi üzerine etkinleşmesi için gereken yapılandırmayı ayarlayabileceği gerçeğine rastladım. Ayrıca, konfigürasyon güncellemelerini modified -method aracılığıyla alabileceğinizi de farkettim.OSGi Declarative Services vs ManagedService hizmeti yapılandırmak için?

Bu işlev, ManagedService arabirimini uygulayıp sağladığınız hizmetlerden biri olarak yayınlamakla sağlanan işlevsellikle oldukça benzer gözüküyor.

Tam olarak DS yapılandırma enjeksiyonunu kullanıyorum ManagedService & görmezden gelebilirim gibi görünüyor.

Bu tekniklerden biri diğerinden daha mı tercih edilir, yoksa görmediğim başka satış noktaları var mı?

cevap

11

Evet, ManagedService ve ManagedServiceFactory öğelerini tamamen yok sayıp yalnızca Declarative Services bileşenlerini kullanabilirsiniz. Ve evet bu yaklaşımı tavsiye ederim. Bunu sadece farklı soyutlama düzeyleri olarak düşünün. MS/MSF, yapılandırma yöneticisi için düşük düzeyli bir API'dir ve bir DS paketinin çalışmaması durumunda bile kullanılabilir. Bunun avantajı, belirli "sistem seviyesi" bileşenleri için istenebilecek olan DS'ye bağımlı olmadan yapılandırılabilir hizmetler yazabilirsiniz. Ancak, DS'ye bağlı olmaktan memnuniyet duyarsanız, örn. "uygulama seviyesi" bileşenleri için, DS'nin yapılandırma yöneticisi ile yerleşik entegrasyonunu kullanmak, hayatınızı çok daha kolaylaştıracaktır. declarative services fabrikalar inşa örneklerinden

+0

Tamam, yaptığım şey budur, ancak bir DS bileşeninin ne zaman yapılandırması geçersiz olduğundan ve bir istisna attığından biraz endişe duydum/bir istisna atar çünkü Equinox bunu başlatmayı dener ve çok fazla istisnalar atılır ve günlüğe kaydedilir. Temiz görünmüyordu. – oconnor0

+1

Equinox, etkinleştirme yöntemi bir istisna atarsa ​​bileşeni başlatmaya çalışmaya devam etmemelidir. Yapılandırma değişirse, bileşeni yeniden oluşturmak için tekrar denemelisiniz. Kayıt için gelince - elbette, bileşen tarafından atılan istisna kaydedilmelidir! –

+0

DS bileşenini bir "ManagedService" olarak değil, bir "ManagedServiceFactory" olarak ele almak için doğru yolu nedir? Diğer bir deyişle, DS'nin her * uygulanabilir yapılandırma örneği için bir bileşenin yeni bir örneğini oluşturmasını istiyorsa, hile nedir? Metatype tanımının yazılmasını gerektiriyor mu? – seh