Blog

Blog from July, 2007

Érdekes olvasmány Spencer Uresk írása, amely a JPA-val kapcsolatos benyomásairól szól, egyszerűen összefoglalva a JPA előnyeit:

  1. Jó haverok leszünk az adatbázis adminokkal, hiszen nekik sok tapasztalatuk van az adatbázisokkal kapcsolatban, amelyekből sok előnyünk származhat.
  2. Az első kapavágástól kezdve szabványos entitás neveket használunk, hiszen a JPA elkészíti helyettünk az adatbázis táblákat.
  3. Ne tegyünk mindent a táblákba, hiszen sok attribútumot talán nem is használunk.
  4. Tegye az adatbázis, amiben jó, hiszen igen erős függvények és tárolt eljárások írhatók (lást első pont :).
  5. Ne egy egész adatbázist tervezzünk meg, mindig csak akkora részt, amit az ügyfél is átlát, a többit majd mindig hozzáragasztjuk.
  6. Ne használjunk triggert, mert sok gondot okoz a háttérben, inkább hagyatkozzunk a JPA lehetőségeire.
  7. Dobjuk ki az adatbázis generátor programokat, legalább annyi probléma van velük, mint amennyit segítenek.
  8. Használjunk NamedQuery-ket, mivel ezek induláskor érvényesítődnek, nem futás közben derül ki a hiba.
  9. Ne kívánjunk lehetetlent, ne rugjuk ki az összes DBA-t, mert a JPA majd helyettük dolgozik.
  10. Használunk domain modellt, mert jobban illik objektum orientált környezetbe.

Mark Dexter az Eclipse égisze alatt - az Eclipse Europe örömére - elkezdett publikálni egy 16 részes Eclipse oktatási anyagot, amely videón mutatja be az Eclipse (és a Java) használatát kezdőknek. Az első rész során elindítjuk a fejlesztőkörnyezetet, majd a kezdeti beállítások után létrehozzuk a projektet, a projekt beállítása után pedig az első Java osztályunkat: a Person osztályt (és már elértük az első videó felét). A videó hátralévő része a mezők és az Eclipse kódkezelőjének bemutatásával telik el. Az első rész mintapéldája okán egy könyvkölcsönző programra tippelek, amely közepesen jó példa az objektum orientált szemlélet bemutatására. A sorozat többi része folyamatosan készül, szerintem most mindegyikünk idegesen topog, mert szeretné folytatni a Java tanulmányait... :)

Természetesen a videó közben sok-sok öntömjénező üzenetet is láthatunk, amely az Eclipse új termékének újdonságait illetve a már meglévő tulajdonságait (dupla kattintás a fülön maximalizálja az ablakot, stb.) mutatja be... de mivel a videó mögött az Eclipse áll, ez elnézhető... :)

Design Pattern depó

Design Pattern a PatternDepot.com oldalról! Akinek lelkiismeret furdalása van Design Pattern ismereteit tekintve, annak ajánlatos letöltenie PDA eszközére a http://www.patterndepot.com/put/8/DesignJava.PDF. állományt és hazafelé olvasgatni, esetleg számítógépén átnézni a mintákhoz tartozó példaprogramokat. Nos, nézzük, milyen tervezési mintákat olvashatunk a könyvben:

  • Creational
    • The Factory
    • The Abstract Factory
    • Singleton
    • Builder
    • Prototype
  • Structural
    • Adapter
    • Bridge
    • Composite
    • Decorator
    • Facade
    • Flyweight
    • Proxy
  • Behaviorial
    • Chain of Responsibility
    • Command
    • Interpreter
    • Iterator
    • Mediator
    • Memento
    • Observer
    • State
    • Strategy
    • Template
    • Visitor

Mindegyik mintához kapunk egy bővebb leírást a minta létrehozásához vezető okokról, kapunk egy mintaproblémát, kapunk egy megoldást, kapunk egy forráskódot, illetve egy összefoglalást.

Ajax4JSF

A JavaBeat portál JSF szakosztálya Shunmuga Raja személyében közzétett egy Ajax4JSF gyorstalpalót. A leírás a fogalmak tisztázásával kezdődik, vagyis mi az AJAX, mi a JSF, mit jelent a kettő együtt, majd a lovak közé csap, és bemutatja a keretrendszer lényegi elemeit. Az egyik leglényegesebb elem a régiókba zárás, amelyeknek törzse nem vesz részt az oldal felépítésében, viszont a megadott azonosító alapján a kliens oldali JavaScript vissza tud kérdezni a szerver oldalra:

<a4j:region id = "employeeRegion" actionListener = "#{manager.processEmpData}">
  <!-- Other Set of Components -->
</a4j:region>

A másik lényeges elem a commandButton, amely JSF esemény előtt egy kliensoldali AJAX eseményt vált ki:

<a4j:commandButton id = "clickButton" value = "Click Me" action = "#{Listener.processClickRequest}" oncomplete = "jsFunction()">
  reRender = "CompId1, CompId2, CompId3"
</a4j:commandButton>

A harmadik lényegese elem a poll, amely rendszeres időközönként visszakérdez a szerver oldalra:

<a4j:poll id = "refreshId" reRender = "CompId1, CompId2" timeout = "50000" interval = "1000">
</a4j:poll>

Ezeken túl sok apróság található meg a keretrendszerben, mint például a képek és stream-ek kezelésére szolgáló mediaOutput, amely a kliensoldali JavaScript működése alapján a szerverről letölti a megfelelő adatot:

<a4j:mediaOutput id = "telephone"  element = "img" mimeTye = "image/png" createContent = "#{ImagePainter.drawImage}">
</a4j:mediaOutput>

A keepAlive életben tartja a kérés idejére szóló MBean-t:

<a4j:keepAlive beanName = "#{manager.empBean}"></a4j:keepAlive>

Kliensoldalon előálló ciklusszervezés alapján ismételtethető a JSF komponensek:

<a4j:repeat id = "repeater" value = "#{manager.empList}" var = "employee">
  <h:outputText id = "name" value = "#{employee.name}"/>
      <h:outputText id = "age" value = "#{employee.age}"/>
</a4j:repeat>

A státuszsor kezeléséhez szükséges status tag:

<a4j:status startText = "Request sent to the Server" stopText = "Request is completed">
</a4j:status>

Események összekötésére szükséges support tag, amellyel meghatározott JavaScript eseményekre akár több komponenst is újra tudunk tölteni:

<a4j:inputText id = "userInput">
  <a4j:support event = 'onblur' action = "#{bean.process}" binding = "bean.userInput" reRender = "CompId1, CompId2"/>
</a4j:inputText>

A leírás harmadik részében egy példaalkalmazás elkészítésébe tekinthetünk bele, természetesen bőven dokumentálva és részletes leírásokkal...