Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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ę:

Code Block
languagehtml/xml
titlesuncode-plugin.xml
<?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:

Code Block
languagehtml/xml
titlesuncode-plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin key="com.suncode.plugin-tutorial" name="Tutorial Plugin" hook="com.suncode.plugin.tutorial.Hook">
	<!-- ... -->
</plugin>
Info

Plik suncode-plugin.xml musi znajdować się w głównym katalogu pliku jar.

Operacje na wtyczkach

Ten rozdział pokazuje, jak korzystać z API mechanizmu wtyczekRozdział Zarządzanie wtyczkami pokazuje, jak zarządzać nimi z poziomu systemu.

Tip
titleJavadoc

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

    Code Block
    languagejava
    @Component
    public class SomeComponent {
    	@Autowired
    	private PluginFramework framework;	
     
    	/**
    ...
    	*/
    }
  • pobrać obiekt statycznie z kontekstu aplikacji

    Code Block
    languagejava
    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:

Code Block
languagejava
// 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