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
}