JBoss Seam – tworzenie nowej encji
Mam już wygenerowany projekt Seam, do którego będę chciał dodać jakąś encję. Ponieważ podstawowym udogodnieniem zapewnianym przez JBoss Seam jest uwierzytelnienie i autoryzacja, będzie to encja użytkownika User.
Najpierw krótko o projektach. Ponieważ wybrałem opcję Deploy as: EAR, kreator wygenerował aż 4 projekty. Pierwszy – project (założę dla uproszczenia, że właśnie taką nazwę projektu wybrałem) – zawiera interfejs WWW. W project-ejb znajduje się logika biznesowa, czyli ogólnie komponenty. Oba te projekty połączone są w jedną aplikację Java EE – project-ear. Dodatkowo powstał projekt project-test, w którym znajdują się testy.
Przygotowanie bazy danych
Przed przystąpieniem do tworzenia klasy encji, utworzę niezbędne struktury na poziomie bazy danych. Użyję w tym celu programu pgAdmin.
Po pierwsze muszę dodać nową bazę danych, w której będą przechowywane informacje o użytkownikach. Następnie dodaję tabelę użytkowników:
CREATE TABLE "users"
(
"id" bigint NOT NULL,
"version" integer NOT NULL,
"login" character varying(32) NOT NULL,
"password" character(32),
CONSTRAINT "pk_users" PRIMARY KEY ("id"),
CONSTRAINT "unq_login" UNIQUE ("login")
);
Tabela zawiera klucz główny id, wersję rekordu version, nazwę użytkownika login oraz hasło password.
Następnie tworzę sekwencję, która posłuży do automatycznego generowania kluczy:
CREATE SEQUENCE "hibernate_sequence" INCREMENT 1;
Jest to domyślne źródło wartości używanych dla adnotacji @GeneratedValue.
Klasa encji
Do projektu project-ejb dodaję plik – File→New→Seam Entity. W polu Seam entity class name wpisuję User. Automatycznie uzupełniają się nazwy stron, poprzez które będę miał dostęp do edycji użytkowników: userList i user. Klikam Finish i oglądam rezultat.
Otwieram plik project-ejb/ejbModule/org.domain.project.entity/User.java. Najpierw dopiszę nazwę tabeli jako adnotację do klasy:
import javax.persistence.Table;
// ...
@Entity
@Table(name = "users")
public class User implements Serializable { // ...
Ponieważ klasa implementuje interfejs Serializable, dodaję do niej stałą:
private static final long serialVersionUID = 1L;
Dodaję adnotacje org.hibernate.validator.NotNull i javax.persistence.Column przy metodzie getID, aby uzyskać następujący rezultat:
@Id
@GeneratedValue
@NotNull
@Column(name = "id")
public Long getId() { // ...
Podobnie robię z metodami getVersion i getName:
@Version
@NotNull
@Column(name = "version")
public Integer getVersion() { // ...
@Length(max = 20)
@NotNull
@Column(name = "login")
public String getName() { // ...
Jeszcze tylko mała adnotacja do setVersion, żeby uniknąć ostrzeżeń:
@SuppressWarnings("unused")
private void setVersion(Integer version) {
Trochę dużo tych adnotacji, więc wytłumaczę się z nich przy innej okazji. Teraz pora uruchomić serwer – u dołu ekranu przechodzę na zakładkę JBoss Server View, wybieram JBoss 5.0 Server i klikam na zielonym kółku z białym trójkątem (symbol play), aby uruchomić usługę. Następnie czekam 2 minuty, aż na konsoli pojawi się mniej więcej taka informacja:
18:02:35,723 INFO [ServerImpl] JBoss (Microcontainer) [5.0.0.GA (build: SVNTag=JBoss_5_0_0_GA date=200812042120)] Started in 1m:14s:47ms
Teraz mogę wejść na stronę http://localhost:8080/project/ i zobaczyć że aplikacja działa. Aby przetestować zarządzanie użytkownikami, wchodzę jeszcze na stronę http://localhost:8080/project/userList.seam.
Podsumowanie
Dzisiaj opisałem tworzenie nowej klasy encji. Następnym razem omówię poszczególne adnotacje i zajmę się hasłami.




1 Trackback(s)