Wtyczka
Wtyczka jest bundlem OSGi instalowanym w środowisku OSGi. Może być ona dynamicznie:
- instalowana
- aktualizowana
- uruchamiana
- zatrzymywana
- odinstalowana
Wtyczka posiada własny kontekst, który pełni rolę kontenera komponentów wtyczki, serwisów, kontrolerów. Możliwe jest wstrzykiwanie zależności i korzystanie ze wszystkich dobrodziejstw SpringFramework.
Deskryptor wtyczki (suncode-plugin.xml)
Deskryptor wtyczki to plik XML który dostarcza podstawowe informacje o wtyczce oraz jest miejscem na deklaracje wykorzystywanych modułów. Plik ten jest wymagany, ponieważ dostarcza informacje o wtyczce (jej unikalny identyfikator i wyświetlaną nazwę).
Deskryptor ma następującą strukturę:
<?xml version="1.0" encoding="UTF-8"?> <plugin key="com.suncode.plugin-tutorial" name="Tutorial Plugin"> <plugin-details> <description> <localized language="en">Description</localized> <localized language="pl">Opis</localized> </description> <author>Suncode</author> </plugin-details> <!-- Wszystkie kolejne elementy stanowią deklaracje modułów --> </plugin>
Wtyczka może także zdefiniować PluginHook, jeżeli potrzebne jest wywołanie akcji przy starcie i zatrzymaniu wtyczki:
<?xml version="1.0" encoding="UTF-8"?> <plugin key="com.suncode.plugin-tutorial" name="Tutorial Plugin" hook="com.suncode.plugin.tutorial.Hook"> <!-- ... --> </plugin>
Plik suncode-plugin.xml musi znajdować się w głównym katalogu pliku jar.
Operacje na wtyczkach
Ten rozdział pokazuje, jak korzystać z API mechanizmu wtyczek. Rozdział Zarządzanie wtyczkami pokazuje, jak zarządzać nimi z poziomu systemu.
Javadoc
JavaDoc API znajduje sie tutaj: http://javadoc.plusworkflow.pl/javadoc/plugin-framework/1.0.0/api/
Głównym komponentem mechanizmu wtyczek jest PluginFramework. W systemie PlusWorkflow musimy pobrać ten obiekt z kontekstu aplikacji:
wykorzystać wstrzykiwanie zależności
@Component public class SomeComponent { @Autowired private PluginFramework framework; /** ... */ }pobrać obiekt statycznie z kontekstu aplikacji
import com.suncode.plugin.framework.PluginFramework; import com.suncode.pwfl.util.SpringContext; public class SomeClass { public static void doSomething(){ PluginFramework framework = SpringContext.getBean( PluginFramework.class ); /** ... */ } }
Poniżej przedstawiono wykonywanie kilku podstawowych operacji:
// pobrany w dowolny sposób
// PluginFramework framework = ...
// 1. Instalacja wtyczki z podanego pliku
File pluginFile = new File("/fakepath");
Plugin plugin = framework.installPlugin( pluginFile );
// 2. Aktualizacja wtyczki
File updatedPluginFile = new File("/fakepath");
plugin.update( updatedPluginFile );
// 3. Uruchomienie wtyczki
plugin.start();
plugin.getState(); // PluginState.ACTIVE
// 4. Pobranie tłumaczenia
// zwraca "message1" jeżeli moduł I18N nie jest obecny, w przeciwnym wypadku zwraca znalezione tłumaczenie
plugin.getMessage("message1");
// 5. Zatrzymanie wtyczki
plugin.stop();
plugin.getState(); // PluginState.STOPPED
