konto usunięte

Temat: Transakcje w Springu, kilka pytań podchwytliwa flaga...

Może mi ktoś wytłumaczyć jedną rzecz?
Jeśli np nie oznaczę metody jako @Transactional
To wtedy i tak to co będę zapisywać będzie w transakcji po stronie BD ?
Czy nie będzie żadnej transakcji?
Jaka jest różnica miedzy lokalną transakcją a globalną bo nie mogę tego za bardzo zrozumieć ?
Jeśli używam w @Transactioan flagi readOnyl - to do metody któa odczytuje dane to i tak powstanie transakcja ?
Jeśli używam JDBC to poleci wyjątek Throw a read-only connection exception

@Transactional(readOnly = true, propagation=Propagation.REQUIRED)
public long insertTrade(TradeData trade) throws Exception {
//JDBC code...
}


Jeśli używałbym w powyższym kodzie np. Hibernate to

@Transactional(readOnly = true, propagation=Propagation.REQUIRED)
public long insertTrade(TradeData trade) throws Exception {
em.persist(trade);
return trade.getTradeId();
}

bez problemu to zakomituje w bd
W takim razie jaki jest sens tej flagi?
Nie lepiej odczytywać te dane bez transakcji jeśli można sobie na to pozwolić ? Mniejszy narzut chyba ?
Krzysztof T.

Krzysztof T. Umysł nie jest
naczyniem, które
trzeba napełnić,
lecz ogn...

Temat: Transakcje w Springu, kilka pytań podchwytliwa flaga...

Wszystko zależy co oznaczysz jako Transactional.

Jeżeli nad klasą umieścisz:

@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class KsiazkaTelefonicznaImpl implements KsiaszkaService{

.....
}


To wszystkie metody w klasie nie będą wymagały transakcyjności, ale będą wszystkie tylko do odczytu.
Natomiast jak zrobisz coś takiego:

@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class KsiazkaTelefonicznaImpl implements KsiaszkaService{


@Transactional(propagation = Propagation.MANDATORY, readOnly = false)
public void deleteEntry(Long id) {
phoneBook.deleteEntry(id);
}

}

Sprawi że "nadpiszesz" założenia dotyczące klasy i dla metody
deleteEntry ustawisz, że to nie jest readOnly i że wymaga transakcji.

Generalnie jak robisz coś w Springu z użyciem Hibernate/BD to poczytaj o
regule ACID, poziomach izolacji i propagacji.

Ze swojej strony mogę CI polecić książkę "Spring 3 w akcji" - wydawnictwo Helion.

konto usunięte

Temat: Transakcje w Springu, kilka pytań podchwytliwa flaga...

Moje pytanie było o zupełnie coś innego.
Wiem co to ACID.
Wiem jaka jest różnica jeśli nad metodą dam adnotację, a nad klasą.
Co do mojego pytania to chyba źle je zrozumiałeś.
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Transakcje w Springu, kilka pytań podchwytliwa flaga...

Co do różnicy pomiędzy JDBC a Hibernate, wystarczy spojrzeć na javadoc Springa.

http://docs.spring.io/spring/docs/3.2.8.RELEASE/javado...


public abstract boolean readOnly
true if the transaction is read-only. Defaults to false.
This just serves as a hint for the actual transaction subsystem; it will not necessarily cause failure of write access attempts. A transaction manager which cannot interpret the read-only hint will not throw an exception when asked for a read-only transaction.


z odczytywaniem bez transakcji osobiście bym uważał - w większości przypadków chcemy w końcu odczytać to co już jest częścią transakcji. Ale to wszystko moim zdaniem zależy od kontekstu i nie ma jednej dobrej odpowiedzi.Ten post został edytowany przez Autora dnia 22.04.14 o godzinie 01:34
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Transakcje w Springu, kilka pytań podchwytliwa flaga...

Kamil J.:

...
Jaka jest różnica miedzy lokalną transakcją a globalną bo nie mogę tego za bardzo zrozumieć ?
...

Jeśli operujesz w środowisku, w którym masz dostępne różne transakcyjne zasoby (np. bazy danych, systemy kolejkowe), to można powiedzieć, że lokalna transakcja, to transakcja na pojedynczym takim zasobie, zaś globalna, to taka, która swoim zasięgiem obejmuje wiele zasobów.

Standard X/Open Distributed Transaction Processing określa trzy rodzaje komponentów:
- aplikacja
- resource manager - zapewnia dostęp do współdzielonego zasobu
- transaction manager - koordynuje transakcje

Aplikacja korzysta z zasobów wystawianych przez Resource Managery oraz określa granice transakcji (via wywołania Transaction Managera). TM "gada z" RM w celu dopięcia transakcji.
W takim razie jaki jest sens tej flagi?

Wskazówka dla TM/RM w celach optymalizacji. W przypadku transakcji read-only nie trzeba wycofywać transakcji / utrzymywać logów do jej wycofania :)

Następna dyskusja:

Seam+Hibernate. Kilka probl...




Wyślij zaproszenie do