Podczas tworzenia aplikacji webowej z facelets w roli głównej i wspierającym Apache Maven 2, testowym środowiskiem uruchomieniowym naturalnie stał się Jetty poprzez maven-jetty-plugin. Wystarczy zdefiniować następującą sekcję plugin w pom.xml i można uruchamiać aplikację z mvn jetty:run.
<plugin>Zmiana strony xhtml nie wymaga ponownego uruchomienia Jetty (cf. scanIntervalSeconds), ale klasy niestety już tak. Mimo wszystko możliwość testowania aplikacji w ten sposób znosi początkowe trudności konfiguracji serwera aplikacyjnego (co może stanowić nie lada wyzwanie czasowe). Owa błogość trwała do momentu, kiedy byłem zmuszony skonfigurować dostęp do bazy danych. Powiało grozą, gdyż nigdy wcześniej nie konfigurowałem Jetty, a już na pewno nie w trybie uruchamiania z poziomu wtyczki maven-jetty-plugin. Szczęśliwie strach ma wielkie oczy i konfiguracja dostępu do bazy danych, to dodanie następujących sekcji Array oraz New do pliku wskazanego przez jettyConfig dla maven-jetty-plugin w pom.xml:
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<systemProperties>
<systemProperty>
<name>jetty.home</name>
<value>./src</value>
</systemProperty>
<systemProperty>
<name>java.security.auth.login.config</name>
<value>src/etc/login.conf</value>
</systemProperty>
</systemProperties>
<jettyConfig>src/etc/jetty.xml</jettyConfig>
</configuration>
</plugin>
<Array id="plusConfig" type="java.lang.String">Oczywiście konieczne jest dodanie klas sterownika bazy danych do ścieżki klas (ang. classpath) Jetty (w moim przypadku konieczne było dodanie ojdbc14.jar dla Oracle 8.2.0.8). Dodanie biblioteki do lokalnego repozytorium mavenowego poleceniem mvn install:install-file:
<Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
<Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
<Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
</Array>
<New id="facelets-webapp" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="ConfigurationClasses">
<Ref id="plusConfig" />
</Set>
</New>
<New id="faceletsDB" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/faceletsDB</Arg>
<Arg>
<New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<Set name="URL">jdbc:oracle:thin:@localhost:1521:DEVEL</Set>
<Set name="User">jacek</Set>
<Set name="Password">laskowski</Set>
</New>
</Arg>
</New>
jlaskowski@work /cygdrive/ci następującej sekcji dependencies do plugin dla maven-jetty-plugin w pom.xml:
$ mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=oracle \
-DartifactId=ojdbc14 -Dversion=9.2.0.8 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file]
[INFO] Installing c:\ojdbc14.jar to C:\.m2\oracle\ojdbc14\9.2.0.8\ojdbc14-9.2.0.8.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
<dependencies>kończy pomyślnie temat widoczności klas przez Jetty. Istnieje również możliwość dodania sterownika bazodanowego jako zależności maven-jetty-plugin z kwalifikatorem zasięgu - scope - z wartością system, co zniesie konieczność jego instalacji do lokalnego repozytorium mavena.
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>9.2.0.8</version>
</dependency>
</dependencies>
Na koniec (a może właśnie od tego powinniśmy zacząć, aby osoba konfigurująca środowisko dla naszej aplikacji była świadoma wymagania) odnotowujemy referencję bazy danych używaną w aplikacji poprzez resource-ref w WEB-INF/web.xml:
<resource-ref>I tyle. Mogę kontynuować pracę z facelets i maven wzbogaconymi o dostęp do bazy Oracle. Więcej informacji o konfiguracji JNDI w dokumentacji Jetty - Using JNDI Resources with jetty6.
<res-ref-name>jdbc/faceletsDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
Dostałem na skrzynkę wskazanie na ciekawy produkt APINI Knowledge Base polskiej firmy Verax Systems (nie obawiam się podejrzeń o ukrytą kryptoreklamę, gdyż robię to całkowicie świadomię, aby promować polskie innowacje). Autor wiadomości (pracownik firmy) pisał: "Jacku, przy okazji przeszukiwania Internetu zauważyłem twój pomysł na system Knowledge Base. Mieliśmy podobny problem z gromadzeniem i wymiana informacji, a ponieważ jesteśmy firmą produkującą soft, napisaliśmy na własne potrzeby i nie tylko taki system." I dalej "Szczególnie zachęcam do zapoznania się z multimedialną prezentacją systemu tj. z krótkim filmem o podstawowych funkcjonalnościach systemu oraz o korzyściach płynących z zastosowania tego rozwiązania.". Zabrało mi to niecałe 5 minut (przy aktualnie użytkowanym, niezwykle wolnym łączu w sieci UPC) i przyznaję, że system zrobił na mnie niezwykle pozytywne wrażenie. Zastanawiałem się jak pozycjonują się względem Confluence Wiki czy MediaWiki, ale niestety nie otrzymałem odpowiedzi, więc temat otwarty. Mimo wszystko pomyślałem, że warto wypromować produkt polskiej firmy (chociaż nazwa i domena *.com wcale na to nie wskazują). Chciałbym móc napisać, że jest darmowa wersja dla społeczności javowej, ale nic o tym nie wiem. Może spróbować wykorzystać produkt do stworzenia wspomnianej bazy wiedzy javowej? Czy może lepiej pozostać przy darmowej dla niedochodowych organizacji licencji dla Confluence Wiki, albo wręcz użyć MediaWiki?
Brak komentarzy:
Prześlij komentarz