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.GA2. Uruchamiany kreator konfiguracji seam-gen:
C:\Andrzej\seam\jboss-seam-2.0.2.SP1>seam setupw 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-project5. 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 generate6. 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 explode7. 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
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ń