Pracuję teraz nad usługą OSGi i mam pytanie dotyczące korzystania z usług w OSGi. Istnieje kilka różnych sposobów rejestracji usługi użytkownika. Czy ktoś może wyjaśnić różnicę między śledzeniem usług OSGi a usługami deklarującymi? Który jest lepszy?Co różni usługa śledzenia usług OSGi od usług deklaratywnych
Odpowiedz
W OSGi The ServiceTracker to programowy sposób na uzyskanie odniesienia do usługi. np. piszesz kod ServiceTracker, który "śledzi" odniesienie do innej usługi i wykorzystajmy go, gdy stanie się dostępny.
W przeciwieństwie do usług deklaratywnych (DS), można zadeklarować zależności, które są wstrzykiwane do komponentu. DS jest, jako taka, formą zastrzyku zależności. Wykres zależnoś ci mię dzy usługami wraz z ich poleceniem startowym okreś la moment rozpoczę cia Twojej usługi. Właściwość cardinality w definicji DS pozwala zadeklarować, czy relacja jest obowiązkowa (1..1), wielokrotność z co najmniej jedną (1..n), opcjonalną (0..1) lub wielokrotną opcjonalną (0..n). Gdy deklarujesz obowiązkowe relacje, twoja usługa nie rozpocznie się, dopóki wszystkie zależności nie zostaną spełnione. Po zadeklarowaniu opcjonalnego związku usługa zostanie uruchomiona niezależnie od stanu zależności, ale należy zachować ostrożność w kodzie, że odwołanie do usługi może mieć wartość null.
Z praktycznego punktu widzenia ServiceTracker to dużo kodu do pisania i utrzymywania. Biorąc pod uwagę dynamiczny charakter usług OSGi, specyfikacja OSGi wymaga wielu stanów, które należy wziąć pod uwagę. DS zapewnia czysty sposób deklarowania i utrzymywania zależności. Dobrze zdefiniowane zależności pomogą ci zachować spójność twojego środowiska uruchomieniowego.
Usługa Śledzenie usług OSGi pozwala zarejestrować odbiorców dla określonych usług, aby móc zareagować, gdy usługa stanie się dostępna.
Z drugiej strony usługi deklaracyjne domyślnie wykorzystują moduł śledzenia usług do opóźnienia wykonania kodu aktywacyjnego pakunku, dopóki nie zostaną rozwiązane zależności usługi.
i który z nich jest lepszy?
Jest to dość proste, aby utworzyć i korzystać z niektórych usług deklaratywnej, zwłaszcza z adnotacjami Apache Felix SCR i wtyczek Apache Felix SCR Mavena:
https://felix.apache.org/site/scr-annotations.html
https://felix.apache.org/site/apache-felix-maven-scr-plugin-use.html
Usługi deklaracyjne (DS) są dość łatwe w użyciu, a unikniesz niektórych kodów związanych z korzystaniem z ServiceTrackera. Jeśli przejdziesz do zwykłego OSGI, używając tylko ServiceTracker, musisz zająć się niektórymi aspektami dynamicznej natury usług OSGI. Usługi mogą przychodzić i odchodzić, a twój komponent musi sobie z tym poradzić. Jeśli używasz DS, większość tej pracy jest już wykonana. Wystarczy zdefiniować odniesienia do innych usług, a DS wstawi te odniesienia, gdy staną się dostępne. DS aktywuje Twój komponent po spełnieniu wymagań komponentu.
Jeśli używasz adnotacji Apache Felix SCR lub adnotacji dostarczonych przez bndlib, możesz także uniknąć zapisywania xml wymaganych przez usługi deklaracyjne. Niedawno grupa OSGI opublikowała także swoje adnotacje. Myślę, że te dostarczone przez bndlib i te z OSGI są bardzo podobne i jestem prawie pewien, że narzędzie bnd może przetwarzać oba.
Użyłem adnotacji Apache SCR jakiś czas temu, ale teraz wolę używać bndlib, ponieważ zawiera adnotacje dla Metatype i niektórych klas, które znacznie ułatwiają implementację usługi zarządzanej. Metatype to specyfikacja związana z usługami zarządzanymi. Zasadniczo zapewnia metadane, które mogą być używane przez implementacje Admin Config, aby zapewnić bardziej przyjazny dla użytkownika interfejs do konfiguracji komponentu.
Znam dwie inne możliwości: iPojo i Blueprint.
iPojo jest dość potężny i bogaty w funkcje. Zawiera większość elementów OSGI i zawiera kilka ciekawych funkcji, takich jak obsługa EventAdmin i obsługa ConfigAdmin.
Użyłem Blueprint trochę, ale z powodu nadmiernego użycia xml nie lubię tego tak bardzo. Myślę, że możesz powiedzieć, że Blueprint jest jak Wiosna dla OSGI.
- 1. Jak świadczenie usług OSGi na kliencie
- 2. Usługa aplikacji Azure a usługa usług Azure
- 3. Używanie liczników wydajności do śledzenia usług Windows
- 4. Skalowanie usług systemu Windows
- 5. Uzyskiwanie usług OSGi z pakietu w Sling/CQ
- 6. Globalny dostawca usług Angular2
- 7. .NET WCF Dziennik śledzenia usług z zarządzaniem plikami dziennika (Rolling)
- 8. Obietnica usług granicznych
- 9. Które uprawnienia użytkownika wymaga usługa do uruchamiania/zatrzymywania innych usług?
- 10. Sprzedaż miesięcznych usług online
- 11. Prosty dostawca usług OAuth
- 12. Ograniczenie parametru usług raportowania
- 13. Czym różni się @ {push} od @ {u} lub oddziału śledzenia?
- 14. usług WCF, rejestrowanie pionowo
- 15. Wiosenna integracja - Współbieżne aktywatory usług
- 16. Spożywanie usług internetowych w VB.NET
- 17. kubernetes usług zewnętrznych ip oczekiwaniu
- 18. Wzorzec lokalizatora usług w Swift
- 19. Ograniczanie usług WCF
- 20. Testowanie usług SOA
- 21. Zrozumienie usług Symfony2
- 22. SSL na stosie usług
- 23. Klasy usług Refactoring Service
- 24. Konfiguracja folderów usług raportowania
- 25. "Szybka" integracja Testowanie usług WCF
- 26. Używanie Autofac jako lokalizatora usług
- 27. Zarządzanie wywoływanymi zwrotami usług serwisowych
- 28. Jak przyznać uprawnienia do odczytu USŁUG NETWORK
- 29. Utylizacja/czyszczenie serwerów proxy usług sieciowych
- 30. Liczniki wydajności w operacjach usług sieciowych
Dziękuję wszystkim. Cała twoja odpowiedź jest przydatna. Ale mogę wybrać tylko jedną: –