[java + glassfish + mysql] Połączenie z bazą po upłynięciu kilku godzin

0

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

Wiem o co chodzi, ale nie wiem, gdzie mogę zmienić w konfiguracji MySQL, żeby nie tracił połączenia, albo, żeby automatycznie odnawiał połączenie przed wykonaniem zapytania.

I jeszcze pytanie, czy jak zmienię bazę na przykład na postgresa, to czy będę miał z nim podobny problem?

0

W domyślnej konfiguracji mysql ubija połączenia, które za długo nic nie robią.

Jak łączysz się z bazą? pobierasz połączenie z jakiegoś connection pool ustawionego na serwerze ?
Nie kombinowałeś coś czasem w ustawieniach tego connection poola ?
Nie masz czasem miejsca w kodzie gdzie sam sobie tworzysz połączenie z mysql'em, które sobie potem wisi ?

Problemem jest Twoja aplikacja lub jej konfiguracja a nie mysql.

0

Z bazą danych łączę się za pomocą JPA no i sterownika MySQL. Przez cały dzień wszystko śmiga prawidłowo, natomiast przez noc serwer MySQL... nie wiem jak to w sumie nazwać... usypia połączenie. Potem pierwsze zapytanie wykonane przez aplikacje się wywala, ale podczas wywalenia tego zapytania MySQL odnawia sobie połączenie i dalej wszystko śmiga prawidłowo.

Nie sądzę, żeby problem był w aplikacji, ponieważ za każdym razem zamykam wszystkie połączenia z bazą, żeby oczyścić connection pool. Poza tym z jednej bazy korzystają dwie różne aplikacje i jak zapytanie wywali się w jednej aplikacji, to w drugiej już się coś takiego nie stanie.

Miałem aplikację, która hibernowała serwer na noc i na weekendy, wyłączyłem ją i z tego co wiem, jedna z aplikacji wywaliła się i tak, ale nie widziałem tego osobiście, tylko mi użytkownicy powiedzieli (na co oczywiście trzeba wziąć poprawkę). Sprawdzę wszystko po weekendzie samodzielnie.

0
Vexling napisał(a)

Z bazą danych łączę się za pomocą JPA no i sterownika MySQL. Przez cały dzień wszystko śmiga prawidłowo, natomiast przez noc serwer MySQL... nie wiem jak to w sumie nazwać... usypia połączenie. Potem pierwsze zapytanie wykonane przez aplikacje się wywala, ale podczas wywalenia tego zapytania MySQL odnawia sobie połączenie i dalej wszystko śmiga prawidłowo.

Nie sądzę, żeby problem był w aplikacji, ponieważ za każdym razem zamykam wszystkie połączenia z bazą, żeby oczyścić connection pool. Poza tym z jednej bazy korzystają dwie różne aplikacje i jak zapytanie wywali się w jednej aplikacji, to w drugiej już się coś takiego nie stanie.

Wybacza ale obwinianie MySQL lub wykorzystywanych lib'ów w pierwszej kolejności jest zazwyczaj oznaką braku doświadczenia oraz pokory. Ja mam 2 projekty na EJB/JPA/Glassfish/MySQL i wszystko działa bez grzebania w konfigach MySQL'a.

Pokaż kod w którym inicjalizujesz, wykorzystujesz i zamykasz JPA. Jak wygląda twój presitance.xml. Czy pobierasz connection pool z zasobów serwera ? poprzez nazwę JNDI ?

0

glassfish ma bardzo fajną konsolę administratora - patrzyłeś tam na ustawienia puli połączeń itp? Jest pare ładnych opcji konfiguracyjnych może coś odszukasz dla siebie. localhost:4848

0
Freakman napisał(a)

glassfish ma bardzo fajną konsolę administratora - patrzyłeś tam na ustawienia puli połączeń itp? Jest pare ładnych opcji konfiguracyjnych może coś odszukasz dla siebie. localhost:4848

powinno być ok na domyślnych ustawieniach

1 użytkowników online, w tym zalogowanych: 0, gości: 1