Performance-Kosten für eine Transaktion über mehrere EJBs gegenüber einem EJB

8

Ich habe eine Frage zu Transaktionsleistung und / oder Kosten in folgenden Szenarien.

Umgebung: JBoss 7.1.1 / Oracle 11G / Java 6

Szenario A - 1 EJB:

Ich habe ein EJB erstellt, das einen Datensatz in einer Datenbank mit CMP (Transaktion REQUIRES_NEW) speichert:

%Vor%

Dieser EJB wird von einem externen EJB-Client (ohne JTA trx) aufgerufen und funktioniert gut (1000 Einsätze / Sek.). JBoss dokumentiert auch die genaue Anzahl der Transaktionen in der JPA-Messung.

Szenario B - 2 EJBS:

Ich habe die Anwendung geändert und einen weiteren EJB hinzugefügt, der den EJB aus Szenario A aufruft, obwohl ich hier eine "gemeinsame" Transaktion haben möchte, die vom neuen EJB geöffnet wird. Also habe ich das bestehende EJB wie folgt geändert (Transaktion ERFORDERLICH):

%Vor%

Im neuen EJB starte ich dann die neu benötigte Transaktion und rufe das (lokale) EJB:

auf %Vor%

Nun, wieder funktioniert alles wie erwartet (gleiche Anzahl von Transaktionen usw.), obwohl die Performance dramatisch von 1000 auf 200 Einfügungen pro Sekunde gesunken ist, was sehr stört, da die Transaktionsabwicklung zwischen diesen beiden EJBs etwa 4 mal kostet einfügen :(

Weitere Informationen:

  • Keine anderen EJBs oder Methoden verwenden diese Transaktion.
  • Lokale Schnittstellen
  • Lokaler DS

Fragen:

  • Ist es wirklich so teuer, eine Transaktion in einem EJB geöffnet und in einem anderen verwendet zu haben? (Da es immer noch eine Transaktion und eine Einfügung wie im ersten Beispiel gibt).
  • Wenn ein "Dispatcher" mehrere andere EJBs in einer Transaktion aufruft, werden die Kosten für die Transaktionsverarbeitung einmal pro Transaktion oder einmal pro EJB-Aufruf fällig?!

Wenn mehr Informationen benötigt werden, posten wir gerne mehr.

Danke für Hinweise oder Gedanken zu diesem Thema.

Bernhard

    
Big Bad Baerni 30.05.2013, 08:33
quelle

1 Antwort

2

Haben Sie versucht, beide EJBs @TransactionAttribute(TransactionAttributeType.REQUIRED) verwenden zu lassen und JBoss stattdessen entscheiden zu lassen, wo die Transaktion abgegrenzt werden soll?

    
Brad 01.06.2013, 22:53
quelle

Tags und Links