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

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óstw

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 IOExcept

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. Sz