Palio


Opis

Moduł Palio jest zbiorem podstawowych metod języka jPALIO wśród których można wyróżnić

Pobieranie informacji o bieżącym kontekście

Wykonywany kod jPALIO jest umieszczony w obiekcie, wywoływanym na określonej stronie instancji jPALIO. Do określenia tego kontekstu służą 3 bezparametrowe metody modułu Palio: $currentObjectCode() zwracająca kod bieżącego obiektu, $currentPageCode() zwracająca kod bieżącej strony oraz $currentInstance() zwracająca nazwę bieżącej instancji jPALIO.

Pobieranie wartości zmiennych

Wartości zmiennych w jPALIO są pobierane w następujący sposób

$nazwaZmiennejGlobalnej
$@nazwaZmiennejLokalnej
$nazwaTablicyGlobalnej[]
$@nazwaTablicyLokalnej[] lub $@nazwaTablicyLokalnej

Konstrukcje te posiadają jednak ograniczenia. Jeżeli nazwa zmiennej nie jest dana wprost, ale jest wynikiem wykonania pewnej operacji (np. sklejenia ciągów znaków) wówczas nie można zastosowąć powyższych konstrukcji. Wartość zmiennej w takim przypadku można pobrać stosując metody modułu Palio - w najprostszym przypadku

$getParam("nazwaZmiennejGlobalnej")
$getParam("@nazwaZmiennejLokalnej")
$getParamTable("nazwaTablicyGlobalnej")
$getParamTable("@nazwaTablicyLokalnej")

Metoda getParam zwraca wartość parametru o nazwie, która jest jej argumentem. Zwracana wartość jest typu Object. Isnieją również metody zwracające wartość pożądanego typu - takiego jaki ma wartość zmiennej.

Pobieranie wartości parametrów wywołania obiektu

Wartości kolejnych parametrów wywołania obiektu pobierane są w następujący sposób: $0, $1, $2, ... Jeżeli numer parametru do którego chcemy się odwołać nie jest dany wprost, ale jest wynikiem wykonania pewnej operacji wówczas można wykorzystać metody modułu Palio. Metoda getObjectParam zwraca wartość parametru, którego numer jest jej argumentem. Jeżeli wartość parametru jest tablicą należy użyć metody getObjectParamTable. Jeżeli liczba parametrów wywołania obiektu nie jest znana można ją określić za pomocą bezargumentowej metody getObjectParamsCount.

Konwersje typów danych

Moduł Palio defniuje zestaw metod do konwersji typów danych. Są to:

Dodatkowe parametry powyższych metod umożliwiają określanie sposobu konwersji jak format dat, format liczb zmiennoprzecinowych, zbiór kodowy ciągu znaków, itp.

Zdefniowano następujące metody konwersji

Konwersja z
String Date Long BigDecimal Boolean byte[] Object
Konwersja na
String


Date × ×
×
× ×
Long ×

× ×
BigDecimal ×
× × ×
Boolean × ×
×
× ×
×
byte[] × ×
×
× × ×
Object × × × ×
×
×
×

Sterowanie wykonywaniem kodu jPALIO

W module Palio zdefiniowane zostały metody sprawdzające czy zmienna ma wartość null lub też czy zmienna nie ma wartości null. Są to odpowiednio metody isNull i isNotNull, których argumentem jest sprawdzana wartość. Ze względu na częste stosowanie tych metod jako warunku instrukcji if w module Palio stworzone zostały skrócone wersje instrukcji if z takim warunkiem.

Instrukcja

$if($isNull(...), { ... })

Jest równoważna z

$ifNull(..., { ... })

Instrukcja

$if($isNotNull(...), { ... })

jest równoważna z

$ifNotNull(..., { ... })

Instrukcja

$if($not(...), { ... })

jest równoważna z

$ifNot(..., { ... })

W module Palio została również zdefiniowana bezparametrowa metoda exit która kończy wykonywanie strony w miejscu jej wywołania.

Wykonywanie kodu jPALIO

Istnieją sytuacje, kiedy kod jPALIO nie może być zapisany wprost lub nie powinien być wykonany w miejscu, gdzie został umieszczony. Wówczas należy użyć specjalnych metod modułu Palio:

Wykonanie kodu jPALIO w sposób synchronizowany oznacza, że dany fragment kodu nie może się wykonywać równolegle ze sobą. Oznacza to, że jeżeli dwóch użytkowników spróbuje równocześnie wykonać operację, która wymaga wykonania synchronizowanego fragmentu kodu, to operacja u jednego z użytkowników wykona się dopiero gdy u ta sama operacja u drugiego z nich się zakończy (u jednego z użytkowników nastąpi oczekiwanie na zakończenie operacji u drugiego z nich).

Wykonywanie koodu jPALIO w nowym wątku oznacza, że jego wykonanie będzie się odbywać równolegle z dalszym przetwarzaniem obiektu.

Aby wywołać obiekt, którego kod nie jest znany wprost, ale jest wynikiem wykonania pewnej operacji należy posłużyć się jedną z metod

 

$object("KOD_OBIEKTU")
$object("KOD_OBIEKTU", [PARAMETRY])

 

Obiekty inicjalizacji instancji

Moduł Palio wspiera uruchamianie obiektów jPALIO podczas inicjalizacji instancji jPALIO. Funckjonalność ta jest szczególnie przydatna w sytuacjach gdy chcemy wykonać jakieś operacje (np. inicjalizację słowników, keszy itd) zanim instancja jPALIO zostanie otwarta na żądania (osiągnie stan RUNNING). Obiekty do wykonanania należy wskazać w konfiguracji instancji. Poniżej przedstawiono przykładową konfigurację.

<module name="palio">
    <instanceInitializationObjects>
        palio.init.init1
        palio.init.init2
    </instanceInitializationObjects>
</module>
Wskazane obiekty są sekwencyjnie wykonywane w momencie gdy instancja jPALIO osiągnie stan READY.

Przykładowy log jpalio.log ze startu instancji podczas, którego wywołano obiekty inicjalizacji:

2010-11-30 11:33:06 INFO  workshop.jpalio - Instance starting with jPALIO server version 7.4.17 ...
2010-11-30 11:33:08 INFO  workshop.jpalio - Instance in database state
2010-11-30 11:33:12 INFO  workshop.jpalio - Instance ready
2010-11-30 11:33:12 INFO  workshop.jpalio - Executing instance initialization objects ...
2010-11-30 11:33:12 INFO  workshop.jpalio - palio.init.init1 [OK]
2010-11-30 11:33:12 INFO  workshop.jpalio - palio.init.init2 [OK]
2010-11-30 11:33:12 INFO  workshop.jpalio - Instance is running
2010-11-30 11:33:12 INFO  workshop.jpalio - Loaded 0 sessions
2010-11-30 11:33:12 INFO  workshop.jpalio - Instance workshop opened from workshop.xml

Przykłady

Ustawianie i pobieranie wartości zmiennych o nazwach tworzonych dynamicznie

$=(@page, (Object[])null)
$=(@pages, $sql.read("select id, name from p_pages order by name", (Object[])null, [Long, String]))

$// For each page set variable named @pageNameX to the name of the page having identifier of X
$for(@page, $@pages, {
  $=($+(["@pageName", $@page[0]]), $@page[1])
})

$// For each page get value of variable named @pageNameX where X is the page identifier
$for(@page, $@pages, {
  $getParam($+(["@pageName", $@page[0]]))<br>
})

 

Konwersja bieżącej daty (typ Date) na ciąg znaków (typ String) w formacie yyyy-MM-dd HH:mm:ss, gdzie yyyy - cztery cyfry roku, MM - dwie cyfry numeru miesiąca, dd - dwie cyfry numeru dnia miesiąca, HH - dwie cyfry godziny (tryb 24-godzinny), mm - dwie cyfry minut, ss - dwie cyfry sekund

$toString($time.now(), "yyyy-MM-dd HH:mm:ss")

 

Wykonanie kodu jPALIO zapisanego w postaci ciągu znaków i zwrócenie wygenerowanej treści na przykładzie ewaluacji wyrażeń logicznych

$=(@expression, "not (not true and not false or true and false)")
$=(@value, $executeToBuffer($+(["${ ", $replace($replace($replace($@expression, "not", "!"), "and", "&&"), "or", "||"), "; }"])))
$@value

 

API

http://jpalio.torn.com.pl/modules/palio/modules/Palio.html