Witam,
mam problem z aplikacją która jest w chmurze.
Aplikacja jest zbudowana w oparciu o spring-security, hibernate , tomcat9 z c3p0.
Problem pojawia się w gdy userzy nie logują się do aplikacji przez więcej niż 1dzień np. weekend.
Wiem, że wystarczy przestawić w konf postgresa paramert idle_in_transaction_session_timeout na 0 ale niestety dostawca nie rekomenduje takiego rozwiązania.
Skutkiem "wycięcia sesji" aplikacji przez bazę danych jest to że pojawia się tylko strona logowania i dalej aplikacja się wysypuje. Restart tomcat pomaga ale nie jest to docelowe rozwiązanie.
Czy jest jakaś opcja , konfiguracja itp. która będzie trzymać to połączenie niezależnie od konfigu postgresql ?
- Rejestracja:ponad 10 lat
- Ostatnio:4 miesiące
- Postów:17

- Rejestracja:około 6 lat
- Ostatnio:około 3 lata
- Postów:2206
Tak jakbyś miał reconnecta zwalonego w tej swojej aplikacji.
- Rejestracja:ponad 10 lat
- Ostatnio:4 miesiące
- Postów:17
@Pinek: Niekoniecznie - problemem jest to że po 1 dniu bezczynności aplikacja nie może dobić się do bazy danych.
Może źle patrzę na problem - sesja powinna się (tak mi się wydaje) tworzyć w momencie zalogowania user'a i kończyć wraz z jego wylogowaniem ? Dobrze kombinuję ?
- Rejestracja:prawie 10 lat
- Ostatnio:około 13 godzin
- Postów:2368
Połączenie może być ubijane na warstwie sieciowej, jeśli nie ma na nim aktywności. Doczytaj o ustawieniach c3p0. Możesz tak skonfigurować, żeby mieć funkcjonalność "keep aliave".
Keywords: testConnectionOnCheckout / testConnectionOnCheckin / ...
- Rejestracja:ponad 10 lat
- Ostatnio:4 miesiące
- Postów:17
Rzeczywiście problem był z połączeniem które jest egzekwowane przez hibernate i plik hibernate.properties.
hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider
hibernate.c3p0.min_size=1
hibernate.c3p0.max_size=5
hibernate.c3p0.timeout=300
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=300
hibernate.testOnBorrow=true
hibernate.c3p0.testConnectionInCheckout=true
hibernate.c3p0.testConnectionOnCheckout=true
hibernate.c3p0.preferredTestQuery=SELECT 1
Teraz parametr preferredTestQuery pomaga wstać połączeniu do bazy danych.
Ale jest jeszcze 1 problem , w applicationContext-security.xml aplikacja odwołuje się do filtra z parametrem custom-filter
before="FORM_LOGIN_FILTER" . W nim korzystam ze zwykłych query (tak jest zbudowana aplikacja) gdzie wyciągam ważne do dalszego
logowania dane z bazy. Do podłączenia do bazy używam osobnego pliku hibernate.cfg.xml gdzie mam powtórzone parametry do bazy.
Jeśli wykomentuję ten filtr wszystko działa jak trzeba ale jeśli go używam (jest konieczny) to tylko select 1 jest podtrzymany
w DB. Sesja dla zwykłego selecta z filtra nie potrafi się podnieść. Kombinowałem z ustawieniem podobnego parametru c3p0 select 2 w pliku
hibernate.cfg.xml ale nie przyniósł efektu.