Oczywiście wiem już teraz, że źle się do tego zabrałem, ale nie mam czasu i muszę to "jakoś" zrobić na teraz, później będę poprawiał. Więc proszę o pomoc jak moje rozwiązania teraz "załatać", aby tylko działało, ale też dobrze jakbyście wskazali prawidłowy kierunek mi na przyszłość.
Korzystam z JPA(eclipselink|mysql) + VAADIN na Tomcacie bez Springa, EJB etc. (tak kazano mi projekt dalej realizować).
Mam jeden entityManager na całą aplikację (kolejna wytyczna), korzystam tylko z transakcji czyli jak cokolwiek chcę zapisać do bazy usunąć, dodać, zmodyfikować, to robię to między em.getTransaction.begin() i em.getTransaction.commit().
I tutaj największy problem. Oczywiście jak coś zmieni jeden uzytkownik, to drugi ma w tym momencie nieaktualne dane i trzeba robić em.refresh(entityObject), aby zaczytał z bazy dane na nowo. Nie korzystam domyślnie raczej z L2 Cache, więc entityManager.getEntityManagerFactory().getCache().evictAll(); nic nie da. A entityManager.clear(); rozwiązuje u mnie sprawę, z tym, że obiekty pobrane tracą połączenie z entity managerem i zmiana lub commit do bazy nie dojdzie. Sprawę rozwiązałoby gdyby istniało coś jak .refreshAll(). Co prawda byłby to narzut spory, ale w tej aplikacji to nie boli i w przyszłości to zmienię na inne rozwiązanie.
Da się w ogóle aplikacje rozsądnie z JPPA pisać bez żadnych dodatków jak spring, EJB itd. na tomcacie?