jBoss automatische Synchronisation?

Dieses Thema jBoss automatische Synchronisation? im Forum "Application Tier" wurde erstellt von Gaestling, 17. Apr. 2012.

Thema: jBoss automatische Synchronisation? Hallo wir sollen demnächst ein EJB-Projekt im jBoss 4 oder 5 erstellen. Mich interessiert die Synchronistion von...

  1. Gaestling
    Gaestling Guest
    Hallo

    wir sollen demnächst ein EJB-Projekt im jBoss 4 oder 5 erstellen. Mich interessiert die Synchronistion von den Methoden, die in einer EJB aufgerufen werden. Also z.B. eine EJB mit einer Methode, die weitere Klassen anderer Methoden benutzt.
    Müssen die Klassen, die in der EJB-Methode benutzt werden sich um thread-safety usw. selber kümmern, oder macht das der Container? Ist es gut oder Pflicht, in solchen Klassen java concurrency zu benutzen?
    In einer EJB darf ich nicht synchronisieren, wie sieht es in den darunterliegenden Klassen aus?

    Danke und mit freundlichen Grüßen
    Gaestling
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. reNur
    reNur Guest
    Falls wir hier über den JBoss Application Server nehmen:
    Tu dir selbst einen gefallen und verwende die aktuellste Version - 7.1.x.
    Alles andere ist quatsch und du quälst dich nur rum.

    So, zum Thema:
    Der Container kümmert sich per default nicht um Threadsicherheit. Ich weiss nicht genau was du machen willst (schreib am besten mal ein paar Zeilen als Beispiel), reden wir hier über Stateless/Stateful Bean?

    Wie auch immer, du musst bedenken dass es mehrere Instanzen eines EJBs gibt, die vom Container verwaltet werden. Eine Möglichkeit, Threadsicherheit zu gewährleisten ist z.B. der Einsatz eines Singleton-EJBs (gibt es seit 1.3). Dort kannst du auch über Annotationen das java-concurrent API benutzen und so den Zugriff auf die Methoden steuern.
     
  4. FArt
    FArt Neues Mitglied
    Threadsicherheit ist in der Regel kein Thema. Singletons solltest du nur verwenden, wenn du sie wirklich benötigst.

    SLSB: Jeder Call hat seine eigene Instanz und es kann somit nicht zu konkurrierenden Zugriffen kommen.
    SFSB: Jedes SFSB ist einem Client (die Rolle Client) zugeordnet. Konkurrierende Zugriffe auf ein SFSB sind per Spec verboten, wenn auch oft technisch möglich.

    Statische Methoden usw. (Singletons) sind natürlich ungünstig, können aber vorkommen, sollten es aber nicht). Lesende statische Zugriffe sind uninteressant, schreibende sollte man vermeiden, zumal vom Classloading abhängt, welche Intanz der statischen Referenz ("Singleton") man erhält.
     
  5. reNur
    reNur Guest
    Ja, aber wenn er schon explizit nach Synchronisierung fragt, muss es ja irgend einen Grund dafür geben :)
    Wenn ich nur threadsichere Methoden habe, dann muss ich ja gar nicht anfangen, darüber nachzudenken, ob das nun in einer EJB-Umgebung anders sein sollte.
     
  6. FArt
    FArt Neues Mitglied
    Wenn es aber aus Sicht der Spec keinen Grund gibt, dann sollte man die Ausgangssituation näher beleuchten und die Anforderung hinterfragen.

    Es ist ein Irrglaube, dass beliebiger Java-Code auch einfach so in einem Applicationserver läuft. Eine API z.B., die synchronisiert, kann man natürlich verwenden. Aber die Synchronisation ist dann überflüssig und kostet nur Ressourcen.
     
  7. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)