środa, 31 grudnia 2008

Geronimo, Derby i OpenJPA

Jakiś czas temu na laboratorium zajmowaliśmy się łączeniem z bazą danych Derby na serwerze Geronimo oraz OpenJPA jako implementacją JPA. Niestety nie wszystkim udało się wykonać to zadanie na zajęciach. W związku z tym, postanowiłem zrobić videotutorial, który prezentował krok po kroku co należy zrobić. Mając już taki przykład nie powinno być problemu, aby zastosować inną bazę danych czy implementacje Java Persistence API. Sama aplikacja nie robi zbyt wiele, dodaje tylko imię użytkownika do bazy danych, czyli to samo co zaprezentował kolega Dominik w poprzednim poście. Plik wideo można pobrać stąd.

wtorek, 30 grudnia 2008

JBoss 5.0 i DataSource

Witam
Integracja JBoss-a z Eclipsem już za nami jednak by spokojnie pisać aplikacje Java EE pozostało kilka rzeczy do zrobienia. Najpierw zdefiniujemy JBoss-owi DataSource, czyli naszą bazę danych. Ja zdecydowałem się na PostgreSQL, Bartek na MySQL.
Wchodzimy najpierw do folderu z JBoss-em (dalej nazywany jboss_home) następnie docs\examples\jca i kopiujemy stąd przykładowy plik konfguracyjny naszej bazy. W moim przypadku postgres-ds.xml, dla tych co wybrali MySQL mysql-ds.xml. Plik ten wklejamy do jboss_home\server\default\deploy\. Zajrzyjmy do środka. Dla postgresa powinien wyglądać mniej więcej tak:
<datasources>
  <local-tx-datasource>
    <jndi-name>PostgresDS</jndi-name>
    <connection-url>jdbc:postgresql://[servername]:[port]/[databasename]</connection-url>
    <driver-class>org.postgresql.Driver</driver-class>
    <user-name>x</user-name>
    <password>y</password>
    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
    <metadata>
      <type-mapping>PostgreSQL 7.2</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>
Po kolei co jest co :
  • jndi-name jest to nazwa pod jaką zostanie zarejestrowana w JBoss-ie nasza baza.

  • connection-url jest to powiedzmy link do naszej bazy. Zamiast [servername] wpisujemy 127.0.0.1 ew localhost (lub adres serwera, na którym mamy serwer bazy), zamiast [port] wpisujemy port, na którym nasłuchuje nasza baza (dla postrgresa defaultowo 5432), [database] nazwa naszej bazy danych. U mnie wygląda to tak: jdbc:postgresql://127.0.0.1:5432/pz2 .

  • driver class mówi JBoss-owi jakiego rodzaju sterowników (o tym za chwile) ma szukać.

  • user-name i password już tłumaczyć chyba nie trzeba.

Sterowniki. Dla PostgreSQL dostępne pod http://jdbc.postgresql.org/download.html. Dla Javy 1.6 wybieramy wersje sterownika JDBC4, a dla pozostałych (obecnie serwery aplikacji obsługują do 1.5 więc wersja dla nas) JDBC3.
Dla MySQL http://dev.mysql.com/downloads/connector/j/5.1.html wybieramy *.tar.gz lub *.zip. Pobrane pliki *.jar (w wypadku MySQL należy wypakować i z głównego folderu skopiować connector) wrzucamy do jboss_home\server\default\lib\

Uff po tym wszystkim tworzymy projekt EAR tak jak zwykliśmy to robić, z warstwą biznesową i webową. Zostały nam do wykonania jeszcze dwie rzeczy.
W EarContent\META-INF\ tworzymy plik jboss-api.xml i wpisujemy:

<jboss-app>
  <loader-repository>
    MojProjekt:archive=ProjektEAR.ear
  </loader-repository>
</jboss-app>

Gdzie: MojProjekt jest to napis który w pewien sposób identyfikuje nasz projekt w JBossie (tych, którzy chcą się dowiedzieć więcej odsyłam do dokumentacji JBoss-a, a ProjektEAR.ear jest to nazwa dla zbudowanego projektu ProjektEAR przez eclipse-a (np. projekt EAR o nazwie asd po zbudowaniu da plik asd.ear).
Potem w części EJB musimy wyedytować plik persistence.xml (standardowo w ejbModule\META-INF\ ) u mnie wygląda tak.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ProjektEJB">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:/PostgresDS</jta-data-source>
  <properties>
    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
    <property name="hibernate.hbm2ddl.auto" value="update"/>
  </properties>
</persistence-unit>
</persistence>
Z tego wszystkiego interesuje nas:

  • name="ProjektEJB" nazwa części biznesowej projektu (akurat moja to ProjektEJB)

  • jta-data-source nazwa jndi naszej bazy danych skąd to wziąść? Nazwę podaliśmy w pliku postgres-ds.xml lub mysql-ds.xml (w pliku może być zdefiniowana więcej niż jedna baza!).
    Przedrostek java:/ jest związany z jndi, które mnie odrzucało od poprzednich wersji JBossa więc pominę co to, a powiem, że musi tu być i kropka.

  • hibernate.dialect mówi Hibernate-owi jakim "dialektem" SQL-a ma się posługiwać w komunikacji z bazą danych. Dla PostgreSQL jest to org.hibernate.dialect.PostgreSQLDialect dla MySQL5.0 org.hibernate.dialect.MySQL5Dialect (pełna lista tu).

  • hibernate.hbm2ddl.auto w jaki sposób hibernate "zachowuje się" w naszej bazie. Przy ustawieniu create-drop w momencie rozruchu tworzy tabele, ale gdy SessionFactory kończy swój żywot (czyli jak wyłączymy naszą aplikacje) sprząta po sobie w bazie. Jeśli chcemy zachować swoje dane musimy ustawić create lub update. Idąc za materiałem znalezionym w internecie użyłem update.

Reszta pozostaje bez zmian (pełną liste properties można znaleźć na tej stronie). W tym momencie możemy już pisać encje, beany mając dostęp do wstrzyknięć zależności i wszystkiego co Java EE nam zapewnia.
A tutaj macie prosty projekt działający pod JBossem i bazą PosrtgreSQL. Jako, że to projekt z Eclipse może być konieczne ponowne ustawienie zależności. Czyli:



A następnie:



W razie problemów pisać w komentarzach co się dzieje.
Życzę milej zabawy.

Drzazga:
W celu przeglądania wyników naszej pracy na bazie danych możemy posłużyć się phpMyAdmin albo zestawem programów prosto od Suna MySql Tools. Konfiguracja i przeglądanie zawartości bazy jest dosyć proste, więc nie będę się rozpisywał.
Jeśli wybraliście Postgresa to wraz z nim instaluje się pgAdmin III, w którym będziecie zarządzać bazą. HF

poniedziałek, 29 grudnia 2008

Konfiguracja Eclipsa pod JBossa

Witam
Ostatnimi czasy dostaliśmy od prowadzącego zadanie na zaliczenie. Mamy napisać trójwarstwową aplikacje wykorzystującą bazę danych, JSF i inne do tej pory poznane elementy Javy EE, a także technologie dotychczas nie omawiane (im więcej tym lepiej). Używanie serwera aplikacji, który był przedstawiany na zajęciach (Geronimo) jest raczej niewskazane. Postanowiliśmy więc spróbować swoich sił z niedawno wydanym JBossem 5.0.

Aby cieszyć się nowiutkim serwerem musimy zainstalować wtyczkę do Eclipsa, a mianowicie dostarczaną przez JBossTools, JBossAS Tools. Potrzebować będziemy wersji 2.0 tej wtyczki znajdującej się w pakiecie JBossTools 3.0 beta1, ponieważ na niższej wersji nie chce ruszyć najnowszy JBoss(przynajmniej u mnie). Mamy 2 możliwości dodania JBossTools'a:
  1. Wchodzimy tutaj , ściągamy wtyczki z działu Development Downloads, interesuje nas głównie JBossAS Tools, dzięki któremu odpalimy JBoss'a w Eclipsie, chociaż inne wtyczki też mogą się przydać. Po ściągnięciu i wypakowaniu wystarczy wrzucić wszystko do katalogu Eclipsa. Restartujemy Eclipsa, jeśli był uruchomiony.
  2. Drugim sposobem jest dodanie wtyczek prosto z Eclipsa. W tym celu przechodzimy do Help->Software Updates, klikamy na zakładkę Availible Software, nastepnie Add Site i wpisujemy http://download.jboss.org/jbosstools/updates/development , OK. Pojawia się nowa gałąź w oknie. Wybieramy interesujące nas wtyczki, pamietajmy o JBossAS Tools, instalujemy i zgadzamy sie na restart Eclipsa.

Po restarcie przechodzimy do zakładki Servers klikamy prawym na puste pole New-> Server. Z folderu "JBoss, a division of Red Hat" wybieramy JBossAS 5.0:
Dodajemy Server runtime enviroment, jako home directory wybieramy \folderDoKtoregoWypakowalismyJBossa\jboss-5.0.0.GA\, ustawiamy konfigurację na default, następnie JRE, Finish, Next Next i voila:
Powinien się pojawić JBoss 5.0 Server na liście naszych serwerów. Można już go wystartować żeby być pewnym, że wszystko działa:
Proponuję jeszcze ustawić, aby serwer nie republish'owal automatycznie projektu po zapisaniu któregoś z plików projektu. Ja i Dominik mamy tendencje do częstego zapisywania plików i ta opcja bardzo nas drażniła. Aby ją wyłączyć klikamy 2x na nasz serwer w zakładce Servers a następnie Publishing i zaznaczamy Never publish automatically.

Witamy

Jesteśmy dwójką studentów wydziału informatyki na UG. Od pewnego czasu zajmujemy się pisaniem aplikacji w technologii Java EE. W tym okresie już nie raz doświadczyliśmy problemu w znalezieniu przejrzystych informacji na interesujący nas temat. W związku z tym postanowiliśmy wspólnie stworzyć blog, na którym można będzie znaleźć porady i dokładne instrukcje jak poradzić sobie w świecie Java EE. Mamy nadzieje, że nasze wskazówki okażą się przydatne. Jeśli chodzi o adres na naszego bloga, to ma on związek z naszym obecnym miejscem zamieszkania, czyli piwnica domku jednorodzinnego.