Skip to main content

Posts

Showing posts from May, 2009

Skrypty Groovy na żądanie w Springu

W poprzednich artykułach udało nam się nakłonić Springa do załadowania skryptu w Groovim z bazy danych i uruchomienia go. Jednak to nie wszystko - chcielibyśmy również w łatwy sposób móc testować nasze skrypty przed umieszczeniem ich w bazie danych. Konkretnie dążymy do stworzenia webowego ekranu, w którym w przeglądarce będzie można wpisywać treść skryptu, uruchomić go na serwerze i obejrzeć wyniki. Zacznijmy od końca, czyli od uruchomienia:

public interface AutowiredScriptExecutor {

Object execute(String source) throws ScriptCompilationException, ScriptExecutionException;

<T> T execute(String source, Class<T> returnType) throws ScriptCompilationException, ScriptExecutionException;

}Interfejs dość oczywisty: jako argument podajemy kod źródłowy np. w Groovy a zwracany jest rezultat wykonania skryptu (skrypt musi zapewnić jakiś mechanizm zwracania danych). Przeciążona wersja uchroni nas od rzutowania w dół z Object, jeśli skrypt zwraca znany, konkretny typ. Przejdźmy do nie…

Relacja z GeeCON 2009 w Krakowie

Właściwie mógłbym się ograniczyć do standardowego "było super, niech żałują Ci, co ich nie było" - i nie minąłbym się z prawdą. Ale po kolei…

Z voucherem otrzymanym od Warszawa JUG, za co bardzo dziękuję, wybrałem się do Krakowa. Na pierwszy ogień (no, na drugi, najpierw był szwedzki stół ;-)) padła JavaFX. Keynote Simona Rittera zostanie z pewnością zapamiętana dzięki "sztuczce z deską": oczywiście będę wredny i nie zdradzę na czym polegała, ale była imponująca :-). I tak, chociaż pokaz nie miał wiele wspólnego z Javą FX, wszyscy będą już kojarzyli tą technologię - i to jest sztuka prowadzenia prezentacji!

Potem wysłuchałem krótkiej prezentacji o Springu 3.0 w duecie Alef Arendsen i Arjen Poutsma (tego ostatniego miałem już przyjemność wysłuchać podczas Spring 3.0 w Warszawie). Zasadniczo zmiany można opisać jako "Tiger ready" - Spring czerpie wreszcie pełnymi garściami z dobrodziejstw Javy 5. I chyba najwyższy czas. Ja wiem, jest jeszcze mnóstwo starego k…

Logika biznesowa w Groovy ze Springiem i JPA część 2/2

Przypominam, że naszym celem jest pobieranie skryptów Groovy z bazy danych, a użyjemy do tego JPA. Oczywiście chcemy maksymalnie wykorzystać wsparcie springowe, jednak nie obejdzie się bez małego "tuningu". Krótka zabawa w detektywa i znajdujemy metodę convertToScriptSource() klasy org.springframework.scripting.support.ScriptFactoryPostProcessor:

protected ScriptSource convertToScriptSource(
String beanName, String scriptSourceLocator, ResourceLoader resourceLoader) {

if (scriptSourceLocator.startsWith(INLINE_SCRIPT_PREFIX)) {
return new StaticScriptSource(scriptSourceLocator.substring(INLINE_SCRIPT_PREFIX.length()), beanName);
}
else {
return new ResourceScriptSource(resourceLoader.getResource(scriptSourceLocator));
}
}Metoda ta parsuje string przekazany jako argument atrybutu script-source i zwraca obiekt implementujący ScriptSource:
package org.springframework.scripting;

public interface ScriptSource {
String getScriptAsString() throws IOException;
boolean isModif…

Logika biznesowa w Groovy ze Springiem i JPA część 1/2

Na początek scenka rodzajowa: w pewnym systemie istotną rolę odgrywała wstępna weryfikacja klienta opisanego następującym obiektem:
public class CustomerProfile {
private long pesel;
private int age;
private BigDecimal salary;
private Locale country;
//get/set
}
Komponent realizujący weryfikację ma intuicyjny interfejs:
public interface CustomerVerifier {
boolean verify(CustomerProfile profile);
}W pierwszej wersji systemu wystarczyła zwykła implementacja i wpis w deskryptorze springowym:
<bean id="customerVerifier " class="com.blogspot.nurkiewicz.customer.CustomerVerifierImpl">Życie jednak pokazało, że logika biznesowa dokonująca weryfikacji zmienia się jak w kalejdoskopie. Dochodzą nowe warunki, zmieniają się parametry, coraz nowe komponenty biorą udział w weryfikacji. Jasnym stało się, że zamiast sztywnego kodu w Javie potrzebny jest bardziej elastyczny kod skryptowy, niezależny od aplikacji i możliwy do modyfikacji bez ponownego wdrażania. Szczęściem w ni…