Archiwum tagu ‘seam-gen’
JBoss Tools – wsparcie dla Seam’a w Eclipse
W poprzednim poście utworzyłem pierwszy projekt (HelloWorld) za pomocą seam-gen. Spróbujmy teraz skonfigurować sobie środowisko dla tego oraz innych projektów Seam‘owych.
Firma JBoss przyszła nam z pomocą i stworzyła JBoss Tools, czyli zestaw narzędzi dla Eclipse, które wspomagają pracę z frameworkiem JBoss Seam. Najszybszy sposób instalacji narzędzi wiedzie nas przez Update Manager’a, gdzie podajemy odpowiedni link i instalujemy wybrane narzędzia. Zestaw JBoss Tools poza wsparcie dla Seam’a zawiera narzędzia pomocne przy pracy między innymi z jBPM, Hibernate, Struts. Jeśli mamy już zainstalowany pakiet JBoss Tools, zabieramy się do pracy.
W pierwszej kolejności importujemy projekt do Eclipse’a. Wybieramy File > Import > Existing Projects into Workspace i szukamy projektu. Po poprawnym imporcie projekt HelloWorld powinien pojawić się w naszym eksploratorze paczek (ang. Package Explorer).
Następnie przełączamy perspektywę na Seam i przechodzimy do konfiguracji projektu. W sekcji Seam Settings w pierwszej kolejności zaznaczamy Seam support dalej przechodzimy do konfiguracji środowiska uruchomieniowego JBoss Seam – Seam runtime. W tym celu klikamy Add i w oknie, które się pojawi podajemy folder domowy Seam’a (C:\Program Files\JBoss-seam-2.1.1.GA), nazwę konfiguracji (np.: Seam runtime) oraz wersję frameworka (2.0).
W dalszej kolejności dodajemy i konfigurujemy połączenie z bazą danych projektu (Connection profile). Klikamy New… i w okienku podajemy wszystkie wymagane dane takie jak nazwę połączenia (np.: hello database) typ bazy, dane do połączenia, ścieżkę do sterownika, e.t.c. Poniżej prezentuję zrzut ekranu ukazujący ustawienia dla mojego projektu.
Pakiet narzędzi JBoss Tools pozwala również na utworzenie projektu bez korzystania z seam-gen‘a. Wybieramy File > New > Seam Web Project. Kreator przeprowadzi nas przez proces konfiguracji projektu podczas, którego możemy utworzyć konfigurację serwera, połączenia do bazy danych i środowiska uruchomieniowego.
Dzięki JBoss Tools mamy możliwość szybkiego tworzenia encji, akcji, konwersacji, e.t.c. Narzędzie to jest między innymi nakładką na seam-gen’a. Ponadto dostajemy kilka dodatkowych edytorów (np.: dla facelets) oraz ładne widoki deskryptorów. Postaram się dostarczać więcej informacji wraz z poznawaniem JBoss Tools’ów.
JBoss Seam – pierwszy projekt
Skoro już udało mi się zainstalować Seam’a czas na pierwszy projekt.
JBoss Seam dostarcza nam narzędzie seam-gen, które pozwala między innymi na utworzenie szkieletu aplikacji (ang. scaffolding) oraz reverse engineering aplikacji dla istniejącej już bazy danych. Skorzystamy z tego narzędzia aby utworzyć pierwszy projekt w JBoss Seam.
W linii komend wpisujemy:
seam setup
Aby polecenie to zadziałało lokalizacja, w której jest Seam powinna być dodana do zmiennej środowiskowej Path. Po wywołaniu polecenia uruchomiony zostanie konfigurator środowiska oraz projektu. Na każde pytanie konfiguratora odpowiadamy podając wymagane przez niego dane. Jeśli odpowiada nam zaproponowana wartość (podana w nawiasach kwadratowych) wciskamy Enter. Pojawi się komunikat:
SEAM_HOME: C:\Program Files\JBoss-seam-2.1.1.GA Using seam-gen sources from: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen Buildfile: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen\build.xml init:
Oraz rozpocznie proces konfigurowania projektu.
setup: [echo] Welcome to seam-gen :-) [input] Enter your Java project workspace (the directory that contains your Seam projects) [F:/workspace] [F:/workspace]
Wybieramy ścieżkę do katalogu gdzie znajdują się nasze projekty. U mnie jest to workspace Eclipse‘a: F:/workspace. Projekt zostanie później utworzony w podanej lokalizacji.
[input] Enter your JBoss AS home directory [C:/Program Files/JBoss-4.2.2.GA] [C:/Program Files/JBoss-4.2.2.GA]
Podajemy ścieżkę do katalogu domowego serwera JBoss. U mnie jest to: C:/Program Files/JBoss-4.2.2.GA
[input] Enter the project name [HelloWorld [HelloWorld]
Podajemy nazwę projektu. Jak inaczej nazwać pierwszy projekt, jeśli nie HelloWorld
[echo] Accepted project name as: HelloWorld [input] Do you want to use ICEfaces instead of RichFaces [n] (y, [n])
Wybieramy do budowy widoku będzie używana biblioteka ICEfaces zamiast standardowego rozwiązania w Seamie jakim jest RichFaces? Domyślna opcja to n, czyli pozostajemy przy RichFaces.
[input] skipping input as property icefaces.home.new has already been set. [input] Select a RichFaces skin [deepMarine] (blueSky, classic, [deepMarine], DEFAULT, emeraldTown, japanCherry, ruby, wine)
Wybieramy styl jaki będzie użyty dla RichFaces. Mamy kilka do wyboru, ja zdecydowałem się na domyślną wartość deepMarine
[input] Is this project deployed as an EAR (with EJB components) or a WAR (w ith no EJB support) [ear] ([ear], war)
Wybieramy sposób pakowania projektu. Wybieramy pomiędzy domyślną wartością ear a war. Zawierzę dokumentacji Seam’a i zdecyduję się na domyślną wartość ear. Dokumentacja informuje nas, że jeśli posiadamy serwer aplikacji zgodny z EJB 3.0 (JBoss taki jest) oraz posiadamy Javę EE 5 to powinniśmy zdecydować się na ear
[input] Enter the Java package name for your session beans [pl.michalmech.helloworld] [pl.michalmech.helloworld]
Podajemy nazwę paczki w aplikacji dla naszych beanów odpowiedzialnych za logikę biznesową, czyli dla Session Beans. Ja proponuję: pl.michalmech.helloworld
[input] Enter the Java package name for your entity beans [pl.michalmech.helloworld.model] [pl.michalmech.helloworld.model]
Podajemy nazwę paczki dla encji, reprezentujących dane w bazie, czyli dla Entity Beans. Proponuję: pl.michalmech.helloworld.model
[input] Enter the Java package name for your test cases [pl.michalmech.helloworld.test] [pl.michalmech.helloworld.test]
Podajemy nazwę paczki dla testów aplikacji. Niech będzie to pl.michalmech.helloworld.test
[input] What kind of database are you using? [hsql] ([hsql], mysql, oracle, postgres, mssql, db2, sybase, enterprisedb, h2)
Wybieramy typ bazy danych. Aplikacja HelloWorld nie będzie jej wymagała więc niech będzie to domyślna baza HSQL
[input] Enter the Hibernate dialect for your database [org.hibernate.dialect.HSQLDialect] [org.hibernate.dialect.HSQLDialect]
Wybieramy dialekt Hibernate‘a dla wybranej bazy danych. Dla HSQL’a jest to org.hibernate.dialect.HSQLDialect
code[input] Enter the filesystem path to the JDBC driver jar [C:\Program Files\JBoss-seam-2.1.1.GA/lib/hsqldb.jar] [C:\Program Files\JBoss-seam-2.1.1.GA/lib/hsqldb.jar]
Podajemy lokalizację sterownika, spakowanego do pliku JAR, dla JDBC, obsługującego wybraną przez nas bazę. U mnie jest to C:\Program Files\JBoss-seam-2.1.1.GA/lib/hsqldb.jar
code[input] Enter JDBC driver class for your database [org.hsqldb.jdbcDriver] [org.hsqldb.jdbcDriver]
Podajemy nazwę klasy sterownika dla JDBC, obsługującego wybraną przez nas bazę. W mojej sytuacji jest to org.hsqldb.jdbcDriver
[input] Enter the JDBC URL for your database [jdbc:hsqldb:.] [jdbc:hsqldb:.]
Podajemy URL do bazy danych: jdbc:hsqldb:.
[input] Enter database username [sa] [sa]
Użytkownik bazy danych: sa
[input] Enter database password [] []
Hasło użytkownika bazy danych: (brak hasła)
[input] Enter the database schema name (it is OK to leave this blank) [] []
Schemat bazy. Skoro piszą “it is OK to leave this blank” to ja jestem na OK.
[input] Enter the database catalog name (it is OK to leave this blank) [] []
Katalog bazy. Skoro piszą “it is OK to leave this blank” to ja jestem na OK.
[input] Are you working with tables that already exist in the database? [n] (y, [n])
Czy pracujemy z bazą danych, która już posiada tabele z danymi? Nie, czyli opcja: n
[input] Do you want to drop and recreate the database tables and data in import.sql each time you deploy? [n] (y, [n])
Czy jeśli rozmieszczamy aplikację na serwerze (ang. deploy) to baza danych ma zostać wyczyszczona i wykonana ma być zawartość pliku import.sql. Nie: n
[delete] Deleting: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen\build.properties [propertyfile] Creating new property file: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen\build.properties [echo] Installing JDBC driver jar to JBoss AS [echo] Type 'seam create-project' to create the new project BUILD SUCCESSFUL Total time: 18 seconds
Jeden z ostatnich komunikatów informuje nas, że konfiguracja została zapisana w pliku C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen\build.properties. Możemy zawsze go zmienić jeśli nie chcemy ponownie uruchamiać konfiguratora.
Zgodnie z kolejną informacją powinniśmy teraz wykonać instrukcję seam create-project. W pliku seam-gen\README, w folderze domowym Seam’a próżno szukać informacji o poleceniu seam new-project choć dokumentacja właśnie to polecenie zaleca wykonać. Jaka jest różnica? Prawdopodobnie żadna i jedno polecenie jest aliasem drugiego. Wykonajmy:
seam create-project
Wynik działania polecenia to:
C:\Program Files\JBoss-seam-2.1.1.GA>seam create-project SEAM_HOME: C:\Program Files\JBoss-seam-2.1.1.GA Using seam-gen sources from: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen Buildfile: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen\build.xml init: init-properties: [echo] C:/Program Files/JBoss-4.2.2.GA validate-workspace: validate-project: icefaces-staging-copy: initcopy: initpoms: [echo] Setting up dependencies [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [artifact:install] [INFO] Installing C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms\root.pom to C:\Documents and Settings\Mike\.m2\repository\org\jboss\seam\root\2.1.1.GA\root-2.1.1.GA.pom [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms[artifact:install] [INFO] Installing C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms\parent.pom to C:\Documents and Settings\Mike\.m2\repository\org\jboss\seam\parent\2.1.1.GA\parent-2.1.1.GA.pom [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms [copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms[copy] Copying 1 file to C:\Program Files\JBoss-seam-2.1.1.GA\classes\poms copyseam: copyseamdependencies: copyjbossembedded: copy-icefaces-home: copy-icefaces-maven: copy-lib: [echo] Copying Seam and dependencies to the F:/workspace/HelloWorld/lib directory... [copy] Copying 120 files to F:\workspace\HelloWorld\lib [copy] Copied 5 empty directories to 2 empty directories under F:\workspace\HelloWorld\lib [echo] Copying JBoss Embedded configuration to the F:/workspace/HelloWorld/ bootstrap directory... [copy] Copying 30 files to F:\workspace\HelloWorld\bootstrap file-copy-war: file-copy-ear: [echo] Copying resources needed for EAR deployment to the F:/workspace/HelloWorld/resources directory... [copy] Copying 1 file to F:\workspace\HelloWorld\resources\WEB-INF [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 7 files to F:\workspace\HelloWorld\resources setup-filters: file-copy: [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 3 files to F:\workspace\HelloWorld\resources [copy] Copying 11 files to F:\workspace\HelloWorld\resources [copy] Copying 4 files to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld\.settings [copy] Copying 1 file to F:\workspace\HelloWorld [copy] Copying 1 file to F:\workspace\HelloWorld [mkdir] Created dir: F:\workspace\HelloWorld\nbproject [copy] Copying 3 files to F:\workspace\HelloWorld\nbproject [copy] Copying 1 file to F:\workspace\HelloWorld\resources [copy] Copying 1 file to F:\workspace\HelloWorld\resources [copy] Copying 1 file to F:\workspace\HelloWorld\resources [copy] Copying 1 file to F:\workspace\HelloWorld\resources [copy] Copying 1 file to F:\workspace\HelloWorld\resources [copy] Copying 1 file to F:\workspace\HelloWorld\resources [copy] Copying 12 files to F:\workspace\HelloWorld\view [copy] Copying 9 files to F:\workspace\HelloWorld\view [copy] Copying 1 file to F:\workspace\HelloWorld\src\hot\pl\michalmech\helloworld [copy] Copying 3 files to F:\workspace\HelloWorld [mkdir] Created dir: F:\workspace\HelloWorld\src\main\pl\michalmech\helloworld\model [mkdir] Created dir: F:\workspace\HelloWorld\src\test\pl\michalmech\helloworld\test [copy] Copying 1 file to F:\workspace\HelloWorld\src\test create-project: [echo] A new Seam project named 'HelloWorld' was created in the F:/workspace directory [echo] Type 'seam explode' and go to http://localhost:8080/HelloWorld [echo] Eclipse Users: Import the project using File Import... Existing Projects into Workspace, set the root directory to F:/workspace, then select the project named HelloWorld [echo] NetBeans Users: Open the project using File Open project... and select the project folder F:/workspace/HelloWorld [echo] IDEA Users: Open the project using File Open project... and select the file F:/workspace/HelloWorld/HelloWorld.ipr BUILD SUCCESSFUL Total time: 17 seconds
Projekt został poprawnie utworzony. JBoss Seam był na tyle uprzejmy, że przygotował projekt tak by można było go zaimportować do dowolnego z trzech najpopularniejszych IDE dla Javy (Eclipse, NetBeans, IntelliJ IDEA).
Pozostało nam skompilować, spakować projekt i rozmieścić na serwerze (ang. deploy). Wykonujemy polecenie sugerowane nam przez seam-gen’a:
seam explode
Wynikiem powinno być:
SEAM_HOME: C:\Program Files\JBoss-seam-2.1.1.GA Using seam-gen sources from: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen Buildfile: C:\Program Files\JBoss-seam-2.1.1.GA\seam-gen\build.xml init: init-properties: [echo] C:/Program Files/JBoss-4.2.2.GA validate-workspace: validate-project: explode: [echo] Deploying project 'HelloWorld' to JBoss AS as an exploded directory init: [mkdir] Created dir: F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.jar [mkdir] Created dir: F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war [mkdir] Created dir: F:\workspace\HelloWorld\dist groovy.compile: groovy.copy: compile: [javac] Compiling 1 source file to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.jar copyclasses: jar: [copy] Copying 2 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.jar [copy] Copying 2 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.jar\META-INF [copy] Copying 1 file to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.jar\META-INF [copy] Copying 1 file to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.jar war: [copy] Copying 21 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war [copy] Copying 1 file to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war\WEB-INF\classes [copy] Copying 4 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war\WEB-INF [copy] Copying 13 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war\WEB-INF\lib [copy] Copying 1 file to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war\WEB-INF\classes [copy] Copying 6 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\HelloWorld.war\WEB-INF\classes ear: [copy] Copying 1 file to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear [copy] Copying 11 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\lib [copy] Copying 2 files to F:\workspace\HelloWorld\exploded-archives\HelloWorld.ear\META-INF stage: datasource: [copy] Copying 1 file to C:\Program Files\JBoss-4.2.2.GA\server\default\deploy explode: [copy] Copying 67 files to C:\Program Files\JBoss-4.2.2.GA\server\default\deploy\HelloWorld.ear BUILD SUCCESSFUL Total time: 6 seconds
Sprawdźmy rezultat w przeglądarce. Wpisujemy adres http://localhost:8080/HelloWorld i cieszymy oczy (należy pamiętać o tym by serwer JBoss był uruchomiony) pierwszą aplikacją, którą “napisaliśmy” bazując na szkielecie JBoss Seam.

