# Bean in der init-Methode des Servlets instanzieren



## joe89 (17. Jul 2007)

Im Rahmen des mvc2 Modells wird vorgeschlagen,Berechnungen, Prüfungen o.Ä. in Beans auszulagern.

Für ein Loginverfahren möchte ich die Anmeldedaten in einer Bean prüfen. Zu Beginn einer Webapplikation gibt 
diese Bean natürlich noch nicht. 
Ist es ratsam, die Bean in der  init-Methode eines Servlets zu instanzieren ?

Wenn zwei oder mehr User sich gleichzeitig einloggen, werden die getter und setter Methoden der Bean nicht korrekt arbeiten. Reicht es aus, die getter und setter Methoden in Blocks zu setzen, um Kollisionen zu vermeiden ?

Gruss und Danke

joe89


----------



## SlaterB (17. Jul 2007)

definiere 'in Blocks setzen'?

wie wärs mit einem Bean pro User/ Request, also auch erst dann erstellen?


----------



## joe89 (17. Jul 2007)

> definiere 'in Blocks setzen'?



Ich hatte hatte ich an die Verwendung von "synchronized" gedacht.



> wie wärs mit einem Bean pro User/ Request, also auch erst dann erstellen?



Mein erster Ansatz sah vor für jeden user (bzw. jede neue Session) eine Bean zu erstellen. Ich bin dann aber davon abgekommen, weil mir die Verwaltung zu aufwändig erschien. Für jede neue Session müsste dann eine Bean mit einzigartigem Namen erstellt werden.

Aus diesem Grund dachte ich, dass es sinnvoller sei, nur eine einzige Bean zu haben, die alle Anfragen prüft.

Gruss

Joe89


----------



## WeirdAl (18. Jul 2007)

joe89 hat gesagt.:
			
		

> > definiere 'in Blocks setzen'?
> 
> 
> 
> ...



Synchronized bringt dir bei Beans in Verbindung mit Servlet nichts, da du bei X Zugriffen X Instanzen einer Bean erstellst und keine X Threads. Zudem verstehe ich nicht was du mit "...eine Bean mit einzigartigem Namen erstellt werden...".

Cu
Alex


----------



## SlaterB (18. Jul 2007)

da sich jeder nur um seinen Kram kümmert, ist der Verwaltungsaufwand 0,
vor allem fallen die Probleme wie synchronized weg, man spart so gesehen Verwaltungsaufwand


----------



## joe89 (18. Jul 2007)

Vielen Dank für alle Antworten.

Ich beschäftige mich gerade mit der Theorie von Webanwendungen.

In einer sehr kleinen Applikation unter tomcat versuche eine Anwendung für ein Loginverfahren 
zu erstellen,

Dabei möchte ich zwei Verfahren testen.

(a) in meine Login-Servlet lege ich für jeden user
 - sofern es sich um eine neue Session handelt - eine Bean an. Dabei handelt es sich
um die Instanzierung einer Klasse mit getter/setter Methoden, in der ich Informationen
über den user ablege. Diese Bean lege ich in den HttpSession Context.Damit habe ich für 
jeden user eine eigene Bean zu verwalten. 

In einer jsp-Seite greife ich auf diese Bean zu,um die Informationen über den user 
anzuzeigen. 

(b) ein alternatives Konzept sieht vor, nur eine einzige Bean vorrätig zu halten. In dieser
Bean prüfe ich, ob der user zulässige Eingaben gemacht hat. In Abhängigkeit von dem Ergebnisse
versende ich eine Error oder ok-Seite. Jetzt ist es natürlich so, dass zur gleichen Zeit
mehrere User sich einloggen un damit auch zur gleichne Zeit auf dieses bean zugreifen.
Aus diesem Grund emöchte ich die Methoden (sorry nicht blöcke) als "synchronized " deklararieren.

Gruss und Danke

joe89


----------



## SlaterB (18. Jul 2007)

bevor das falsch verstanden wird:
es gibt in in Java wie in Programmiersprachen allgemein Blöcke ( {} ),
und man kann durchaus auch diese Blöcke synchronisieren:
synchronized(monitor){}


----------



## WeirdAl (18. Jul 2007)

Hi,
Methode B könntest Du auch mit einer Queue realisieren.

Cu
Alex


----------



## joe89 (18. Jul 2007)

Vielen Dank für alle Vorschläge.

joe89


----------



## KSG9|sebastian (18. Jul 2007)

Ähm..ich glaub du solltest noch n bissl Theorie machen 

Für jede Session(=User) ein User-Objekt. In der Session speicherst du dann das Userobjekt. Im Servlet speichern wird dir nicht viel helfen


----------

