![]() ![]() |
8.03.2010, 12:16:46
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 15 296 Pomógł: 1565 Dołączył: 27.12.2004 |
Hejka,
załóżmy że mamy rozpoczętą transakcję. Coś tam robimy i w tym coś tam wykonujemy jakąś inną funkcję. Funkcja ta niezależnie od kodu, w którym została wykonana, również rozpoczyna własną transakcję. Oczywiście dla mysql wywali to błąd. Jak to rozwiązujecie w ZF? Są jakieś mechanizmy na to? Ja do tej pory we własnym frameworku robiłem to tak, ze metoda beginTransaction incrementowała licznik rozpoczeć. Gdy licznik byl wiekszy od 1 to nie rozpoczynała fizycznie transakcji w bazie i był spokoj. Oczywiscie metody rollback i commit zmniejszały licznik i gdy dochodzil do zera to wykonywały fizycznie na bazie rollbacl lub commit. Czytając rozne źródła o ZF tam nie ma czegoś takiego. Niektórzy proponowali sprawdzac czy jest rozpoczęta transakcja czy nie i w zależności od tego samemu rozpocząć lub nie. Daje to dodatkowy narzut kodu i wcale nie jest takie idealne. Innym rozwiązaniem byłoby stworzenie klasy pomocniczej, która dziedziczy po DB i tam nadpisac metody begin, commit, rollback i dodać wspomnianie wyżej liczniki. Musiałbym jednak pisać taką klasę dla kazdego wykorzystywanego sterownika. Czy radzice sobie jakoś inaczej w tej kwestii? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer -------------------- Wypełniasz PIT? Kliknij tu lub tu! Ciebie to nic nie będzie kosztować, a komuś życie możesz uratować Moje klasy: Pager (stronicowanie) | Cache | ShoutBox (mini chat) | ActionsManager |||| Dział download Artykuły: wzorzec obserwator | php-faq | mysql-faq | grupowanie wyników | wyszukiwarka | opcje dwuwartościowe |
|
|
|
10.03.2010, 09:57:23
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 1 Dołączył: 5.04.2007 Skąd: Jarocin Ostrzeżenie: (0%)
|
|
|
|
|
10.03.2010, 09:58:48
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 15 296 Pomógł: 1565 Dołączył: 27.12.2004 |
Nie, to nie jest satysfakcjonujące mnie rozwiązanie.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer -------------------- Wypełniasz PIT? Kliknij tu lub tu! Ciebie to nic nie będzie kosztować, a komuś życie możesz uratować Moje klasy: Pager (stronicowanie) | Cache | ShoutBox (mini chat) | ActionsManager |||| Dział download Artykuły: wzorzec obserwator | php-faq | mysql-faq | grupowanie wyników | wyszukiwarka | opcje dwuwartościowe |
|
|
|
10.03.2010, 12:30:45
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 72 Pomógł: 10 Dołączył: 24.07.2009 Skąd: Gdańsk Ostrzeżenie: (0%)
|
|
|
|
|
10.03.2010, 12:46:52
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 15 296 Pomógł: 1565 Dołączył: 27.12.2004 |
@up jest to rozwiązanie o którym juz pisalem:
Cytat Innym rozwiązaniem byłoby stworzenie klasy pomocniczej, która dziedziczy po DB i tam nadpisac metody begin, commit, rollback i dodać wspomnianie wyżej liczniki. Musiałbym jednak pisać taką klasę dla kazdego wykorzystywanego sterownika. Podejrzewam ze na tym wlasnie się skonczy, iż będę musiał spłodzić taki twor. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer -------------------- Wypełniasz PIT? Kliknij tu lub tu! Ciebie to nic nie będzie kosztować, a komuś życie możesz uratować Moje klasy: Pager (stronicowanie) | Cache | ShoutBox (mini chat) | ActionsManager |||| Dział download Artykuły: wzorzec obserwator | php-faq | mysql-faq | grupowanie wyników | wyszukiwarka | opcje dwuwartościowe |
|
|
|
![]() ![]() |
|
Wersja Lo-Fi | Aktualny czas: 31.07.2010 - 02:36 |