Benachrichtigungs-System Webapp Java Servlet

FabianLurz

Bekanntes Mitglied
Hallo Leute,
wir entwickeln gerade eine Anwendung, die über PHP (HTTP-Requests) ein Servlet aufruft. Das Servlet nimmt dann die Daten aus der DB und gibt sie an PHP (in diesem Fall sind es meist AJAX-Requests) weiter. Das Ganze funktioniert soweit sehr performant und reibungslos.
Nun möchte ich jedoch ein Benachrichtigungs-System für Nutzer entwickeln. D.h. ein Nutzer schreibt einen Kommentar -> Notification
Ein Nutzer gibt einen Like ab -> Notification
Natürlich soll es nur Nachrichten geben, wenn andere Nutzer etwas erweitert haben (bspw. auf den Kommentar des Nutzers antworten). Im Prinzip also wie facebook oder google+.
Gedanken habe ich mir natürlich auch schon gemacht, bin jedoch damit so nicht ganz zufrieden:
Meine Idee
Sobald der Nutzer die Seite betritt, gibt es einen Request zum Servlet. In der Datenbank gibt es dann eine Notificationtabelle aus der sich das Servlet die Daten nimmt. Die tabelle könnte aufgebaut sein mit nachrichten_id, typ_id,accepted (true/false).
So der grobe Gedankengang. Finde das aber sehr "undynamisch". Evtl. habt ihr ein paar Tipps/Stichwörter/Links für mich:)
Gruß Fabian
 

freez

Top Contributor

Was verstehst du darunter?

Ich würde entweder in der Tabelle, aufgrund der die nachrichten verschickt werden ein Feld extra spendieren und dort hinterlegen, ob sie bereits versendet wurden. Alternativ, wie du es angesprochen hast stellt dein Servlet in eine extra Nachrichtentabelle eine neue "Nachricht" rein. Ein separater Prozess kann dann über die zu sendenden Datensätze iterieren und die Benachrichtigungen verschicken (du meinst schon mails, sms oä.?)
 

FabianLurz

Bekanntes Mitglied
Oh achso nein. Sry dachte wenn ich facebook und google+ schreibe ist klar was gemeint ist :) Also nicht per Mail, sondern ein internes Benachrichtigungs-System.
Siehe hier: http://img.hazelco.de/Facebook-20110703-132656.jpg
Ein Mailverteilungssystem wird es später auch noch geben. Aber das reicht erst mal :)
Mit undynamisch meine ich, dass ich meine Lösung für nicht optimal halte und es gerne besser hätte.
Gruß Fabian
 

Templarthelast

Bekanntes Mitglied
Das Zauberwort könnte JMS heißen. Die 2.0 des Java Message Service kommt bald auch in Verbindung Java EE 7 raus. JMS ermöglicht die asynchrone Nachrichtenversendung inerhalb deiner Anwendung.
Mal ein Beispiel: User loggt sicht ein -> Message wird losgeschickt -> Jeder Client empfängt die Nachricht und kann diese dann auswerten.
 

freez

Top Contributor
Du suchst also einen Algorithmus / eine Methode, der dir für jeden User die Benachrichtigungen zusammenstellt?

An der stelle würde ich wohl schon wie du angedeutet hast eine Tabelle erstellen, die die Notifications beinhalten ... und zwar für jeden User extra. Alte Notifications könntest du evtl löschen, falls es zu viele Daten sind. Du musst eigentlich nur sicherstellen, dass nur neue Notifications eingesetzt werden. Als Trigger könntest du dafür ja dein Servlet Request nehmen, der dann einfach die Nachrichten pro User erstellt.

Falls du den request nicht damit belasten willst, bräuchtest du einen Job der neue Kommentare durchgeht und die Benachrichtigungen setzt.

In der GUI musst du dann nur noch die Daten aus der Tabelle laden.
 

Templarthelast

Bekanntes Mitglied
PHP => Servlet und JMS? Oder meinst du, dass die einzelnen Browser miteinander reden? Ich habe noch nichts mit JMS gemacht, aber ein bißchen was gelesen darüber: verstehe grad nicht, wie du es in diesem Fall einsetzen würdest.

Mann kann auch mit PHP auf JMS zugreifen. Damit könnte man die events mit php abfangen und dann per ajax an den client weitergeben.
 

FabianLurz

Bekanntes Mitglied
Ok also gibt es wohl keine andere Lösung als über eine extra Tabelle; ist aber im Endeffekt auch klar...ohne Tabelle ist das zu viel Ressourcenvebrauch. JMS werde ich mir auch nochmal ansehen.
Wenn ihr weitere Tipps habt würde ich mich freuen :)
Falls einer konkret weiß wie das facebook regelt, wäre das auch echt cool. Wird aber wahrscheinlich eben über eine Notificationtable gelöst sein.
Gruß Fabian :)
 

freez

Top Contributor
Naja, du könntest dir auch einfach den letzte Notificationzeitpunkt pro User merken und dann nur die neueren Infos für jeden Freund anzeigen. Hat aber den Nachteil, dass du dir schlecht den Status der Benachrichtigungen merken kannst, vor allem, wenn es darum geht eine Benachrichtigung zu entfernen, weil der User sie bereits gelesen hat.
 

FabianLurz

Bekanntes Mitglied
So also falls es euch nochmal interessiert....habe mir nochmal Gedanken dazu gemacht. Die einfachste Lösung wird folgende sein:
Das ganze System ist Eventbasiert. D.h. schreibt ein Nutzer einen Kommentar, wird überprüft, wen das interessieren könnte und landet entsprechend in der Notificationtabelle. Per Request wird dann alle 2-5 Minuten abgefragt, ob was neues in dieser Tabelle ist. Alle Events werden mit einem Timestamp versehen, so dass der Nutzer nicht mit Dingen von vor 10 Jahren belästigt wird. So erzeugt man insgesamt wenig Overhead und kann alles schön steuern :)
Gruß Fabian
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Lottospielen mit System, Versuch 2, noch umständlicher als vorher Allgemeine Java-Themen 1
J Frage zu System.getproperties. Allgemeine Java-Themen 60
sascha-sphw Erste Schritte Unit und Integration-Tests im Java Modul System Allgemeine Java-Themen 10
F Frage zu System.in Allgemeine Java-Themen 3
E System property setzten Allgemeine Java-Themen 8
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
O Beziehung System.exit(x) <>Errorlevel Allgemeine Java-Themen 2
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
F System Tray Menubutton ActionListener Allgemeine Java-Themen 5
H Im Tiled-Map-System ein Item anklicken Allgemeine Java-Themen 0
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Login System Allgemeine Java-Themen 19
A BufferedReader ohne System.in Allgemeine Java-Themen 9
VfL_Freak JDK installieren System-Property "user.dir" Allgemeine Java-Themen 6
J System.arraycopy ergibt anderes Resultat als for-loop Allgemeine Java-Themen 4
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
D Java System.out::println Allgemeine Java-Themen 1
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
S Ist Java ein geschlossenes System? Allgemeine Java-Themen 2
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Neumi5694 System.out und System.err umleiten - NICHT im Quelltext Allgemeine Java-Themen 4
X System.out/err(Die Console) in JTextArea ausgeben Allgemeine Java-Themen 2
S Best Practice System.arrayCopy verändert Ziel-Array Allgemeine Java-Themen 2
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
A Java | Login-System Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
M collection persistence system Allgemeine Java-Themen 4
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
D System.out's in String speichern. Allgemeine Java-Themen 2
H Interpreter-Fehler ArrayIndexOutOfBoundsException bei System.arraycopy() Allgemeine Java-Themen 3
M System herausfinden Allgemeine Java-Themen 6
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
R Methoden Tag System Problem Allgemeine Java-Themen 3
J System.out im GUI anzeigen Allgemeine Java-Themen 3
N System.exit(0/1) Allgemeine Java-Themen 3
F System.out.println mit log4j ersetzen Allgemeine Java-Themen 10
D System.LoadLibrary(..) - Programm stürzt ab Allgemeine Java-Themen 2
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
Kr0e User management system Allgemeine Java-Themen 2
S Java Programm -System Neustart überleben? Allgemeine Java-Themen 3
Rudolf Wann System.exit und wann dispose? Allgemeine Java-Themen 9
ruutaiokwu System.out auf files umlenken in log4j.xml Allgemeine Java-Themen 4
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
agent47 Plugin System Verständnisfrage Allgemeine Java-Themen 6
M Wie externe System-Ressourcen zwangsweise freigeben Allgemeine Java-Themen 2
E Durch System.in.read() blockierten Thread stoppen Allgemeine Java-Themen 10
P System.out im Eclipse plugin Allgemeine Java-Themen 4
C File System Watcher Allgemeine Java-Themen 2
S Verhalten von System.getenv() in Ubuntu / Linux Allgemeine Java-Themen 12
A Problem mit System.getProperty(...) Allgemeine Java-Themen 5
D System.loadlibrary funktioniert nicht Allgemeine Java-Themen 6
H Event ähnliches System Allgemeine Java-Themen 20
Dissi Gammawerte des Grafiktreibers / System ändern? Allgemeine Java-Themen 3
M Plugin-System Allgemeine Java-Themen 4
A NullPointer bei System.getProperty("file.seperator") Allgemeine Java-Themen 4
R System.out oder System.err? Allgemeine Java-Themen 10
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
K System.exec() Programm mit mehreren Parametern Allgemeine Java-Themen 8
G unerklärliches System.out Allgemeine Java-Themen 3
M System.setProperty("javax.net.ssl.trustStore", "mykey.pkx"); Allgemeine Java-Themen 1
T System Preferences + LInux (Ubuntu) Allgemeine Java-Themen 8
G OutputStream to System.out Allgemeine Java-Themen 35
J Wo werden die System properties gespeichert Allgemeine Java-Themen 12
C JSR295 in Produktiven System zu empfehlen? Allgemeine Java-Themen 3
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
T Feststellen ob System-Konsole verfügbar Allgemeine Java-Themen 2
L remote debugging of a multi threaded system Allgemeine Java-Themen 2
F Probleme mit eigenem Plugin-System Allgemeine Java-Themen 3
L System.exit Allgemeine Java-Themen 3
G System.out und String machen was anderes Allgemeine Java-Themen 5
G System.out im window h.inein bringen? Allgemeine Java-Themen 8
A System.in pipen Allgemeine Java-Themen 3
P System.getProperty zu Classloader Allgemeine Java-Themen 21
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
E System.out umleiten Allgemeine Java-Themen 2
S system.out und system.err einer Methode in Datei schreiben. Allgemeine Java-Themen 7
S System Informationen auslesen. Allgemeine Java-Themen 3
N Thread und System.out.print() Allgemeine Java-Themen 2
K Kann man System.out in eine Datei speichern? ähnlich wie log Allgemeine Java-Themen 7
B Native DLL zweimal laden: System.load(sPath); Allgemeine Java-Themen 5
P System.getProperty("user.dir") Allgemeine Java-Themen 10
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
N Plugin-System: Klassen über String laden Allgemeine Java-Themen 3
O System.nanoTime() einheitlichen Wert auf mehreren Rechnern? Allgemeine Java-Themen 9
T System-Monitoring in Echtzeit Allgemeine Java-Themen 2
E System.out.println Allgemeine Java-Themen 5
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3
G System.out.println(is.getClass().getName()); Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben