programmera.net -> ejb -> normal för utskrift | info@programmera.net |
Livscykeln för en CMP entitetsböna
1. Livscykel
På denna sida går vi igenom en CMP entitetsbönans olika tillstånd och de "callback"-metoder som behållaren aropar på instansen då instansen går från ett tillstånd till ett annat.
En entitetsböna har den mest komplicerade livscykeln av alla böntyper. Bilden nedan visar hur en entitetsböna fungerar:
De olika tillstånden beskrivs nedan:
2. Initiering
Då servern startas skapar behållaren själv upp ett antal instanser av bönan och placerar dessa i en pool. Servern bestämmer själv hur många instanser som ska vara i poolen. När behållaren tycker att fler instanser behövs kommer fler att skapas upp. När en entitetsböna instansieras sker följande:
3. Aktivering
Aktivering innebär att instansen byter tillstånd från POOLED till METHOD READY. Tänk dig att en klient anropar en affärsmetod på "EJBObject" (som klienten har fått genom att anropa "findByPrimaryKey()"). Behållaren letar nu efter en instans av entitetsbönan som befinner sig i tillståndet METHOD READY och har samma primära nyckel som den anropande "EJBObject". Om ingen sådan instans hittas kommer behållaren att aktivera en instans i poolen. Aktivering innebär följande:
Nu har instansen nått tillståndet METHOD READY.
4. Passivering
Passivering är motsatsen till aktivering, d.v.s. instansen går från METHOD READY till POOLED. Passivering sker när behållaren vill spara resurser och anser att instansen inte behöver hålla entitetens data längre (det är upp till tillverkaren av behållaren att avgöra när passivering ska ske). Passivering innebär följande:
Nu har instansen tillståndet POOLED.
5. Skapa en entitet
Att skapa en entitet innebär att entiteten läggs till i databasen. Detta sker då klienten anropar "createX()" på sin referens av "EJBHome". Följande sker:
Nu har instansen tillståndet METHOD READY.
6. Ta bort en entitet
Att ta bort en entitet innebär att entiteten tas bort ur databasen. En entitet tas bort då klienten anropar "remove()" på motsvarande "EJBObject". Följande sker:
Nu har instansen tillståndet POOLED.
7. setEntityContext()
Anropas av behållaren i samband med att bönan initieras. I denna metod ska du se till att instansen lagrar EntityContext någonstans, vanligtvis i en medlemsvariabel:
Nu kan du komma åt alla metoder som exponeras i EntityContext via medlemmen "context".
public void setEntityContext(EntityContext ctx){
// Save the context
this.context = ctx;
}
8. unsetEntityContext()
Anropas av behållaren i samband med att bönan tas ur poolen och raderas ur minnet. Denna metod har samma funktion som "ejbRemove()" för en stateless session bean. I denna metod ska du frigöra eventuella resurser som bönan knutit upp.
9. ejbFindX()
Metoden Motsvaras av en "findX()"-metod i "Home"-gränssnittet som alltså anropas av klienten. En "ejbFindX()"-metod kör alltid en SELECT-sats mot databasen. Metoden returnerar en eller flera referenser till instanser av "EJBObject". Det existerar inga motsvarande instanser av entitetsbönor för de returnerade "EJBObject"-referenserna. Det är först när någon anropar en metod på referensen som en entitet läses upp ur databasen. Följande exempel förklarar hur det går till:
Märk att:
10. ejbHomeX()
Denna typ av metod kallas för "home business"-metod. Den motsvaras av en "X()"-metod (där X står för någon textsträng) i "Home"-gränssnittet. Denna metod ska innehålla funktionalitet som inte är knutet till någon speciell böna, och påminner mycket om "ejbFindX()"-metoden. "home business"-metoder finns till för att användaren ska kunna utföra operationer på databasen som till skillnad från "ejbFindX()"-metoder inte skapar och returnerar några "EJBObject". En "ejbHomeX()"-metod utnyttjar i typfallet en "ejbSelectX()"-metod för att göra en eller flera SELECT, men manipulerar sedan svaret innan det returneras till klienten.
11. ejbSelectX()
Motsvaras inte av någon metod i "Home"- eller komponentgränssnittet eftersom denna hjälpmetod bara kan anropas inifrån bönan. Precis som "ejbFindX()"-metoden används "ejbSelectX()" för att utföra en SELECT mot databasen. Följande metoder kan anropa "ejbSelectX()":
Märk att:
12. ejbActivate()
Anropas av behållaren innan instansen har aktiverats (se beskrivningen ovan). Här får programmeraren en möjlighet att initiera resurser som kan användas då instansen ligger i tillståndet METHOD READY.
13. ejbPassivate()
Anropas efter att behållaren passiverat instansen tillbaka till poolen. Här får programmeraren ett tillfälle att frigöra alla resurser som instansen har knutit upp i "ejbActivate()".
14. ejbCreateX(X x)
Denna metod anropas av behållaren innan entiteten skapas. Denna metod ansvarar för att alla parametrar (X) som klienten skickar med i sitt anrop "createX(X x)" faktiskt lagras i instansen. När du implementerar denna metod ska du vara medveten om att:
15. ejbPostCreateX()
Denna metod anropas av behållaren efter att entiteten har skapats.
16. ejbRemove()
Denna metod anropas av behållaren innan raden i databasen raderas. Här kan programmeraren göra vissa kontroller för att undersöka om det finns någon anledning att inte ta bort entiteten.
17. ejbLoad()
Anropas direkt efter att behållaren har laddat instansen med färskt data från databasen. Detta kan ske vid godtycklig tidpunkt av behållaren. Vi är garanterade att "ejbLoad()" anropas av behållaren efter att instansen aktiverats. Instansens persistenta fält har nu laddats med data och programmeraren har i denna metod möjlighet att göra eventuella kontroller av dessa fält.
18. ejbStore()
Anropas precis innan behållaren skriver instansen till databasen. Detta kan ske vid godtycklig tidpunkt av behållaren. Vi är garanterade att "ejbStore()" anropas innan behållaren passiverar instansen tillbaka till poolen. Här får programmeraren ett tillfälle att uppdatera bönans persistenta fält innan de skrivs till databasen.