Przeczytałem dużo kodu równonocy, ale nadal nie mogę znaleźć sposobu, aby pobrać program ładujący klasy dla pakietu osgi w konfiguracji eclipse equinox. Czy jest jeden?Jak uzyskać klasyloader dla pakietu w równonoc?
13
A
Odpowiedz
10
Krótka odpowiedź (z pewnością dla OSGi 4.1, nie jestem pewien 4.2), nie można pobrać programu ładującego klasy pakietu. Jednak interfejs Bundle
udostępnia metodę loadClass()
, dzięki czemu można napisać moduł ładujący klasy, który otacza interfejs API pakietu i deleguje do tej metody loadClass()
. Możesz też zaoszczędzić trochę czasu i skorzystać z klasy Spring DM BundleDelegatingClassLoader
.
1
W normalnym kodu java, można uzyskać ładującego klasy, które załadowane dany obiekt z
object.getClass().getClassLoader();
lub nawet tylko
SomeType.class.getClassLoader();
To samo odnosi się do równonocy, wystarczy użyć obiektu lub typ pochodzi z pakietu, który cię interesuje.
31
W OSGi 4.3 możesz użyć:
bundle.adapt(BundleWiring.class).getClassLoader()
4
Program ładujący klasy pakietu można uzyskać za pośrednictwem interfejsu BundleWiring. Oto krótki przykład:
Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
Powiązane problemy
- 1. Jak uzyskać identyfikator pakietu?
- 2. Jak uzyskać ścieżkę do folderu lib dla zainstalowanego pakietu
- 3. Jak uzyskać dostęp do konfiguracji pakietu Symfony 2 spoza pakietu?
- 4. Jak programowo uzyskać wersję pakietu Nuget?
- 5. Scapy uzyskać czas przylotu pakietu
- 6. Jak uzyskać access_token za pomocą pakietu JavaScript SDK w SoundCloud?
- 7. Jak uzyskać Nazwa pakietu lub klasy Plik źródłowy w Androidzie?
- 8. Http uzyskać rozmiar pakietu żądania w bajtach
- 9. Jak uzyskać nazwę pakietu/identyfikator pakietu aplikacji w systemie IONIC/Cordova (w kodzie JavaScript)
- 10. Wyeksportowane narzędzie UTI dla pakietu/pakietu
- 11. Jak mogę uzyskać nazwę pakietu w systemie Android?
- 12. Jak określić minimalną wersję pakietu dla Gemfile?
- 13. W Cordova, jak ustawić inną nazwę pakietu dla platformy Windows?
- 14. Android: Jak uzyskać macierzystą nazwę pakietu klientów poczty e-mail
- 15. Jak uzyskać identyfikator pakietu aplikacji iOS Automatyka UIA
- 16. Jak uzyskać określony typ z pakietu typu variadic?
- 17. Jak mogę uzyskać listę testów zdających z pakietu karma runner?
- 18. Nieprawidłowa struktura pakietu dla WatchKit
- 19. Jak uzyskać wszystkie typy parametrów z pakietu parametrów?
- 20. Jak uzyskać Optgroup dla multiselect w jQuery?
- 21. Jak uzyskać kontekst dla BaseAdapter w Androidzie
- 22. Błąd importowania pakietu MySQL dla Pythona
- 23. Jak uzyskać rejestrator dla podklasy?
- 24. Jak uzyskać datepicker dla Html.Editorfor
- 25. Jak używać opcji JRE pakietu w Launch4j
- 26. Debugowanie JavaScript API dla pakietu Office
- 27. Jak przetestować równość słownikową za pomocą pakietu doctest pakietu Python?
- 28. Parametry pakietu iOS RestKit dla zapytania
- 29. Jak wymusić instalację pakietu?
- 30. Jak przekonwertować format pakietu Perla 'Nc * na struct.pack dla Pythona?
Ale wtedy masz problem z bootstrapem. Jak zdobyć pierwszą instancję? – Geniedesalpages
Jeśli masz zależność od innego pakietu, możesz odwołać się do innej klasy bezpośrednio (SomeType.class), którą programy klasy osgi delegują między pakietami, aby nadal pochodziły one z innego programu ładującego klasy. Jeśli nie masz zależności, musisz pobrać obiekt Bundle (za pomocą programu PackageAdmin) i użyć pakietu # loadClass, jak wspomniano w drugiej odpowiedzi. –
Ładowanie klasy J2SE nie pasuje do J2EE. http://stackoverflow.com/questions/34787419/pmd-rule-use-proper-class-loader-explaination – Poornan