Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »


Zadanie zaplanowane

Zadanie zaplanowane to komponent użytkownika pozwalający na zdefiniowanie zadania wykonywanego okresowo.

Stworzenie zadania zaplanowanego możliwe jest w panelu administratora (Administracja -> Konfiguracja systemu -> Zadania zaplanowane)

Definiowanie zadania zaplanowanego

Zadanie zaplanowane tworzone jest w oparciu o definicję stworzoną przez użytkownika. Definicja taka musi zawierać następujące elementy:

  1. Adnotację @ScheduledTask (jeżeli zadanie zaplanowane nie jest definiowane we wtyczce, musi ono pochodzić z pakietu com.suncode)
  2. Publiczną metodę oznaczoną adnotacją @Define z jednym parametrem ScheduledTaskDefinitionBuilder
  3. Publiczną metodę o nazwie execute, która ma zostać wykonana okresowo. Metoda execute może zwracać dowolny typ włącznie z void. Zwrócona wartość będzie wyświetlona jako wynik przetwarzania zadania zaplanowanego. Ustawienie typu void jest jednoznaczne z brakiem rezultatu.

Przykładowa definicja przedstawiona jest poniżej:

@ScheduledTask
public class ExampleScheduledTask {
	@Define
	public void definition( ScheduledTaskDefinitionBuilder builder ) {
		builder
			.id( "example-scheduled-task" )
			.name( "example.scheduled.task.name" )
 			.description( "example.scheduled.task.desc" )
			.cancelable()
			.parameter()
				.id( "scheduled-task-param" )
				.name( "example.scheduled.task.param.name" )
				.description( "example.scheduled.task.param.desc" )
				.type( Types.STRING )
				.create();
	}
	
	public void execute( @Param( value = "scheduled-task-param" ) String param )
	{
		// Ciało zadania zaplanowanego
		...
	}
}

Implementacja metody execute

Zadanie zaplanowane musi posiadać metodę o nazwie execute. Metoda może posiadać następujące typy parametrów:

  • pojedynczy parametr zadania zaplanowanego - typ parametru musi być zgodny ze zdefiniowanym typem oraz musi być poprzedzony adnotacją @Param. Obsługiwane typy parametrów:
    • STRING
    • INTEGER
    • FLOAT
    • DATE - mapowane do org.joda.time.LocalDate (format yyyy-MM-dd)
    • DATETIME - mapowane do org.joda.time.LocalDateTime (format yyyy-MM-dd HH:mm:ss)
  • Parameters - zawiera wszystkie zdefiniowane parametry zadania zaplanowanego wraz z ich wartościami, jest to alternatywa dla pobierania parametru za pomocą wyżej wspomnianej adnotacji @Param,
  • Translator - translator dla tego komponentu. Więcej informacji tutaj,
  • CancelationHandler - przechowuje informację o tym, czy użytkownik w GUI kliknął przycisk Anuluj wykonywanie. Sam mechanizm anulowania zadania musi zaimplementować twórca komponentu. Przycisk Anuluj wykonywanie pokaże się tylko, jeżeli w builderze została wywołana metoda cancelable,
  • Logger - logger do logowania własnych komunikatów w komponencie. Komunikaty są zapisywane do plików (skonfigurowanych w Log4j) oraz zostaną wyświetlone w historii wykonywania zadania.
  • ProgressHolder - obiekt, w którym ustawić można aktualny progress wykonywania zadania zaplanowanego (liczba między 0 a 1). Progress ten zostanie wyświetlony w GUI.
  • ScheduledTaskInstanceInfo - obiekt przechowujący informacje o danej instancji zadania zaplanowanego.

Rejestracja zadania zaplanowanego we wtyczce

Jeżeli zadanie zaplanowane jest definiowane we wtyczce to należy dodatkowo zaznaczyć, że wtyczka ta udostępnia komponenty. W tym celu należy w pliku suncode-plugin.xml dodać wpis:

<!-- Udostępnianie komponentów (m.in. zadań zaplanowanych) -->
<workflow-components key="components" />

 

Metoda jako zadanie zaplanowane we wtyczce

Zadanie zaplanowane we wtyczce nie musi być komponentem. Może zostać stworzone tak samo, jak zadania zaplanowane definiowane w projektach klienckich - zadanie zaplanowane jako wywołanie publicznej metody.

Np. po stworzeniu klasy we wtyczce:

package com.suncode.plugin;

public class SomePluginClass
{
    public void someMethod( String text, Integer number )
    {
        System.out.println( "Text: " + text + ", number: " + number );
    }
    public void someMethod2( String text, Double number )
    {
        System.out.println( "Text: " + text + ", number: " + number );
    }
}

Po wpisaniu com.suncode.plugin.SomePluginClass w pole Nazwa klasy w oknie dodawania nowego zadania zaplanowanego wyświetlone zostaną metody someMethod oraz someMethod2, które można wybrać i dodać jako zadanie zaplanowane.

Takie zadania mają jednak ograniczenia:

  • nie można użyć adnotacji AdvancedTask do nadania nazwy, opisu itd. dla zadania zaplanowanego
  • nie można przerwać takiego zadania
  • nie można ustawić progresu dla takiego zadania
  • nie można logować

Ze względu na powyższe ograniczenia funkcjonalność ta powinna służyć jedynie do testowania własnych klas we wtyczkach. Preferowane jest, aby docelowo zadania zaplanowane we wtyczkach były komponentami.

UWAGA

Jeśli zadanie zaplanowane jest napisane jako rozszerzenie klasy AbstractAdvancedTask i ma włączoną adnotację cancelable = true to by przerwać wykonywanie takiego zadania należy w kodzie metody dodać warunek:

if (Thread.currentThread().isInterrupted())
{
    taskLog.info( "Anulowano....");
    log.info( "Anulowano....");
    break;
}         
  • No labels