Zum Inhalt springen

Konzept Problem bei Webanwendung mit Struts


daniel_bln

Empfohlene Beiträge

Hallo liebe Leute,

ich brauche mal wieder einen guten Fachrat von euch.

Ich möchte eine Webanwendung bauen. Diese Webanwendung soll sich Daten aus der Datenbank holen und sie in der Session speichern. Alle Anwender sollen dabei auf diese Session zugreifen. Es soll sich dabei also nicht um eine UserSession handeln für nur einen Client, sondern um eine Session, die innerhalb der ganzen Anwendung gültig ist und auf die alle User zugreifen können.

Das ist aber noch nicht alles. User haben die Möglichkeit die Daten in der Session zu ändern. Wenn das geschieht, sollen alle Clients, die gerade daran arbeiten davon mitbekommen und es sollen die neuen Daten aus der Session geholt werden und auf der Oberfläche dargestellt werden.

Wie gehe ich da am besten vor??

Ich habe mich schon erkundigt und herausgefunden, dass man für sessions gewisse scopes setzen kann. Hierbei könnte ich dann den Application scope nehmen. Der wäre ja dann innerhalb der ganzen Anwendung gültig oder nicht?

lg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

also der Application Scope ist das, was Du haben willst. Daten, die in diesem Scope gespeichert werden, sind innerhalb der gesamten Anwendung sichtbar.

Änderungen an den Daten können aber aufgrund des HTTP Protokolls nicht an alle Clients ausgespielt werden, weil HTTP zustandslos ist und immer ein Request des Clients erfolgen muss. Deshalb kannst Du Änderungen an Daten im Application Scope immer erst beim nächsten Request eines Clients mit ausspielen.

Beispiel: Ein Anwender verwendet morgens um 8.00 Uhr die Anwendung und erhält die dann gültigen Daten. Dann macht er bis 16.00 Uhr nichts weiter damit. Um 12.00 Uhr ändert jemand die Daten im Application Scope. Dann werden diese geänderten Daten beim ersten Anwender erst um 16.00 Uhr angezeigt (wenn Du sie in der Anwendung auch ausspielst).

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Anwender verwendet morgens um 8.00 Uhr die Anwendung und erhält die dann gültigen Daten. Dann macht er bis 16.00 Uhr nichts weiter damit. Um 12.00 Uhr ändert jemand die Daten im Application Scope. Dann werden diese geänderten Daten beim ersten Anwender erst um 16.00 Uhr angezeigt (wenn Du sie in der Anwendung auch ausspielst).

Peter

Okay, danke für die Antwort. Aber es würde mir nicht reichen, dass der andere Client erst gegen 16 Uhr davon mitbekommen würde.

Ich glaube ich mache, dass einfach so, dass jeder Client sekündlich einen neuen Request startet, mit dem die Daten immer wieder auf neue geholt werden..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meinst Du, es ist wirklich nötig, jede Sekunde nach neuen Daten zu schauen?

Wie oft ändern sich denn diese Daten so im Durchschnitt und wie wichtig ist es für den Client, im selben Augenblick davon zu erfahren? Ich würde hier versuchen, den Mittelweg zwischen sofortigem Feedback und möglichst wenig (unnötiger) Last auf dem System zu finden.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meinst Du, es ist wirklich nötig, jede Sekunde nach neuen Daten zu schauen?

Wie oft ändern sich denn diese Daten so im Durchschnitt und wie wichtig ist es für den Client, im selben Augenblick davon zu erfahren? Ich würde hier versuchen, den Mittelweg zwischen sofortigem Feedback und möglichst wenig (unnötiger) Last auf dem System zu finden.

Peter

Hmm, wahrscheinlich hast du da Recht. Aber eigentlich ist es schon nötig, da es sich um eine Taxonomie handelt, die von allen Usern bearbeitet werden soll. Daher würden sich die Daten schon sehr oft ändern.

Es gibt wenn ich das richtig verstanden habe zwei Möglichkeiten wie ich da vorgehe:

Entweder ich mache es so, dass jedes mal wenn der Client irgendwas anfragt oder sogar postet gleichzeitig nachgeschaut wird, ob sich was geändert hat oder nicht. Wenn ja hole ich mir einfach nochmal die Daten vom Server.

Die andere ist die, dass ich in wenigen Sekunden Abständen Anfragen an den Server setze und nur wenn sich dann etwas ändert, hole ich mir nicht alle Daten vom Server, sondern nur die die sich geändert haben...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

also beide Deiner vorgeschlagenen Varianten sind sinnvoll und evtl. auch nötig.

Du solltest bei einer konkurrierenden Manipulation von Daten immer vor dem Speichern prüfen, ob evtl. ein Benutzer die zuvor von einem anderen Benutzer geänderten Daten überschreibt. Wie in einem solchen Fall zu verfahren ist, kommt auf den Anwendungsfall an. Das geht von "der erste hat gewonnen" über "wer zuletzt kommt, speichert erfolgreich" bis hin zu "lieber User, Du musst erst mal schauen, ob Du Deine Änderungen mit denen Deines Vorgängers unter einen Hut bringst". Diese Möglichkeiten abzubilden, ist in meinen Augen in einer Webanwendung nicht immer so leicht. Du musst hier prüfen, wer hat welchen Stand, hat sich nach diesem Stand etwas geändert und ist das für die jetzige Änderung überhaupt relevant.

Das dynamische Nachladen von nur geänderten Teilen ist ein Punkt, der insbesondere bei großen Datenmengen durchaus hilft, allerdings setzt eine beliebig hohe Anzahl pollender Clients, die keine Daten außer den Kommunikationsdaten hin- und herschieben, schon eine gewisse Systemlast frei.

Wäre evtl. ein Ansatz wie bei den gängigen Versionskontrollsystemen (z.B. SVN) möglich? Jeder ändert eine lokale Kopie, die beim Zurückspielen in das System auf Konflikte hin geprüft wird. Diese Konflikte werden über einen Merge bereinigt. Das klappt bei allen mit bekannten Softwareentwicklungsprojekten, das sollte auch in Deinem Fall funktionieren, wenn man die Benutzer entsprechend schult.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sag mal kingOfBrain kennst du dich auch mit SQL aus??

ich benutze gerade JDBC und würde gerne einen Datensatz in der DB löschen.

Ich würde aber gerne herausbekommen, ob das Löschen erfolgreich war oder nicht, sprich ob er nach executeUpdate tatsächlich einen Datensatz löschen konnte oder nicht.

Besteht die Möglichkeit das ich nach executeQuery irgendwie eine Rückmeldung bekommen kann, in der mit mitgeteilt wird, ob das Löschen erfolreich war oder nicht??

Weißte du das?

lg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die API Dokumentation (Java Platform SE 6) sagt zum Rückgabewert von executeUpdate:

either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing

Du erhältst also von der Methode die Anzahl der geänderten / gelöschten Datensätze.

Mein Hinweis mit SVN war übrigens nicht so zu verstehen, dass Ihr SVN einsetzen sollt, sondern überlegen könnt, ob es möglich ist, ein ähnliches Vorgehen wie bei SVN zu verwenden: jeder arbeitet auf seiner lokalen Kopie und checkt diese nach Fertigstellung wieder ein. Wie das technisch zu lösen ist, müsste man schauen, aber das dürfte in meinen Augen problemfreier funktionieren als eine konkurrierende Manipulation in der Hoffnung, dass jeder genau dann schreibt, wenn gerade kein anderer was tut.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...