Strona zawiera dokumentację PluginFramework API
Uzupełnieniem tej dokumentacji jest JavaDoc. |
Plugin API wykorzystywane jest do zarządzania pojedynczą wtyczką.
Obiekt (com.suncode.plugin.framework.Plugin) reprezentuje wtyczkę i umożliwia sterowanie jej stanem oraz komunikację z mechanizmem wtyczek. Obiekt ten możemy otrzymać poprzez:
pobranie obiektu wtyczki z serwisu com.suncode.plugin.framework.PluginFramework wywołując metodę getPlugin(String key) podając jej identyfikator:
// dowolny komponent (wewnątrz wtyczki lub w systemie) @Component public class SomeComponent { @Autowired private PluginFramework framework; public void method(){ Plugin plugin = framework.getPlugin("plugin-key"); } } |
wstrzyknięcie (@Autowired) obiektu wtyczki do komponentu tej wtyczki. W taki sposób możemy pobrać obiekt aktualnej wtyczki:
// komponent wewnątrz wtyczki @Component public class SomePluginComponent { @Autowired private Plugin plugin; public void method(){ plugin.getKey(); // klucz tej wtyczki } } |
Wtyczka może być dynamicznie uruchamiana, zatrzymywana i aktualizowana poprzez wywołanie odpowiednich metod na obiekcie tej wtyczki:
Plugin plugin = ... plugin.start(); System.out.println(plugin.getState()); // wypisuje ACTIVE |
Plugin plugin = ... plugin.stop(); System.out.println(plugin.getState()); // wypisuje STOPPED |
Plugin plugin = ... plugin.update(new File("ścieżka do pliku jar wtyczki")); |
Odinstalowana wtyczka nie może być już wykorzystywana. Wywołanie jakiejkolwiek metody (z wyjątkiem kilku np. getState) zakończy się błędem. |
Plugin plugin = ... plugin.uninstall(); System.out.println(plugin.getState()); // wypisuje UNINSTALLED |
Każda wtyczka zbudowana jest z klas Java oraz statycznych zasobów. Ze względu na izolację wtyczek, odczyt zasobów może odbywać się tylko z wykorzystaniem przedstawionych metod.
Plugin plugin = ... Resource resource = plugin.getResource("suncode-plugin.xml"); // deskryptor wtyczki if(resource.exists()){ // zasób istnieje i można go odczytać } |
Plugin plugin = ... PluginContext context = plugin.getPluginContext(); // mappings/a.xml // mappings/b.xml // mappings/c.json // mappings/sub/a.json // mappings/sub/b.xml // wszystkie pliki z katalogu mappings i podkatalogów Resource[] resources = context.getResources( "mappings/**/*" ); // resources ma: // mappings/a.xml // mappings/b.xml // mappings/c.json // mappings/sub/a.json // mappings/sub/b.xml // wszystkie pliki xml z katalogu mappings Resource[] resources = context.getResources( "mappings/*.xml" ); // resources ma: // mappings/a.xml // mappings/b.xml |
Wzorzec zasobów jest wyrażeniem Ant. Więcej info w dokumentacji Spring'a PathMatchingPatternResolver (http://docs.spring.io/autorepo/docs/spring-framework/3.2.6.RELEASE/javadoc-api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html).