programmera.net -> ejb -> normal     för utskrift      info@programmera.net

Livscykeln för en sessionsböna med tillstånd

1. Livcykel
2. Hur skapas en instans?
3. ejbSetSessionContext()
4. ejbCreate()
5. ejbRemove()
6. ejbActivate()
7. ejbPassivate()
8. afterBegin()
9. beforeCompletion()
10. afterBegin()

1. Livcykel

På denna sida går vi igenom bö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 sessionsböna med tillstånd (Stateful SessionBean) har en livscykel som beskrivs i bilden nedan:



De olika tillstånden beskrivs nedan:

  1. DOES NOT EXIST: Detta tillstånd betyder att instansen inte existerar.
  2. METHOD READY: I detta tillstånd kan instansen ta emot anrop till affärsmetoder. Om behållaren anropar en affärsmetod så kan detta föra instansen till tillståndet METHOD READY IN TRANSACTION beroende på dina inställningar i "ejb-jar.xml". Om sessionsbönan är av typen CMT sköts detta automatiskt av behållaren.
  3. PASSIVE: Detta tillstånd innebär att behållaren har tagit instansen ur minnet och lagrat den på disk. Först när klienten anropar instansen på nytt kommer behållaren att aktivera instansen och åter läsa upp den i minnet. Om behållaren anser att en passiverad instans är för gammal har den rätt att radera instansen från disk.
  4. METHOD READY IN TRANSACTION: Detta tillstånd innebär att instansen befinner sig i en transaktion. För sessionbönor med tillstånd kan en transaktion spänna över flera metodanrop från klienten. Behållaren kan inte passivera en instans i detta tillstånd. Om metoden kastar ett "System Exception" kommer instansen att gå direkt till DOES NOT EXIST och således hoppa över "ejbRemove()" som normalt sett anropas innan instansen upphör att existera.

2. Hur skapas en instans?

Klienten skapar en instans genom att anropa "create()" på "Home"-gränssnittet. När en sessionsböna med tillstånd instansieras sker följande:

  1. En instans av EJBObject skapas.
  2. newInstance() En ny instans skapas genom att newInstance() anropas på bönan.
  3. setSessionContext() anropas på den nya instansen. Därmed länkas instansen av "EJBObject" till instansen av bönan.
  4. ejbCreate() anropas på den nya instansen.
  5. En stubbe av EJBObject skickas till klienten.

3. ejbSetSessionContext()

Anropas av behållaren i samband med att bönan initieras. I denna metod ska du se till att instansen lagrar SessionContext någonstans, vanligtvis i en medlemsvariabel:
public void setSessionContext(SessionContext ctx){
	// Save the context	
	this.context = ctx;
}	
Nu kan du komma åt alla metoder som exponeras i SessionContext via medlemmen "context".

4. ejbCreate()

Anropas av behållaren efter att bönan initieras.

5. ejbRemove()

För sessionsbönor med tillstånd är det klienten som ska anropa "remove()" på sin referens av "EJBObject" när han/hon är färdig med instansen. Anropet "remove()" tar tillbaka instansen till tillståndet DOES NOT EXIST. "ejbRemove()" anropas av behållaren precis innan instansen förstörs. I följande fall kan en instans förstöras utan att ejbRemove() kommer att anropas:

  1. Instansen kastar ett "System Exception", vilket resulterar i att instansen omedelbart tas bort ur poolen.
  2. Behållaren bestämmer sig för att kasta instansen då den är i ett passiverat tillstånd.
  3. Behållaren kraschar.

6. ejbActivate()

Anropas av behållaren efter att instansen har aktiverats (lästs in från disk).

7. ejbPassivate()

Anropas av behållaren innan instansen passiveras (sparas på disk). Här har programmeraren möjlighet att serialisera alla instansens parametrar och nollställa alla allokerade resurser. Till exempel ska man stänga alla databaskontakter i denna metod.

8. afterBegin()

Anropas av behållaren efter att en transaktion har påbörjats. OBS: Denna metod fungerar bara om din böna är CMT och du implementerar gränssnittet "SessionSynchronization".

9. beforeCompletion()

Anropas av behållaren innan en transaktion avslutas. OBS: Denna metod fungerar bara om din böna är CMT och du implementerar gränssnittet "SessionSynchronization".

10. afterBegin()

Anropas av behållaren efter att en transaktion har avslutats. OBS: Denna metod fungerar bara om din böna är CMT och du implementerar gränssnittet "SessionSynchronization".