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

Livscykeln för en tillståndslös sessionsböna

1. Livcykel
2. Hur skapas en instans?
3. ejbSetSessionContext()
4. ejbCreate()
5. ejbRemove()

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 tillståndslös sessionsböna har en ganska enkel livscykel som beskrivs enligt 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. METHOD READY IN TRANSACTION: Detta tillstånd innebär att instansen befinner sig mitt i ett metodanrop. För tillståndslösa sessionbönor måste transaktionen alltid avsluta i samband med att metoden kört klart. 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?

Trots att klienten kan anropa create() och remove() på "Home"-gränssnittet har detta inget att göra med när instansen faktiskt skapas i behållaren. Då servern startas skapar behållaren själv upp ett antal instanser av den tillståndslösa sessionsbönan och placerar dessa i en pool. Servern bestämmer 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 tillståndslös sessionsböna instansieras sker följande:

  1. newInstance() En ny instans skapas genom att newInstance() anropas på bönan.
  2. setSessionContext() anropas på den nya instansen.
  3. ejbCreate() anropas på den nya instansen.

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()

Behållaren har rätt att minska antalet instanser i poolen. 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 kraschar.