Asynchrone Services mit Message Driven Beans?

Dieses Thema Asynchrone Services mit Message Driven Beans? im Forum "Application Tier" wurde erstellt von Nutritious, 17. Aug. 2012.

Thema: Asynchrone Services mit Message Driven Beans? Hallo zusammen! Ich habe ein paar Funktionaliutäten für ein Mehrbenutzer-webapp im Sinn, für die ich gerne MDBs...

  1. Hallo zusammen!

    Ich habe ein paar Funktionaliutäten für ein Mehrbenutzer-webapp im Sinn, für die ich gerne MDBs einsetzen würde, bin mir aber nicht sicher, ob es der beste Weg wäre.

    Ein Beispiel für einen solchen Dienst wäre folgendes:

    User verbreiten an unterschiedlichsten Stellen im Netzwerk Informationen, zum Beispiel Kommentare unter irgendwelchen Beiträgen.
    Wenn ein Account entfernt wird, sollen auch alle mit ihm assoziierten Beiträge verschwinden. Das könnten natürlich mehrere tausend sein. Diese Beiträge wären überall verteilt, es gäbe keine zentrale Informationsquelle über genaue Anzahl und "Aufenthaltsort".

    Anstatt nun permanent im Hintergrund nach Beiträgen gelöschter Accounts zu suchen, wollte ich das Löschen "lazy" implementieren.

    Hierzu gehe ich davon aus, dass jeder Account eine eindeutige Id hat und diese an jeden Beitrag, den er verfasst, vererbt.

    Jetzt kann man sich folgendes Szenario vorstellen: User X ruft seite Z auf. Hier befinden sich zahlreiche Beiträge unterschiedlicher User. U.a. auch der von User K, dessen Account nicht mehr existiert. Bei der Darstellung des Beitrages wird festgestellt, dass K's Id nicht mehr existiert. Erst jetzt wird der Beitrag aus der DB gelöscht. Es musste also nicht aktiv gesucht werden.

    Ich hatte mir das Löschen jetzt so vorgestellt:

    Feststellung: Beitragsverfasser xyz existiert nicht in DB.
    Überspringe Beitrag bei Darstellung.
    Erzeuge Message mit Löschauftrag für JMS-Warteschlange.
    Darstellung der Seite abshließen.

    Ich möchte an der Stelle den Auftrag nur lostreten und nicht auf eine Bestätigung warten, da der aufrufende Part der Anwendung sich in dem Moment ja gar nicht dafür interessiert.

    Ich hoffe, man kann das nachvollziehen.
    Eignen sich MDBs für so etwas oder würde man das auf andere Weise besser erledigen können?
     
  2. Vielleicht hilft dir das Java-Tutorial weiter. Hier klicken --> (Klick)
  3. Wenn du eine Aktion asynchron auftrennen möchtest, kann man natürlich JMS verwenden. Mittlerweile könnte man aber u.U. auch asynchrone EJBs in Betracht ziehen.

    Ich würde empfehlen, nicht benötigte Daten grundsätzlich zu löschen (wenn sie schon gelöscht werden sollen und nicht nur inaktiv gesetzt werden sollen).
    Ich sehe keinen Vorteil darin, mit dem Löschen zu warten, bis ein Beitrag angezeigt werden soll. Trotzdem kannst du natürlich das Löschen asynchron erledigen lassen, z.B. durch eine Message getriggert.

    Ich kann mit einigen Beschreibungen nichts anfangen: "an unterschiedlichen Stellen im Netzwerk" und "Aufentaltsort".

    Die Beiträge stehen in einer DB? Wenn nein, wieso nicht? Dann kann ich leicht alle Beiträge eines Verfassers finden. Wird ein Account gelöscht, wird es erst mal inaktiv gesetzt und ein Auftrag für Löschungen losgeschickt.
    Beiträge von deaktivierten Konten werden grundsätzlich nicht angezeigt, somit können diese auch später gelöscht werden.

    Hier wäre JMS sogar sinnvoll, weil das Löschen asynchron geschehen kann. Trotzdem kannst du sicher sein, dass es passiert: die deaktivierung des Kontos und der Löschauftrag (JMS Message) laufen z.B. in einer Transaktion ab. Die Message könnte persistent sein. Schon werden auch sicher alle Daten gelöscht.
     
  4. Bei der Vorrausetzung, dass du Hibernate für die Datenbank benutzt, kannst du die Verbindung zwischen den entitys automatisch mit ändern(Stichwort cascadian). Dann ruft nur bei deiner Seite nur noch auf:
    Code (Text):
    SELCT Kommentar k FROM Kommentar where k.benutzer.existiert = true
    Du willst die Benutzer auch nicht löschen, da du als Betreiber einer solchen Plattform alle relevanten Daten wie email adresse + realer Name für den Fall einer Straftat wie z.B. Kinderpornographie auf einer Seite noch vorhanden haben musst.
     
  5. Generelles Löschen von Kommentaren sehe ich als schlecht an, dadurch könnte eine komplette "Geschichte" gelöscht werden und andere Postings sind unverständlich, ich würde diese Postings dem User Anonym zuordnen (also den Owner ändern) und fertig. Wo gelöscht wird sinn macht, ohne anderen Sinn zu zerstören weiß ich natürlich nicht bei dir ;-) Das musst du schön selber entscheiden
     
  6. Bei einer manytoone verknüpfung bleibt der Autorname immer noch bestehen, da muss man diesen noch nicht mal ändern, sondern einfach keinen Link beim Namen angeben und hinter den Namen "(gelöscht)" setzen.
     
  7. Vorrausgesetzt, man merkt sich nur den Namen, und nicht das Objekt, weil bei Objektlöschung ist da auhc kein Name mehr, und mal ganz angesehen von der Kaskadierung
     
  8. Schau dir jetzt hier den Kurs an und lernen Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)