# Mehrere User gleichzeigig, wie mach ich das?



## A.T. (4. Apr 2008)

Hallo zusammen,
verwende Tomcat 5.5 als Webserver und habe mit hilfe von JSF eine Website gebastellt. So jetzt möchte das sich mehrere User gleichzeitig einlogen können. Wie stelle ich das an? Im Moment habe ich das Problem das mein ModelController ein Singelton ist, wenn sich jetzt aber der zeite Benutzer anmeldet wird die Information des ersten überschrieben bzw. der zweite nicht gesetzt. Habe keine Idee wie ich das umsetzten soll.
Ein paar Tips was ich dazu lesen sollte oder wonach ich am besten suche wären sehr hilfreich.

Vielen Dank schon mal!

Gruß
A.T.


----------



## Tobias (4. Apr 2008)

Such mal nach HTTPSession und SessionScope.

mpG
Tobias


----------



## maki (4. Apr 2008)

Tobias hat gesagt.:
			
		

> Such mal nach HTTPSession und SessionScope.


Ob das reicht die Multithreding Probleme die er garantiert haben wird in den Griff zu bekommen?

Am besten würde ich ein gutes Buch empfehlen, aber da er nicht sagt was er schon weiss/kann ist das nicht möglich.

Warum ein Singleton wenn es doch JAAS gibt und von TC unterstützt wird?


----------



## Gast (6. Apr 2008)

Danke für eure Antworten.

Ein gutes Buch wäre wirklich nicht schlecht!
Was ich weiß? Mhhh. Schwer zu breschreiben. Sagen wir es mal so, für einen benutzer bekomme ich das alles ganz gut hin. Läuft auch einwandfrei, allerdings hört es dann bei mehr als einem benutzer auch schon auf...
Den Singelton habe ich verwendet da ich für jeden Benutzer eine Liste halten will/muss und noch einige Daten zum benutzer braucht. Außerdem wollte ich nur einmal pro User eine Datenbankverbindung aufbauen da ich verhältnismässig oft etwas schreiben bzw. lesen muss.
Weiß nicht ob das gut genug beschreibt was ich weiß...

Gruß
A.T.


----------



## A.T. (6. Apr 2008)

Das war von mir. War wohl nicht eingelockt.

Gruß
A.T.


----------



## maki (6. Apr 2008)

Würde ein Grundlagenbuch über Servlets und JSP empfehlen 

Eine Datenbankverbindungen per Benutzer ist sehr schlecht, lieber eine DAO Schicht einführen.

Solltest das Singleton Pattern nicht benutzen, da dir der Sinn dessen anscheinend noch nicht geläufig ist 

Ansonsten ist Tobias vorschlag mit dem Session Scope goldrichtig, denke aber das dir das nichts nützen wird, da die anderen Grundlagen fehlen.

Nebenbei, Webanwendungen mit Java sind sehr komplex, Java über JEE zu erlernen ist schwer.


----------



## A.T. (7. Apr 2008)

@maki Kannst du ein spezieles Buch nenen? Die gibts ja wie Sand am Meer... Bei den Grund lagen zum Thema JEE habe ich tatsächlich Defizite. Das bestreite ich ja nicht mal. Deshalb meine zum Teil etwas blöde Fragen...
Im Moment ist eine quick and durty implementierung das Ziel will ich nicht sagen aber doch gerlaubt. Deshalb der einfache zugriff auf die Datenbank durch jeden Benutzer. Wenn es anders einfach und schnell geht habe ich da auch nichts gegen.
Wie gesagt habe ich den ModelController als Singelton implementiert und halte das auch für legetim. Da ich pro User nur einen davon haben will und so verhältnismässig einfach an meine Daten komme. Ob das schön ist weiß ich nicht, lasse mich aber auf jeden fall eines besseren belehren...
Und was Java angeht behaupte ich einfach mal das ich da ganz Fit bin, nur was Webanwendungen und zusätlich noch Mehrbenutzerbetrieb angeht sieht es ehr sehr schlecht aus... 
Also bin weiterhin für jeden Tip dankbar!


----------



## maki (7. Apr 2008)

Defizite sind normal, deswegen lernt man ja.

Singleton = Eine einzige Instanz einer Klasse.
Du aber willst eine Instanz pro User, merkst du den Unterschied?

Früher fand ich die O'Reilly Bücher ganz gut, k.A. ehrlich gesagt was jetzt gut ist, SUn Press hat auch einige Bücher zu diesem Thema.

JAAS ist auf jedenfall einen Blick wert, löst viele deiner Probleme sehr elegant.

Es gibt für Webanwendungen viele verschiedene MVC Frameworks, wirst früher oder später nicht daran vorbeikommen.
Etwas älter ist struts, aber sehr verbreitet.

Bevor du dich in Richtung JSF bewegst solltest du aber wirklich fit in Servlets und JSPs sein imho.


----------



## A.T. (8. Apr 2008)

Ja klar merke ich den Unterschied. Habe da wohl einen Fehler gemacht. Habe gedacht es würde eine Instanz pro User geben und nicht nur eine insgesamt. Fragt sich wie man eine Instanz pro User hinbekommt?

Gut dann werde ich mir wohl mal Bücher besorgen müssen...

Meinen Fehler habe ich jetzt erst mal beseitigt. Ich schreibe meine Daten wie folgt 
	
	
	
	





```
((HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest()).getSession()).setAttribute("testDaten", testObjekt);
```
So bekomme ich jeden falls jeweils die Daten eines bestimmten benutzers.

Nur weiß ich noch nicht so genau wie das alles aufbauen soll...

Gruß
A.T.


----------



## maki (9. Apr 2008)

Mach doch eine ManagedBean mit Session Scope draus, dann sparst du dir einiges an Aufwand und nutzt gleichzeitig einen Vorteil von JSF


----------



## A.T. (9. Apr 2008)

Vermutlich sollte mir jetzt ein Licht aufgehen...  

```
<managed-bean>
    <managed-bean-name>testBean</managed-bean-name>
    <managed-bean-class>de.testProjekt.Beans.testBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
```

Dann müsste ich aber doch auch mittels

```
FacesContext ctx = FacesContext.getCurrentInstance(); 
HttpSession session = (HttpSession)ctx.getExternalContext().getSession(true); 
ModelBean modelBean = (ModelBean)session.getAttribute("modelBean");
```
Auf die Daten zugreifen oder? Sieht irgendwie genauso kompliziert aus...


----------



## maki (9. Apr 2008)

Wir nutzen JSF 1.1 mit einem selbstgestrickten Framework, welche unter anderen eine utility Klasse mit einer statischen Methode enthält:

```
public static Object getSessionScopeBean(String name) {
		ExternalContext ctx = FacesContext.getCurrentInstance()
				.getExternalContext();
		
			Object object = ctx.getSessionMap().get(name);	
			if (object != null)
				return object;			
			throw new RuntimeException("No bean found: "+name);
		
	}
```
Diese Methode kann dan bequem von anderen ManagedBeans benutzt werden.

Geht übrigens auch für AcplicationScope, RequestScope, etc. mit kleineren Änderungen


----------



## A.T. (10. Apr 2008)

Danke! Das ist eine gute Idee! Ich habe das jetzt bei mir auch umgesetzt. Einen weiteren dummen Fehler von mir gefunden und jetzt klappt es erst mal gut.

Vielen Dank für die Hilfe!

Gruß
A.T.


----------



## ARadauer (10. Apr 2008)

> Kannst du ein spezieles Buch nenen?


ich finde das gibt einen guten Überblick
http://www.amazon.de/Java-Master-Cl...bs_sr_1?ie=UTF8&s=books&qid=1207818141&sr=8-1


----------



## A.T. (10. Apr 2008)

Das vorgänger Buch J2EE habe ich hier auf dem Schreibtisch liegen. Sollte es vielleicht wirklich mal lesen...


----------

