G
Gelöschtes Mitglied 68249
Gast
Hi,
ich soll in unserem Migrationsprojekt jetzt für die Übergangszeit eine Übergangs-Krücke einbauen.
Der Prozess läuft aktuell folgendermaßen ab:
Ich suche mit einer NativeQuery im Altsystem meine Daten zusammen und strukturiere diese schon in die Form der neuen Datenbank, bzw. einigermaßen in die Form der neuen Objekte.
Dann übergebe ich diese
Aus Performancegründen persistieren wir aktuell auch nicht mehr, weil die Objekte sowieso nicht in der neuen Datenbank gepflegt werden.
Eine relativ große Suche dauert für Schritt 1 ca. 11 Sekunden und liefert etwas um die 23.000 Datensätze. Flaschenhals ist dann die Migration, hier kann man pro Satz knapp unter einer Sekunde rechnen, weswegen ich das aktuell einfach auf X-Datensätze begrenze.
Jetzt war die Idee die Migration Paketweise zu machen. Also ich habe die komplette Liste mit den ObjektArrays aus der Suche und migriere 25 Sätze davon. Das entspricht im Frontend einer Seite der Tabelle. Dann muss ich das Frontend aktualisieren. Danach werden die nächsten 25 Ergebnisse in die Liste geschrieben und das Frontend wieder aktualisiert, usw.
Nur ich weiß nicht, wie ich das machen soll. Frontend ist aktuell Primefaces 13.
Der Frontend-Handler sieht aktuell auszugsweise so aus:
Und die Suchfunktion so:
Also theoretisch muss ich OldWindowsOsFactory
Und dann muss die
Oder kann ich aus einer Runnable auch pushen, dass es Werte gibt?
Aber das alles aktualisiert mir ja nicht automatisch das Frontend?
ich soll in unserem Migrationsprojekt jetzt für die Übergangszeit eine Übergangs-Krücke einbauen.
Der Prozess läuft aktuell folgendermaßen ab:
Ich suche mit einer NativeQuery im Altsystem meine Daten zusammen und strukturiere diese schon in die Form der neuen Datenbank, bzw. einigermaßen in die Form der neuen Objekte.
Dann übergebe ich diese
List<Object[]>
an einen Migrationshandler, welcher dann Feld für Feld aus dem ObjectArray die Werte holt, diese bei Bedarf in das Format des neuen Objekts bringt und dann per Setter in das Objekt schreibt.Aus Performancegründen persistieren wir aktuell auch nicht mehr, weil die Objekte sowieso nicht in der neuen Datenbank gepflegt werden.
Eine relativ große Suche dauert für Schritt 1 ca. 11 Sekunden und liefert etwas um die 23.000 Datensätze. Flaschenhals ist dann die Migration, hier kann man pro Satz knapp unter einer Sekunde rechnen, weswegen ich das aktuell einfach auf X-Datensätze begrenze.
Jetzt war die Idee die Migration Paketweise zu machen. Also ich habe die komplette Liste mit den ObjektArrays aus der Suche und migriere 25 Sätze davon. Das entspricht im Frontend einer Seite der Tabelle. Dann muss ich das Frontend aktualisieren. Danach werden die nächsten 25 Ergebnisse in die Liste geschrieben und das Frontend wieder aktualisiert, usw.
Nur ich weiß nicht, wie ich das machen soll. Frontend ist aktuell Primefaces 13.
Der Frontend-Handler sieht aktuell auszugsweise so aus:
Java:
@Named
@ViewScoped
public class ProIpsSearchHandler implements Serializable {
private List<SearchableEntity> searchResults;
public void search() {
List<SearchTerm> searchTerms = new ArrayList<>();
searchTerms.add(new SearchTerm(selectedSearchfield1, selectedSearchOperator1, searchString1, selectedSearchState1));
searchResults = selectedInterface.searchEntity(searchTerms, 500);
}
Und die Suchfunktion so:
Java:
@ApplicationScoped
public class OldWindowsOsFactory implements Serializable {
public List<SearchableEntity> searchEntity(List<SearchTerm> searchTerms, Integer maxRecordsAllowed) {
StringBuilder searchTermAddition = new StringBuilder();
for(SearchTerm term : searchTerms) {
//Suchbedingung zusammenbauen
}
String sql = MigSelectSql.SELECT_WINDOWS_OS.replace("%%SEARCH_TERM_ADDITION%%", searchTermAddition.toString());
Query query = em.createNativeQuery(sql);
List<Object[]> results = query.getResultList();
if(results.size() > maxRecordsAllowed) {
results = results.subList(0, maxRecordsAllowed);
}
List<WindowsOsData> windowsOsList = new ArrayList<>();
try {
windowsOsList = migWindowsOs.migrateList(results, false);
} catch(Exception e) {
LOG.error("Fehler beim holen alter Daten", e);
}
return new ArrayList<>(windowsOsList);
}
}
Also theoretisch muss ich OldWindowsOsFactory
Runnable
implementieren lassen?Und dann muss die
search()
im Frontend permanent prüfen, ob die Suche (Migration) fertig ist und alle x Prüfeinheiten könnte sie sich neue Werte holen, oder?Oder kann ich aus einer Runnable auch pushen, dass es Werte gibt?
Aber das alles aktualisiert mir ja nicht automatisch das Frontend?