Marzec
19
2009

JBoss Seam – tworzenie nowej encji

Słowa kluczowe: , , , | Kategorie: Seam Framework
No Gravatar

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: userListuser. 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.NotNulljavax.persistence.Column przy metodzie getID, aby uzyskać następujący rezultat:

@Id
@GeneratedValue
@NotNull
@Column(name = "id")
public Long getId() { // ...

Podobnie robię z metodami getVersiongetName:

@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. 1 Trackback(s)

  2. Linki do stron: encje « Robocze notatki

Napisz Komentarz

*