Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: EJB transakcje

Jest metoda EJB, ktora z danych wejsciowych tworzy encje przetwarza ja i zapisuje do bazy ze jakims statusem. Czas trwania tej metody to okolo 15 s.
Jesli metoda zostanie drugi raz wywolana z tymi samymi parametrami to powinna zostac zwrocona odpowiedz ze taka encja juz istnieje.
W EJB transakcja jest zarzadzana przez kontener.

Jesli metoda zostanie wykonana drugi raz z tymi samymi parametrami przez zakonczeniem pierwszego wykonania to w bazie nie bedzie informacji o istnieniu tej encji (chyba ze poziom izolacji na bazie bedzie pozwalal na nieczyste odczyty).

No i teraz pytanie jak mozna to rozwiazac?

Czy da sie ustawic jakos poziom izolacji dla konkretnej metody?
A moze jedynym wyjsciem jest reczne zarzadzanie transakcja (@TransactionManagement(TransactionManagementType.BEAN)) ?
Anass Halhoul

Anass Halhoul Middleware
Administrator at
Citibank

Temat: EJB transakcje

Czesc,

Sprawdz izolation level dla bean, jesli masz container managed ustawiony to mozesz uzywac w przypadku Weblogic weblogic-ejb-jar.xml .
element transaction-isolation oraz isolation level, sa 4 rodzaje tutaj dokumentacja :
http://download.oracle.com/docs/cd/E13222_01/wls/docs8....
To dla Weblogic, jaki masz server aplikacyjny

konto usunięte

Temat: EJB transakcje

W ziarnach zarządzanych przez kontener jest zabronione używanie UserTransaction.
W związku z tym, programowo możesz sterować poziomem izolacji transakcji tylko jeśli używasz ziaren BMP.

Jeśli dysponujesz serwerem IBM WebSphere, dla ziaren EJB 2.x może być pomocny 'access-intents'.
Możesz również, niezależnie od serwera używać różnych źródeł danych, o różnych poziomach izolacji transakcji, np. "jdbc/RepeatableReadDataSource" i "jdbc/ReadCommitedDataSource".

Dla ziaren EJB 3.x, jeśli używasz JPA, możesz zdefiniować kilka jednostek utrwalania, ustawiając dla każdej inny poziom izolacji transakcji, np. "read-commited-PU" i "repeatable-read-PU". Wtedy w konkretnej metodzie wstrzkniesz sobie albo zaglądniesz do JNDI po inne PU, w zależności jaki ma być użyty poziom izolacji.

Utrzymywanie transakcji przez 15 sekund nie jest dobrym pomysłem.
Szymon Błądek:
Jest metoda EJB, ktora z danych wejsciowych tworzy encje przetwarza ja i zapisuje do bazy ze jakims statusem. Czas trwania tej metody to okolo 15 s.
Jesli metoda zostanie drugi raz wywolana z tymi samymi parametrami to powinna zostac zwrocona odpowiedz ze taka encja juz istnieje.
W EJB transakcja jest zarzadzana przez kontener.

Jesli metoda zostanie wykonana drugi raz z tymi samymi parametrami przez zakonczeniem pierwszego wykonania to w bazie nie bedzie informacji o istnieniu tej encji (chyba ze poziom izolacji na bazie bedzie pozwalal na nieczyste odczyty).

No i teraz pytanie jak mozna to rozwiazac?

Czy da sie ustawic jakos poziom izolacji dla konkretnej metody?
A moze jedynym wyjsciem jest reczne zarzadzanie transakcja (@TransactionManagement(TransactionManagementType.BEAN)) ?
Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: EJB transakcje

Paweł Grotowski:
W ziarnach zarządzanych przez kontener jest zabronione używanie UserTransaction.
W związku z tym, programowo możesz sterować poziomem izolacji transakcji tylko jeśli używasz ziaren BMP.

Jeśli dysponujesz serwerem IBM WebSphere, dla ziaren EJB 2.x może być pomocny 'access-intents'.
Możesz również, niezależnie od serwera używać różnych źródeł danych, o różnych poziomach izolacji transakcji, np. "jdbc/RepeatableReadDataSource" i "jdbc/ReadCommitedDataSource".

Dla ziaren EJB 3.x, jeśli używasz JPA, możesz zdefiniować kilka jednostek utrwalania, ustawiając dla każdej inny poziom izolacji transakcji, np. "read-commited-PU" i "repeatable-read-PU". Wtedy w konkretnej metodzie wstrzkniesz sobie albo zaglądniesz do JNDI po inne PU, w zależności jaki ma być użyty poziom izolacji.

Utrzymywanie transakcji przez 15 sekund nie jest dobrym pomysłem.
Szymon Błądek:
Jest metoda EJB, ktora z danych wejsciowych tworzy encje przetwarza ja i zapisuje do bazy ze jakims statusem. Czas trwania tej metody to okolo 15 s.
Jesli metoda zostanie drugi raz wywolana z tymi samymi parametrami to powinna zostac zwrocona odpowiedz ze taka encja juz istnieje.
W EJB transakcja jest zarzadzana przez kontener.

Jesli metoda zostanie wykonana drugi raz z tymi samymi parametrami przez zakonczeniem pierwszego wykonania to w bazie nie bedzie informacji o istnieniu tej encji (chyba ze poziom izolacji na bazie bedzie pozwalal na nieczyste odczyty).

No i teraz pytanie jak mozna to rozwiazac?

Czy da sie ustawic jakos poziom izolacji dla konkretnej metody?
A moze jedynym wyjsciem jest reczne zarzadzanie transakcja (@TransactionManagement(TransactionManagementType.BEAN)) ?


Fajny pomysl z dwoma jednostkami utrwalania. Dzięki za pomoc :)

Następna dyskusja:

ejb + standalone applicatio...




Wyślij zaproszenie do