czwartek, 25 marca 2010

Seam-gen w akcji

Od 2 tygodniu tonę w dokumentacji/artykułach dotyczących Seam'a, ciężko by było to wszystko przyswajać bez motywacji. Dla tych, którzy jeszcze nie przekonali się do tego, że warto poczytać trochę o tym Seam'ie, proponuje mały tutorial o seam-gen – coś co w moim wypadku przeważyło szalę: warto, czy nie warto czytać o Seam'ie.

Seam-gen ogólnie przywrócił moją wiarę w JaveEE, w której od zawsze widziałem ogromny potencjał, ale nie mogłem pojąć, dlaczego tworzenie w niej czegokolwiek jest tak trudne, a przede wszystkim czasochłonne? Ktoś kto używał np. cakePHP wie o czym mówię, ponieważ używając caka, możemy zrobić w pełni działającego CRUD'a w kilka minut. I tą lukę w Javie wypełnia Seam-gen – narzędzie do tworzenia CRUD'a na podstawie bazy danych. Koniec gadania, przejdźmy do rzeczy.

Co potrzebujemy:

1. Wszystko to co było potrzebne w poprzednim tutorialu (wybieramy 1 serwer który bardziej nam odpowiada w tym przypadku będę bazował na JBoss'ie)
2. Serwer bazy danych, proponuje zainstalować MySql, najlepiej z jakimś przyjemnym supportem, żebyśmy nie musieli go obsługiwać z poziomu konsoli. Instalacja wamp'a załatwi sprawę: link
3. Sterownik JDBC do MySql'a, link

Przygotowanie:

- Wszystko co to zostało napisane we wcześniejszym tutorialu.
- Przygotowanie MySql:
- należy utworzyć nową bazę danych, wraz z przykładowymi tabelami – pozostawiam to czytelnikowi.

Odpalenie Seam-gen:

1. Przechodzimy do katalogu głównego Seam'a i edytujemy plik: build.properties, gdzie umieszczamy ścieżkę do katalogu głównego JBoss'a w moim przypadku:
jboss.home=C:\\jboss-4.2.3.GA
2. Uruchamiany kreator konfiguracji seam-gen:
C:\Andrzej\seam\jboss-seam-2.0.2.SP1>seam setup
w tym momencie kreator konfiguracji zada nam serię pytań, których wynikiem będzie plik konfiguracyjny znajdujący się w seam-gen/build.properties. Generalnie możemy edytować go ręcznie lub używać kreatora.

3. W nawiasach kwardatowych znajdują się defaultowe (lub zapamiętane z wcześniejszego użycia) odpowiedzi – możemy je zatwierdzić naciskając po prostu ENTER.

Pyt: [input] Enter your Java project workspace (the directory that contains your Seam projects) [C:/Projects] [C:/Projects]
Odp: c:/eclipse/workspace
//Używam '/' zamiast '\\' - mniej pisania.

Pyt: [input] Enter your JBoss home directory [C:/Program Files/jboss-4.2.2.GA] [C:/Program Files/jboss-4.2.2.GA]
Odp: C:/jboss-4.2.3.GA
//ścieżka do katalogu głównego z JBoss

Pyt: [input] Enter the project name [myproject] [myproject]
Odp: NowyProjekt

//Wybieramy nazwe dla projektu:

Pyt: [input] Do you want to use ICEFaces instead of RichFaces [n](y, [n])
Odp: ENTER

Pyt: [input] Select a RichFaces skin [blueSky] ([blueSky], classic, ruby, wine, deepMarine, emeraldTown, sakura, DEFAULT)
Odp: ENTER

Pyt: [input] Is this project deployed as an EAR (with EJB components) or a WAR (with no EJB support) [ear] ([ear], war)
Odp: war
// wybieramy war, jeśli chcemy korzystać z JavaBeans, zamiast EJB, oraz jeśli chcemy później używać tzn. „hot deployment”

Pyt: [input] Enter the Java package name for your session beans [com.mydomain.NowyProjekt] [com.mydomain.NowyProjekt]
Odp: com.mydomain.NowyProject.action

Pyt: [input] Enter the Java package name for your entity beans [com.mydomain.NowyProject.action] [ com.mydomain.NowyProject.action]
Odp: com.mydomain.NowyProject.model

Pyt: [input] Enter the Java package name for your test cases [com.mydomain.NowyProject.action.test] [com.mydomain.NowyProject.action.test]
Odp: com.mydomain.NowyProject.test

Pyt: [input] What kind of database are you using? [hsql] ([hsql], mysql, oracle,postgres, mssql, db2, sybase, enterprisedb, h2)
Odp: mysql

Pyt: [input] Enter the Hibernate dialect for your database [org.hibernate.dialect.MySQLDialect] [org.hibernate.dialect.MySQLDialect]
Odp: ENTER

Pyt: [input] Enter the filesystem path to the JDBC driver jar [../lib/hsqldb.jar][../lib/hsqldb.jar]
Odp: C:/java_libs/mysql-connector-java-5.1.12-bin.jar

Pyt: [input] Enter JDBC driver class for your database [com.mysql.jdbc.Driver] [com.mysql.jdbc.Driver]
Odp: ENTER

Pyt: [input] Enter the JDBC URL for your database [jdbc:mysql:///test] [jdbc:mysql://test]
Odp: jdbc:mysql://localhost/cms
//url do bazki, w moim przypadku baza ma nazwę „cms”

Pyt: [input] Enter database username [sa] [są]
Odp: root

Pyt: [input] Enter database password [] []
Odp: ENTER //ponieważ nie mam ustawionego hasła

Pyt: [input] Enter the database catalog name (it is OK to leave this blank) [] []
Odp: ENTER

Pyt: [input] Are you working with tables that already exist in the database? [n] (y, [n])
Odp: y

Pyt: [input] Do you want to drop and recreate the database tables and data in import.sql each time you deploy? [n] (y, [n])
Odp: n

Kreator powinien zakończyć swoje działanie poprawnie:
BUILD SUCCESSFUL

Total time: 15 minutes 56 seconds

Możemy podejrzeć jak wygląda plik konfiguracji seam-gen: seam-gen/build.properties.

4. Kolejnym krokiem jest utworzenie bazowej struktury projektu, używając polecenia: seam create-project
C:\Andrzej\seam\jboss-seam-2.0.2.SP1>seam create-project
5. Wykonując polecenie: seam generate dokonujemy inżynierii odwrotnej i na podstawie bazy generowane są odpowiednie widoki oraz klasy.
C:\Andrzej\seam\jboss-seam-2.0.2.SP1>seam generate
6. Ostatnim poleceniem jest: seam explode, które pozwoli nam zdeployować projekt i być oczarowanym tym jak ładnie seam-gen wygenerował nam CRUD'a
C:\Andrzej\seam\jboss-seam-2.0.2.SP1>seam explode
7. Uruchamiamy JBoss'a i sprawdzamy jak wygląda nasz projekt w przeglądarce:
http://localhost:8080/NowyProjekt/

W następnej notce postaram się napisać jak podłączyć tak wygenerowany projekt pod Eclipsa lub NetBeansa

1 komentarz:

  1. wszystko pieknie ladnie, ale nie wiem dlaczego?!, ... tabele w mojej bazie mysql zawierajace w swoich nazwach "_" np "T_TABELA" powoduja problemy przy uruchamianiu projektu na serwerze JBoss, nie wspomne o probach i problemach zwiazanych z podlaczaniem do mssql, oracle:]

    OdpowiedzUsuń