JBoss Seam 2008/2009
Z JASR Wiki
<<< Powrót do Tworzenie aplikacji wielowarstowych 2008/2009
Spis treści |
Wprowadzenie
Ćwiczenia i przykłady autor zaleca wykonywać w systemie operacyjnym Windows. Instalacja środowiska powinna się powieść również w środowisku Linux, przy czym autor zastrzega że miał problemy z uruchomieniem Eclipse IDE for Java EE Developers w wydziałowym laboratorium.
Instalacja
Ze względu na rozmiar środowiska z którego będziemy korzystać (w sumie 600 MB), można pliki umieścić w następujących lokacjach :
- /tmp dla Linux
- C:\Documents and Settings\ab123456\ dla Windows
Dla Windows proszę jednak o rozpakowanie JBoss AS oraz utworzenie workspace na dysku Z: (konto na students). W przeciwnym razie wystąpią problemy z uruchomieniem (spacje w ścieżce).
Ściągamy następujące oprogramowanie:
- Eclipse IDE for Java EE Developers :
- Zestaw pluginów JBoss Tools :
- http://www.jboss.org/tools/downloads/dev.html (All Plugins - A bundle of all JBoss Tools plugins)
- Serwer aplikacji JBoss AS 4.2.3.GA :
- JBoss Seam 2.1 :
Rozpakowujemy wszystko, a następnie umieszczamy pluginy w JBoss Tools w nowym Eclipse.
Pierwszy projekt
Przy tworzeniu pierwszego projektu będziemy musieli skonfigurować eclipse'a, co zajmie chwile :
- Uruchamiamy Eclipse.
- Klikamy File -> New -> Other
- Wybieramy Seam -> Seam Web Project
- Wpisujemy nazwę projektu (np. seamisfun)
- Klikamy Target Runtime -> New
- Wybieramy JBoss, a division of Red Hat -> JBoss 4.2 Runtime
- Klikamy Next
- Ustawiamy Home Directory na katalog macierzysty naszego JBoss AS
- Klikamy Finish
- Klikamy Target Server -> New
- Upewniamy się, że jest wybrany JBoss, a division of Red Hat -> JBoss 4.2 Server
- Klikamy Finish
- Wybieramy Configuration -> Dynamic Web Project with Seam 2.1 (technology preview)
- Klikamy 3xNext (do oporu)
- Klikamy General -> Seam Runtime -> Add
- Ustawiamy Home Folder na katalog macierzysty JBoss Seam
- Klikamy Finish
- Klikamy Database -> Connection Profile -> New...
- Wybieramy HSQLDB
- Klikamy Next
- Klikamy Drivers -> New Driver Definition (Ikona z "plusem")
- W zakładce Name/Type z Available driver templates wybieramy HSQLDB JDBC Driver
- W zakładce Jar List z listy driver files usuwamy hsqldb.jar i dodajemy hsqldb.jar z naszego JBoss Seam (jboss-seam-2.1.1.GA\lib\hsqldb.jar)
- Klikamy Test Connection i widzimy Ping Succeeded!
- Klikamy Finish
- Klikamy Finish
- Klikamy na zieloną ikonę startu aplikacji i wybieramy run on Server -> JBoss 4.2
wchodzimy w naszej ulubionej przeglądarce na stronę http://localhost:8080/seamisfun/ i sprawdzamy czy z sukcesem zakończyliśmy konfigurację środowiska.
Ćwiczenia
Aplikacja CRUD
Aby stworzyć trochę ciekawszą aplikację, wykorzystamy generator aplikacji CRUD wbudowany w JBoss Tools. Naszym celem będzie aplikacja przypominająca zadanie zaliczeniowe z tegorocznych zajęć JEE (biblioteka zdjęć).
W tym celu tworzymy dwie klasy opisujące encje w naszym projekcie :
- Klikamy prawym przyciskiem na projekt, i wybieramy New -> Seam Entity
- Tworzymy kolejno klasy Photo oraz Folder
- Tworzymy relacje zawierania zdjęć przez folder
przykładowe kody źródłowe klas zamieszczam poniżej :
Klasa Photo
package org.domain.seamisfun.entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.ManyToOne;
import javax.persistence.Version;
import org.hibernate.validator.Length;
@Entity
public class Photo implements Serializable {
private Long id;
private Integer version;
private String name;
private String description;
private Folder folder;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
public Integer getVersion() {
return version;
}
private void setVersion(Integer version) {
this.version = version;
}
@Length(max = 20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToOne
public Folder getFolder() {
return folder;
}
public void setFolder(Folder folder) {
this.folder = folder;
}
}
Klasa Folder
package org.domain.seamisfun.entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.OneToMany;
import javax.persistence.Version;
import org.hibernate.validator.Length;
import static javax.persistence.CascadeType.ALL;
import static javax.persistence.FetchType.LAZY;
@Entity
public class Folder implements Serializable {
private Long id;
private Integer version;
private String name;
private String description;
private Set<Photo> photos = new HashSet<Photo>();
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Version
public Integer getVersion() {
return version;
}
private void setVersion(Integer version) {
this.version = version;
}
@Length(max = 20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@OneToMany(cascade = ALL, mappedBy = "folder", fetch = LAZY)
public Set<Photo> getPhotos() {
return photos;
}
public void setPhotos(Set<Photo> photos) {
this.photos = photos;
}
}
Po dodaniu klas, wybieramy New -> Seam Generate Entities, gdzie pamiętamy o zaznaczeniu Use existing entities. Po kliknięciu Finish dostajemy gotową aplikację!
W nowej aplikacji za darmo dostajemy takie ciekawe ficzery jak:
- sortowanie danych po kolumnach tabeli
- stronicowanie tabeli
- edycja wielu obiektów naraz w kilku zakładkach przeglądarki dzięki konwersacją.
- RESTful URLs - w URL są przechowywane informacje o stanie aplikacji - można do nich wrócić nawet po zamknięciu przeglądarki.
- zabezpieczenie części aplikacji przed nieuwierzytelnionym użytkownikiem.
Aby lepiej zrozumieć Seam'a dobrym pomysłem jest uważne przejrzenie źródeł wygenerowanej aplikacji. Z pewnością będzie to dobra rozgrzewka przed ćwiczeniami.
Ćwiczenie 1
Masz już podstawową intuicję w posługiwaniu się JBoss Tools. Spróbuj teraz samemu stworzyć nowy formularz zbierający od użytkownika wrażenia po korzystania z aplikacji i dodaj do niego link w Menu.
Wskazówka
Rozwiązanie
Ćwiczenie 2
Stwórz w swojej aplikacji nową stronę, która korzystając z nowego Seam'owego komponentu wyświetli w przystępny sposób liczbę zdjęć i folderów w bazie.
Wskazówka
Wskazówka
Rozwiązanie
Ćwiczenie 3
Spragnieni JBoss Seam'a mogą spojrzeć na początek tutoriala JBoss'a (http://docs.jboss.org/seam/1.0.1.GA/reference/en/html/tutorial.html) i zgodnie z instrukcjami uruchomić u siebie dostarczone z Seam'em aplikacje przykładowe. Do najciekawszych należą DVDStore oraz Registration.
Tutoriale
- http://docs.jboss.org/seam/1.0.1.GA/reference/en/html/tutorial.html - tutorial od JBoss'a
- http://www.mastertheboss.com/en/seam/ - inny tutorial
- http://edemmorny.wordpress.com/ - blog z ciekawą serią artykułów i tutoriali o JBoss Seam
- http://www.theserverside.com/tt/articles/article.tss?l=JBossSeamFramework - bardzo dobry artykuł o JBoss Seam
Ciekawe Linki
- http://component-showcase.icefaces.org/component-showcase/showcase.iface - demo ICEFaces
- http://seamframework.org/Documentation/LinksToExternalSeamDocumentation - lista wielu ciekawych odnośników
- http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/seam/Seam_Reference_Guide/index.html - dokumentacja Seam'a
- http://duch.mimuw.edu.pl/~sroka/wiki/index.php/JBoss_Seam_(14-16) - bardzo rozbudowane wiki sprzed roku