Hallo.
ich bin grad dabei eine kleine Portalseite zu erstellen.
Es gibt einen normalen Nutzer der sich nciht einloggen muss. Der kann ein Lokal auswählen über das er sich informieren möchte. Da sich das auf mehrere Seiten verteilt nehme ich ein @SessionScoped bean und halte dieses "aktuelleLokal" vor.
Es gibt darüber hinaus einen "Lokalbesitzer" der natürlich in seiner session ein normaler nutzer ist also auch ein lokal auswählen kann und sich darüberhinaus anmelden / einloggen kann um sein eigenes lokal zu verwalen. Dafür nutze ich ein zweites @SessionScoped bean welches für verwaltungsaufgaben veranwortlich ist. Hier speichere ich das "eigeneLokal".
Das eigeneLokal kann geändert werden (Name anschrift usw). das mache ich im @Stateless DataService mit em.merge(eigeneLokal);. Jetzt weiß zwar der SessionScope des Lokalbesitzers dass der laden anders heißt, weil es ja hier rüber geändert wurde (z.B: über Formeingaben), aber die normale Nutzer SessionScope bekommt das nicht mit.
Jetzt habe ich folgende Lösungsansätze:
1) beim abruf des lokals in der Nutzersession immer wieder das Objekt an hand der Id neu aus der DB holen.
2) im @SessionScoped des Lokalbesitzers den Nutzer SessionScoped injizieren und ggf. (im Falle die stimmten vorher überein) die variable "aktuelleLokal" = "eigeneLokal" (das zuvor geändert wurde)
So nun nochmal zum Verstäändnis zusammengefasst. ich habe 2 x @SessionScoped und 2x @Stateless für Datenservices mit jeweils anderen Verantwortlichenkeiten bzw. "Berechtigungen".
Nun die Frage:
Sollte das 1. @SessionScoped beim abgefragt werden der Variable "aktuelleLokal" nicht schon gemerkt haben dass dieses Entity sich geändert hat? Ist das nicht einer der vorteile dieser managed Entity Sache? die beiden Variablen "aktuelleLokal" und "eigeneLokal" sollten doch nur auf ein Entity zeigen das in einem PersistenceContext liegt oder? und bei em.merge soltle sich diese Objekt updaten und auch für beide referenzen zur verfügung stehen!?
Entschuldigt bitte meine Unfähigkeit mich Fachkundig auszudrücken.
ich bin grad dabei eine kleine Portalseite zu erstellen.
Es gibt einen normalen Nutzer der sich nciht einloggen muss. Der kann ein Lokal auswählen über das er sich informieren möchte. Da sich das auf mehrere Seiten verteilt nehme ich ein @SessionScoped bean und halte dieses "aktuelleLokal" vor.
Es gibt darüber hinaus einen "Lokalbesitzer" der natürlich in seiner session ein normaler nutzer ist also auch ein lokal auswählen kann und sich darüberhinaus anmelden / einloggen kann um sein eigenes lokal zu verwalen. Dafür nutze ich ein zweites @SessionScoped bean welches für verwaltungsaufgaben veranwortlich ist. Hier speichere ich das "eigeneLokal".
Das eigeneLokal kann geändert werden (Name anschrift usw). das mache ich im @Stateless DataService mit em.merge(eigeneLokal);. Jetzt weiß zwar der SessionScope des Lokalbesitzers dass der laden anders heißt, weil es ja hier rüber geändert wurde (z.B: über Formeingaben), aber die normale Nutzer SessionScope bekommt das nicht mit.
Jetzt habe ich folgende Lösungsansätze:
1) beim abruf des lokals in der Nutzersession immer wieder das Objekt an hand der Id neu aus der DB holen.
2) im @SessionScoped des Lokalbesitzers den Nutzer SessionScoped injizieren und ggf. (im Falle die stimmten vorher überein) die variable "aktuelleLokal" = "eigeneLokal" (das zuvor geändert wurde)
So nun nochmal zum Verstäändnis zusammengefasst. ich habe 2 x @SessionScoped und 2x @Stateless für Datenservices mit jeweils anderen Verantwortlichenkeiten bzw. "Berechtigungen".
Nun die Frage:
Sollte das 1. @SessionScoped beim abgefragt werden der Variable "aktuelleLokal" nicht schon gemerkt haben dass dieses Entity sich geändert hat? Ist das nicht einer der vorteile dieser managed Entity Sache? die beiden Variablen "aktuelleLokal" und "eigeneLokal" sollten doch nur auf ein Entity zeigen das in einem PersistenceContext liegt oder? und bei em.merge soltle sich diese Objekt updaten und auch für beide referenzen zur verfügung stehen!?
Entschuldigt bitte meine Unfähigkeit mich Fachkundig auszudrücken.