Problem mit redundanten Servern

DaBe1812

Bekanntes Mitglied
Hi,

ich hab da mal ein Problem mit redundanten Servern. Meine Anwendung läuft auf zwei Servern, verbunden durch einen Loadbalancer, die beide auf dieselbe Datenbank zugreifen.
Seit ich endlich die Datenbanken Servermanaged hin bekommen habe, habe ich ein Problem identifiziert.
Wenn ich auf der Oberfläche in den Optionen etwas umstelle, dann ist das auf dem System, auf dem die Umstellung passiert ist, sofort aktualisiert, auf dem anderen System erst nachdem dieses neu gestartet wurde.
Die Klasse, mit der geändert und gelesen wird:
Java:
import java.util.List;

import javax.enterprise.context.ApplicationScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.transaction.Transactional;

import main.java.persistence.entities.AtcParameter;

@ApplicationScoped
public class AtcParameterDbInterface {

    @PersistenceContext(unitName = "atcdb")
    private EntityManager em;

    @Transactional
    public void changeParameter(AtcParameter par) {
        em.merge(par);
        em.flush();
    }
    public List<AtcParameter> loadMiscParameterTable() {
        TypedQuery<AtcParameter> query = em.createNamedQuery("AtcParameter.miscParameter", AtcParameter.class);
        List<AtcParameter> resultList = query.getResultList();
        return resultList;
    }
}
Kann das etwas mit dem ApplicationScoped zu tun haben. Ich dachte, das würde lediglich dazu führen, dass die Bean in der gesamten Application zur Verfügung steht, und nicht, dass Results bis zum St. Nimmerleinstag gebuffert werden.

Das flush hatte ich deswegen hinzugefügt, aber musste leider feststellen, dass das nicht die Lösung war.
 

LimDul

Top Contributor
Welche JPA Implementierung verwendest du?

Versuch mal den Level 2 Cache da zu deaktivieren - das Problem dürfte nicht die Bean sein, sondern generell der Level 2 Cache von JPA. Der behält die Objekte im Cache und lädt sie nur neu, wenn er mitbekommt, das sich was geändert hat. Und wenn du auf dem einen Server was änderst, bekommt es der andere nicht mit.

Den kann man zwar auch shared anlegen - aber hören meine Kenntnisse auf.
 

Oneixee5

Top Contributor
Du musst einen Weg finden, das bei einer Änderung die Daten vom anderen Server neu geladen werden. Man kann einen Shared Cache verwenden, z.B. Redis, um das Problem zu umgehen oder eine Server2Server-Kommunikation etablieren, so das sich beide Server gegenseitig über Änderungen informieren. Die dritte Möglichkeit wäre, ganz auf Caching zu verzichten, dann werden die Daten aber jedes mal aus der DB geladen, wenn sie benötigt werden.
Wir gehen bei JEE immer den Weg über Cluster. Dann kann man die Anwendung dynamisch auf verschiedene VM's verteilen aber gleichzeitig Singleton Services definieren, welche einen einzigen globalen Zustand halten, auch über mehrere JVM's hinweg.
 

DaBe1812

Bekanntes Mitglied
Hi, ich benutze EclipseLink und hab da mal das Caching durchgelesen. Ein Weg wäre wohl RMI. So, wie ich das lese muss ich es wohl erstmal nur einschalten, den Rest macht es automatisch.
@Oneixee5 : Kannst du mir da etwas zum Lesen empfehlen, das hört sich an, als wenn ich damit generell noch optimieren könnte. Wir haben nämlich auch Timer, die mehrfach laufen und nicht sollte, und Timer, die ich gerne auf jeder VM laufen haben möchte.
 

DaBe1812

Bekanntes Mitglied
Also kann ich damit nichts anfangen: Cache Coordination
Mit Beispiel hier: Examples
So, wie ich das verstehe unterhalten sich die beiden Server über die Datenbankverbindung. Ich möchte den Cache eigentlich nicht deaktivieren, wenn es möglich wäre, dass Server B mit bekommt, dass Server A etwas verändert hat.
 

LimDul

Top Contributor
Du kannst dir das mal ansehen: https://medium.com/codex/scaling-your-database-with-eclipselink-and-redis-d8a6c809a155

So wie ich das mit Googlen verstanden gibt es out of the Box für Eclipselink 2 Möglichkeiten:

a) RMI (Das will man nicht. Never ever)
b) JMS - Setzt aber wohl einen MessageBroker voraus

Oder halt eine Eigenbaulösung wie oben im Link, bzw. hier auch noch mal https://dzone.com/articles/scaling-database-with-eclipselink-and-redis-9

Als dritte Lösung - die aber vermutlich am aufwendigsten ist - ist redis + Umstieg auf Hibernate, weil hibernate das wohl automatisch kann.

Gibt bestimmt auch noch andere Varianten, die ich nicht kenne, weil bei uns haben wir den L2 Cache deaktiviert, weil wir nicht so DB-lastig sind, dass wir vom Caching einen größeren Perfomance Boost erwarten (und keine Zeit haben uns um einen shared Cache zu kümmern - sonst könnte ich jetzt fundierte Vorschläge anbringen :))
 

Oneixee5

Top Contributor
Wir nutzen JEE mit Oracle Weblogic und dessen Cluster. Dort funktioniert das einfach so - ich denke, intern auch über RMI. Der Cache ist Coherence von Oracle. Die moderneren Anwendungen laufen meist über SpringBoot, dort gibt es die Router (Eureka, usw.) die bieten das auch an, z.B.: als REST-Call. In größeren Anwendungen dann über Kafka.
Man müsste wissen, was du genau nutzt. Es gibt da bestimmt eine Build-In-Lösung in deiner Landschaft. Wobei Eclipse-Link schon etwas 💩(Oracle) ist.
Das Timer-Problem sehe ich eher in der Architektur. Ein globaler Timer (nur eine Instanz) - was macht der? Daten aufräumen - dann gehört er auch in die DB mit rein und nicht in die Webanwendung. Wozu die Ressourcen des App-Servers mit so etwas belasten. Es ist einfach eine genaue Analyse notwendig, da kann man mit so wenig Infos einfach keine pauschale Aussage treffen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Problem mit Update von ApacheHttpClient von 5.2 auf 5.3 Allgemeines EE 10
Azemaria JSF: Problem bei der einfachsten Applikation Allgemeines EE 2
P JPA Internal Problem Nullpointer Allgemeines EE 10
S MessageDrivenBean Problem beim Zugriff auf Stateful EJB Allgemeines EE 2
M Glassfish Deployment-Problem unter Eclipse Allgemeines EE 0
B Problem beim Lesen des Codes... Allgemeines EE 2
R JPA Problem beim Speichern eines Users Allgemeines EE 2
S WebSocket Problem Allgemeines EE 0
F Eclipse/Java EE Debug-Problem Allgemeines EE 1
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
Raidri [SEAM] rich:dataTable sortBy Problem Allgemeines EE 6
T Problem mit den Beispielen von Apache Allgemeines EE 5
W JSF Validator Problem HTTP Status 500 Allgemeines EE 2
E JBoss 7.1 Datasource Problem Allgemeines EE 2
M JSP Problem -unbestimmte Anzahl von Werten Transportieren Allgemeines EE 9
S Problem mit EJB Verständnis Allgemeines EE 4
B Problem beim einbinden einer CSS in eine JSP Allgemeines EE 8
F JSP Problem mit Datenbankanbindung über Glassfishserver Allgemeines EE 4
S java Entities Problem Allgemeines EE 19
S Embedded JBoss Problem beim Deployment Allgemeines EE 4
E Session Problem Allgemeines EE 9
F problem mit nullpointer bei DB zugriff Allgemeines EE 2
A Erste Schritte... Problem mit Hibernate Allgemeines EE 15
ruutaiokwu jboss problem - work-verzeichnis muss manuell gelöscht werden??? Allgemeines EE 5
Stillmatic sendRedirect Problem! Allgemeines EE 3
M Problem mit Lookup auf EJB3 mit Glassfish Allgemeines EE 11
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
X JBoss InitialContext problem Allgemeines EE 5
LordZed Problem mit dem einbinden von Bibliotheken, die sich gegenseitig verwenden Allgemeines EE 5
H GWT Problem beim Ausführen Allgemeines EE 8
Q Problem mit JMS und Weblogic 10 Allgemeines EE 5
E Performance-Problem beim ersten Request Allgemeines EE 4
G Multi User Problem Allgemeines EE 8
G Datasource Problem Allgemeines EE 1
J OOP Java Array Problem Allgemeines EE 2
T Problem mit Java Transaction API Allgemeines EE 2
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
N JavaMail Problem Allgemeines EE 4
N JBoss Problem mit Bibliothek in unterschiedlichen Versionen Allgemeines EE 2
A Tomcat -- JSP: komisches Problem Allgemeines EE 11
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
B Problem mit ActionListener Allgemeines EE 13
G Simples JSF-Projekt in Eclipse - Problem Allgemeines EE 9
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
J Problem mit EJB Aufruf und DualCore Rechner Allgemeines EE 4
J ejb3.0 datenbank problem Allgemeines EE 2
J Problem mit Zurück-Button Allgemeines EE 2
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
J problem mit jsp/js Allgemeines EE 2
B Help - EJB2 - Problem mit Hybernate und "LIMIT" Allgemeines EE 6
B JSTL Problem Allgemeines EE 8
byte Tomcat Deployment Problem (HTTP Status 503) Allgemeines EE 8
S Problem mit t:selectOneRadio und ValueChangeListener Allgemeines EE 2
S Problem mit Struts und tiles Allgemeines EE 4
B Problem mit JBoss-4.2.1.GA Allgemeines EE 8
N Tiles - JSF Problem Allgemeines EE 3
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
V MYSQL JDBC;java.lang.ClassNotFoundException; Problem Eclipse Allgemeines EE 3
megachucky JMS - Problem mit TemporaryQueue Allgemeines EE 2
G Problem mit MimeType/ContentType Allgemeines EE 4
E Java Mail problem Allgemeines EE 5
Y XFire - Maven Build Problem Allgemeines EE 2
D JSP Problem mit equals? Allgemeines EE 2
A Eclipse Start-Problem Allgemeines EE 5
S JSF - Custom converter Problem Allgemeines EE 3
Y JSF Uhrzeitausgabe Problem Allgemeines EE 4
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
Y JSF - rendered Problem Allgemeines EE 1
D Servlet Problem über Server Allgemeines EE 26
Zed JSF h:inputText h:outputText update Problem Allgemeines EE 2
K mysql treiber problem wenn import java.sql.* bei _servlet_ Allgemeines EE 2
S JDBC Mysql Connection Problem - datasource null Allgemeines EE 3
T Session-Problem Allgemeines EE 2
R Tiles - Layout-Problem wegen Leerzeichen Allgemeines EE 6
G Tomcat / Eclipse oder Web.xml Problem Allgemeines EE 11
S Netbeans 5.5 Visual Web Pack Problem mit INSERT und PK Allgemeines EE 4
D JSF Problem mit Action Allgemeines EE 2
F Klassen und zugriffs Problem "Help wanted"! Allgemeines EE 16
D <input type="file"> Problem Allgemeines EE 6
N Struts - Problem mit <html:link> Action Allgemeines EE 3
A Problem / Fehler beim Einbinden einer Klasse in ein JSP Allgemeines EE 20
G Session Problem Allgemeines EE 5
T Ant Compiler Problem Allgemeines EE 9
T Problem dem Zaehler in mein Java - Code Allgemeines EE 2
A Hibernate-Problem mit MySQL-Cluster Allgemeines EE 6
H Servlet problem Allgemeines EE 10
G Problem mit Benutzerverwaltung Allgemeines EE 3
S Hibernate Mapping Problem Allgemeines EE 3
S Hibernate INSERT Problem Allgemeines EE 11
S Dummes JSP-Problem Allgemeines EE 8
P EJB-Installations-Problem Allgemeines EE 4
S CSS Problem in JSP Allgemeines EE 16
C Problem mit html:optionsCollection Allgemeines EE 4
R HILFE: Problem mit JSF examples Allgemeines EE 10
R Problem mit value-expression Allgemeines EE 7
R Problem mit for-schleife in JSP tag Allgemeines EE 8
B Struts Problem: Array in JSP ausgeben (logic:iterate) Allgemeines EE 12
M Redirct-Problem Allgemeines EE 4
M Geronimo v1.1 - Problem mit EAR deployen Allgemeines EE 5
S Problem mit Servlet Allgemeines EE 11

Ähnliche Java Themen

Neue Themen


Oben