Skip to main content

Posts

Showing posts from January, 2009

Elegancki CRUD w jednej akcji Struts2 część 2/2

Kontynuuję moją opowieść o Struts2, zamykając wątek z części pierwszej.

W tak zwanym międzyczasie zacząłem czytać "Groovy in Action", potem zobaczyłem też wpis na blogu Jacka Laskowskiego. Cóż, zaryzykuję stwierdzenie, że z punktu widzenia wygody programowania, wsparcia języka dla typowych czynności programistycznych (ale niestety również wydajności), Groovy ma się do Javy jak Java do C++. Jednym słowem jestem mocno oczarowany finezją tego języka: pętla for odchodzi do lamusa, dostajemy za to operator statku kosmicznego "<=>" i znakomite wsparcie dla kolekcji). Grails z kolei wzbudziło we mnie wątpliwość, czy kilkanaście stron tekstu by opisać CRUDa w Struts2, jednym z najpopularniejszych frameworków webowych w Javie to nie przesada...

Jednak do Grooviego na pewno wrócę, a teraz dokończmy naszą aplikację webową w staroświeckiej i nieporadnej Javie (autor ww. książki ostrzegał, że po pierwszym zetknięciu z Groovy właśnie tak będzie wyglądał powrót do Javy ;-)). …

Elegancki CRUD w jednej akcji Struts2 część 1/2

Elegancki CRUD w jednej akcji Struts2 część 1/2

Wreszcie pojawiło się Struts2 w stabilnej wersji z gałęzi 2.1.x. Branch ten wprowadza wiele nowości, dlatego z niecierpliwością czekałem na edycją oznaczoną literkami GA miast beta. Chyba programiści się nieco pośpieszyli z oznaczeniem Struts 2.1.6 mianem gotowego produkcyjnie, ale nie przeszkodzi to nam w przedstawieniu krótkiego tuto riala tego znakomitego frameworku.

Postanowiłem przedstawić Wam sposób na implementację całego procesu CRUD określonego obiektu dziedziny za pomocą jednej akcji. Pojedyncza klasa będzie zatem odpowiedzialna za cały cykl życia obiektu: utworzenie, edycję, podgląd, przeglądanie i usuwanie. Jako przykład wymyśliłem sobie portal filmowy i oczywiście obiekt Movie:


public class Movie {
private long id;
private String title;
private Calendar released;
private String director;
private Integer length;
//get/set
}


Ale od początku, zaczynamy od utworzenia szkieletu projektu za pomocą mavena:

mvn archetype:create -DgroupId=…

SCJD - Sun Certified Java Developer zdobyty!

Bez zbędnych wstępów, chciałem pochwalić się zdanym certyfikatem Sun Certified Java Developer (SCJD, CX-310-027), którego przyjemność zdawania umożliwiła mi moja ulubiona firma :-). Przyjemność tym większa, że wynik bardzo pozytywnie mnie zaskoczył (dodam, że próg wynosi 320/400):SectionMaxActual
General Considerations:10090
Documentation:7070
Object-Oriented Design:3030
GUI:4031
Locking:8080
Data Store:4040
Network Server:4040
Total:400381
Ale nie o wynikach chciałem napisać, a podzielić się wrażeniami. Ponieważ szczegóły zadanie są tajne/poufne :-) - raczej ogólnymi.

Przede wszystkim certyfikat, złożony z zadania projektowego i eseju, raczej nie nauczy Was super-nowego-frameworku, biblioteki czy technologii. Swing + RMI i zakaz korzystania z jakichkolwiek zewnętrznych bibliotek.

Ale chyba nie o to chodzi - ten certyfikat to głównie szlifowanie i sprawdzanie "miękkich" umiejętności programistycznych. Kod musi być dobrze napisany, udokumentowany, korzystać z całej palety wzorców projek…

Freemarker - pierwsze kroki

Postanowiłem sporządzić krótki tutorial z jednym prostym przykładem pokazującym podstawowe możliwości Freemarkera. Wbrew pozorom nie stanąłem przed koniecznością migracji plików JSP na Freemarker, a użyłem tej biblioteki w klasycznej, konsolowej aplikacji Java SE. Jak się okazało, sprawdziła się znakomicie.

Bez zbędnego lania wody - Freemarker jest procesorem, który na wejściu otrzymuje model (zestaw obiektów Java) + szablon, a na wyjściu produkuje dokument będący szablonem uzupełnionym o odpowiednio sformatowane dane z modelu. Problem polega na konwersji obiektu Java do reprezentacji tekstowej. By być precyzyjnym, chodziło o translację następującego JavaBeanu:
package com.blogspot.nurkiewicz;

import java.util.List;

public class Procedure {

private boolean returns;

private String name;

private List<String> args;

/* konstruktory, gettery i settery*/

}

do kodu w języku Java. Dla przykładowych wartości właściwości: name="count", args=[x, y, size], returns=true, powinniśmy otrzymać …