Seam és az AJAX

A Seamet teljes mértékben a Web2.0-ás alkalmazások készítésére optimalizálták. Az AJAX (Asynchronous Javascript and XML) alkalmazások készítésekor felmerülő legnagyobb kihívás a futtatás közben keletkező hatalmas adatbázis terhelés. Egy AJAX alkalmazás sokkal sűrűbben küld kéréseket, mint ,,hagyományos társa”. Ha minden ilyen AJAX kérést továbbítunk az adatbázisnak, az egy idő után képtelen lesz kezelni azokat. A Seam által nyújtott állapot-megőrző perzisztencia és alkalmazás kontextus lehetőséget nyújt a memóriában történő tárolásra, melynek segítségével az adatbázis lekérdezést csupán a hosszú — több kérésen keresztül tartó — folyamatok (long-running conversation) végén szükséges futtatni.

A Seam lehetőséget nyújt a komponensek életciklusának (component lifecycle) finom szabályzására. Ezzel segíti az adatbázisok terheltségének visszaszorítását és a virtuális gép szemétgyűjtőjének (garbage collector) működését. A Seam által nyújtott életciklus lehetőségek, definíciók:

  • @Stateless: A komponens ebben a kontextusban teljes mértékben állapot-vesztő.
  • @Event: “Legszűkebb” állapot-megőrző kontextus. Állapotát egy JSF hívás erejéig tartja (a JSF oldal teljes újratöltéséig).
  • @Page: A komponens állapota egy meghatározott oldalhoz kötődik. Az oldal betöltésekor jön létre, és tarja az állapotát, míg a felhasználó az adott oldalon van.
  • @Conversation: A Seamben a társalgás (conversation) egy vagy több web kérésből áll, melyek egy adott folyamathoz tartoznak (ilyen például egy szobafoglalás a megfelelő hotel kiválasztásától kezdve, a napok rögzítésén át, egészen a foglalás visszaigazolásáig). A társalgási kontextus az egyik legfontosabb fajtájú, hiszen pontosan szabályozható kezdete és vége, valamint több kérésen és oldalon is átívelhet.
  • @Session: A Session kontextusban lévő objektumot a HTTP munkamenet objektum kezeli. Akkor jár le amikor a lejárt felhasználó munkamenete. Egy ilyen kontextusban több társalgási kontextus is lehet.
  • @Application: Globális kontextus, mely általában statikus információkat tartalmaz. Az ebben a kontextusban levő komponensek az alkalmazás telepítésekor jönnek létre, és tartják az állapotukat egészen az alkalmazás teljes életciklusán át.

Hosszú folyamat definiálása társalgási kontextus segítségével. Szobafoglalás példa, kezdődik a szállodák keresésével és befejeződik a foglalás rögzítésével:

@Name("hotelBooking")
@Scope(ScopeType.CONVERSATION)
public class HotelBookingAction implements Serializable {
   @Begin(join=true)
   public String find() {
      // Hotelek keresese
   }
   ... ... // Hotel kiválasztasa, vendegejszakak fogallasa

   @End
   public String confirm() {
      // Foglalas adatainak mentese, tarsalgasi kontextus zarasa
   }

Dependecy injection

A Seam segítségével egyszerű POJO-ból építhetünk szerviz komponenst. Nincs szükség sem különböző interfészek implementálására, sem absztrakt osztályra, ahhoz, hogy a komponenst az alkalmazáshoz kapcsoljuk (lásd Java EE keretrendszerek integrációja). A következő kérdés az, hogy hogyan lépnek kapcsolatba az egyes osztályok futás időben, valamint, hogyan lépnek kapcsolatba olyan konténer szolgáltatásokkal (container services), mint például az adatbázis perzisztencia szerviz.
(tovább…)

JBoss Seam 1.

Mire jó a JBoss Seam keretrendszer?
A JBoss Seam egy pehelysúlyú keretrendszer (lightweight framework), mely a Java EE 5.0 hiányosságait pótolja. Azáltal, hogy a programozó és a Java EE keretrendszerek között helyezkedik el, egy konzisztens és könnyen érthető programozási modellt nyújt. Továbbá egyszerűsíti az állapot-megőrző (stateful) és üzleti folyamat-vezérelt (business process-driven) alkalmazások készítését.
(tovább…)