Ghost Napisano 13 Grudzień 2010 Zgłoś Share Napisano 13 Grudzień 2010 Narzędzia: glassfish mysql java Problem: Śmiga sobie serverek glassfish'a, kiedy przychodzi noc nikt nie łączy się z bazą, a rano server wywala Exception: org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Zagadka najbardziej chyba do Artura, no i może Micz coś wyłapie. Exception wywala tylko raz, potem już sobie samo odświeży połączenie i wszystko śmiga. Jest to problem, ponieważ czasami pierwszą rzeczą jaką robi baza danych, to wyciąga login i hasło, no i się przy tym wywala. Muszę znaleźć miejsce, gdzie mogę sobie tak skonfigurować bazę MySQL, żeby po 8 godzinach bezczynności nie zawieszała połączenia. Ktoś wie jak to zrobić ?? I jeszcze pytanie, czy jak zmienię bazę na przykład na postgresa, to czy będę miał z nim podobny problem? Odnośnik do komentarza Udostępnij na stronach More sharing options...
Micz Napisano 13 Grudzień 2010 Zgłoś Share Napisano 13 Grudzień 2010 Jeśli baza rozłącza połączenie to pewnie musisz coś ustawić w samym mysql'u choć ja się z czymś takim nie spotkałem. Co do postgresa, trudno powiedzieć, pamiętaj, że różne silniki baz danych różnią się niektórymi poleceniami SQLa więc musiałbyś sprawdzić poprawność. Odnośnik do komentarza Udostępnij na stronach More sharing options...
Ralliart Napisano 13 Grudzień 2010 Zgłoś Share Napisano 13 Grudzień 2010 W pracy mam serwer MySQL który chodzi na okrągło i też ma przerwę ok 7 godzin w działaniu, ale nie spotkałem się jeszcze z takim błędem w jego działaniu. Pytanie mam tylko jedno (na razie) czy serwer MySQL jest zainstalowany osobno? Odnośnik do komentarza Udostępnij na stronach More sharing options...
Ghost Napisano 14 Grudzień 2010 Autor Zgłoś Share Napisano 14 Grudzień 2010 @Micz: z różnymi silnikami nie powinno być problemu, z tego względu, że korzystam z Java Persistence API, wystarczy więc zmienić tylko sterownik. 90% zapytań robi się z automatu, te co trzeba wpisywać z palca są uznawane przez ogólny standard SQL. @Ralliart: wyjątek wywala Glassfish nie sam MySQL, ale wywala go dlatego, że MySQL "usypia" połączenie. Wiem, że po 8 godzinach, bo wyczytałem to w google, natomiast nigdzie nie znalazłem rozwiązania tego problemu. Po wykonaniu pierwszego zapytania (które się wywala), kolejne zapytania już przechodzą, bo MySQL odnawia sobie połączenie. Server MySQL jest zainstalowany w pakiecie z innymi pierdółkami, cały silnik to XAMPP. Warto jeszcze dodać, że korzystam z czegoś takiego jak KM Wakeup, który o określonej godzinie hibernuje server, a rano go budzi, może w tym jest jakiś problem, bo ostatnio zauważyłem, że nie działa do końca poprawnie. Dzisiaj go wyłączę i zobaczymy jak się serverek zachowa jutro. Odnośnik do komentarza Udostępnij na stronach More sharing options...
Ralliart Napisano 14 Grudzień 2010 Zgłoś Share Napisano 14 Grudzień 2010 To hibernowanie serwera jest bez sensu moim zdaniem, bo nie ma żadnego zysku z tego, że nie działa w nocy. Bo jak rozumiem serwer działa w trybie 24/7? No i nie możesz wymagać tego, by serwer MySQL trzymał połączenia też w trybie 24/7, bo to jest niewykonalne. W pewnym momencie zabrakłoby po prostu wolnych połączeń do bazy. Odnośnik do komentarza Udostępnij na stronach More sharing options...
Micz Napisano 14 Grudzień 2010 Zgłoś Share Napisano 14 Grudzień 2010 Jako tymczasowe rozwiązanie możesz zrobić po prostu try catcha, gdy wystąpi wyjątek to w catch ponawiasz zapytanie do bazy. Tylko pytanie czy zdąży ponowić połączenie, ale zawsze możesz dodać opóźnienie. Odnośnik do komentarza Udostępnij na stronach More sharing options...
Ghost Napisano 14 Grudzień 2010 Autor Zgłoś Share Napisano 14 Grudzień 2010 To hibernowanie serwera jest bez sensu moim zdaniem, bo nie ma żadnego zysku z tego, że nie działa w nocy. Bo jak rozumiem serwer działa w trybie 24/7? No i nie możesz wymagać tego, by serwer MySQL trzymał połączenia też w trybie 24/7, bo to jest niewykonalne. W pewnym momencie zabrakłoby po prostu wolnych połączeń do bazy.Hibernowanie serwera ma zaoszczędzić prąd i wydatki z tym związane (odp. dla greenpeace: ma uratować ziemię i wszystkie istoty na niej żyjące poprzez zapobieganie efektowi cieplarnianemu). Chociaż pewnie nie dużo zaoszczędza, ale zawsze. Serwer działa 24/7, z tym, że jest zahibernowany w godzinach 16:30 - 7:30 oraz w weekendy. Nie za bardzo rozumiem co znaczy, że zabrakłoby wolnych połączeń do bazy. W kodzie źródłowym zamykam każde otwarte połączenie z bazą zwalniając miejsce dla innych połączeń. Kiedyś tego nie zaimplementowałem i mi się aplikacja srała co 3 dni Jako tymczasowe rozwiązanie możesz zrobić po prostu try catcha, gdy wystąpi wyjątek to w catch ponawiasz zapytanie do bazy. Tylko pytanie czy zdąży ponowić połączenie, ale zawsze możesz dodać opóźnienie.W sumie jest to jakieś rozwiązanie. Chodzi o przerobienie 2 aplikacji, z których pierwsza to Intranet, który zaraz po uruchomieniu pobiera sobie z bazy aktualne News'y, no i drugi HR, który pobiera login i hasło, więc wystarczy zmodyfikować tylko te 2 połączenia. No ale zrobię to jutro Najpierw zobaczymy czy będzie działał jak nie zahibernuję servera Tylko tych wielorybów szkoda, ale to jest cena, jaką jestem gotów zapłacić Odnośnik do komentarza Udostępnij na stronach More sharing options...
Micz Napisano 14 Grudzień 2010 Zgłoś Share Napisano 14 Grudzień 2010 Jak chcesz mieć pewność, że się wykona to może też zrobić coś takiego: boolean repeat = true; while(repeat) { try { repeat = false; // tu operacja na bazie; } catch(CommunicationsException e) { repeat = true; } } Odnośnik do komentarza Udostępnij na stronach More sharing options...
Recommended Posts