2009-12-21 17 views
8

Şu anda yeni bir uygulamada osgi (Spring DM) test ediyorum. Uygulama, dosya sistemi olaylarını dinleyebilmelidir. Bugün bunu basit zaman bazlı bir teknik direktörle çözdüm, ancak Java 7 piyasaya sürüldüğünde muhtemelen bunu NIO2 tabanlı bir uygulama ile değiştirmek istiyorum. Aynı arayüze sahip farklı osgi paketleri - bu aşağıya yerleştirmek nerede?

Şimdiye kadar üç demetin, dosya servis uygulamaları için iki, hizmetlerden birini tüketen iş mantığı için biri bakıyorum. İki uygulama aynı arabirimi uygulamalı, bu yüzden benim soru şu, bu arayüzü nereye koyacağım? Arayüzü, uygulamayı içeren paket içerisine yerleştirmek, hizmetin tüketicilerinden birine bağlı olmasına neden olacaktır.

Bunun yapısının en iyi ve en OSGi benzeri yolu olurdu? Şimdiye kadar yaptığım en iyi şey, uygulamalar için ortak arayüzleri tanımlayan yeni bir "api" paketi yaratmak.

+0

"api modülü" Fikir gitmek yoludur. – skaffman

cevap

8

Separete api-paket muhtemelen en iyi seçimdir. Daha sonra demet implentasyonunu değiştirmenizi sağlar. Ayrıca, ayrı bir api demeti ile mevcut paketinizi, tüketicinin yeniden başlatılması gereğini ortadan kaldırabilirsiniz.

Sınıfları (ve arayüzler) ve kendilerine ait ve sınıf yükleyicisi tarafından tanınır. Bu nedenle, hizmet arayüzünü uygulama ile aynı pakete yerleştirirseniz, çalışan paketi tekrar değiştirebilme özelliğini kaybedersiniz. arayüz aynı ada sahip ve her anlamda göreve yeni başlayan paketteki özdeş olmasına rağmen farklı bir sınıf yükleyici => tüketici yeni bir sınıf olarak göreve yeni başlayan paketler arayüzü dikkate vardır ve bağımlılıkları artık karşılanmaktadır. Servis uyumluluk ve sürümleri hakkında daha fazla bilgi (yorumlar) için

: Bence sen http://wiki.osgi.org/wiki/Service_Compatibility

+3

Ayrıca paket sürümlerini kullanmalısınız. Bu şekilde, aynı API paketinin farklı sürümlerine ve hatta tek bir çerçevede dağıtılan aynı hizmete bile sahip olabilirsiniz. – akr

+1

Eğer OSGi ile bunu mümkün olmakla birlikte aynı API farklı sürümleri varsa, bu, her sürümünü kullanmak bölgeye başvurunuzu bölünmüş olacak ve uyumsuz classloaders olacak çünkü onlar muhtemelen çok iyi işbirliği yapmak mümkün olmayacaktır. Örneğin, varsayılan olarak OSGi, görünür API'nin farklı bir sürümünü uygulayan hizmetler yapmaz. – Thilo

+0

Bu doğru. Sadece sürümün burada kullanılmasının gerçekten önemli olduğunu belirtmek istedim, örneğin sadece bir paket (uygulama veya API) güncellendi. Aksi halde bir karmaşaya son verebilirsiniz çünkü API'nın, uygulama paketinin ve kullanım paketinin eşleşmediğini görmüyorsunuz. "Uyumsuz classloaders" ile ne demek istediğini açıklayabilir misiniz? – akr

İlgili konular