Tabelle für "wiederkehrende Rechnungen"

beta20

Top Contributor
Hallo zusammen,

ich möchte gerne in meiner Applikation "wiederkehrende" Aufgaben oder Rechnungen speichern.
Die Frage ist jedoch, wie ich das modelliere.

Beispiel:
Ich möchte, dass jeden Tag um 12 Uhr eine Aufgabe generiert wird (z.B. eine Email an mich schicken etc.).
-> Ich kann ja nun nicht 1000 Einträge generieren für jeden Tag

Mein Gedankengang ist derzeit folgender:
- In meiner DB steht immer nur ein Eintrag für den nächsten Zeitpunkt, also z.B. morgen 12 Uhr.
- Sobald dies erledigt ist (ein Flag "Status o.ä.), wird automatisch ein neuer Eintrag für den nächsten Zeitpunkt angelegt.

Die zweite Frage ist dann wie die Aufgabe ausgeführt wird.
Meine Idee ist hier einen Schedule in meiner @EJB Container anzulegen, der alle 10 Minuten prüft, ob es Aufgaben gibt? Wenn ja, dann wird diese ausgeführt etc.

Oder gibt es andere Vorschläge?

Danke
 

Flynn

Mitglied
Wenn du ein Windows-Betriebssystem verwendest, dann nutze doch auch für deine Java-Applikation auch den Windows-JobScheduler für deine automatische EMail. Du findest den Scheduler unter "Systemsteuerung/Verwaltung/Aufgabenplanung". Ich nutze ihn ähnlich wie du es möchtest und es funktioniert super, daß ich 2x in der Woche zu einem bestimmten Zeitpunkt eine automatische EMail bekomme.
 

mrBrown

Super-Moderator
Mitarbeiter
Das Unix-Äuivalent wäre Cron.

Ich bin mir aber noch nicht sicher, worum es dir eigentlich geht - geht es dir um das speichern in der Datenbank oder das passende zeitliche ausführen oder eine Mischung aus allem?
 

beta20

Top Contributor
das Verschicken einer Email war nur ein Beispiel - das ganze ist eine Webanwendung (JAVA EE), die auf einem Server läuft
Generell geht es mir darum, dass wiederkehrende Aufgaben in der DB abgespeichert werden soll
a) Wie soll hier die Tabelle aussehen?
b) Wie werden die Aufgaben angetriggert?
 

Flynn

Mitglied
Du könntest mit "Thread.sleep( 86400000 );" in einer Schleife so die perfekte zeitliche z.B. 24-stündige Wiederkehrung des Vorgangs erreichen. In einer Tabelle hinterlege neben einer IdNr, den Programmnamen oder eine Aufgabenbezeichnung, und im DateTime-Format eben wann du was passieren hast lassen, damit du auch den Aufgaben-Ablauf so gut verfolgen kannst. So koordiniere ich meinen Scheduler.
 

Meniskusschaden

Top Contributor
ja aber wie speichere ich WANN welche Aufgabe ausgeführt wird?
Was spricht denn gegen deinen eigenen Vorschlag aus dem Eröffnungsposting. Das:
Mein Gedankengang ist derzeit folgender:
- In meiner DB steht immer nur ein Eintrag für den nächsten Zeitpunkt, also z.B. morgen 12 Uhr.
- Sobald dies erledigt ist (ein Flag "Status o.ä.), wird automatisch ein neuer Eintrag für den nächsten Zeitpunkt angelegt.
wäre doch ein vernünftiger Ansatz.

Falls dein DB-System einen Scheduler hat, könntest du dort ein paar Tasks einplanen und dir ansehen, wie die gespeichert werden. Vielleicht kannst du dich daran orientieren. Bei MySQL kannst du es dir z.B. mit select * from information_schema.events anzeigen.
 

beta20

Top Contributor
ich bevorzuge auch eher die JEE Bordmitteln.
Kann ich hier jede Minute einen Schedule anstarten?
Was passiert wenn ein Schedule noch nicht alle Aufgaben abgearbeitet hat?
Fängt dann der nächste Schedule an und es gibt Probleme?
 

mrBrown

Super-Moderator
Mitarbeiter
a) Wie soll hier die Tabelle aussehen?
Hängt von den Aufgaben ab, wenn die regelmäßig wiederholt werden, könnte man zB einfach das Intervall speichern (und wenn nötig zusätzlich in einer anderen Tabelle alle schon ausgeführten).
Ansonsten wäre auch deine Variante ein Weg.

b) Wie werden die Aufgaben angetriggert?
die EE-Boardmittel dürften dabei die beste Wahl sein, würden ja auch schon von @thecain genannt.
 

beta20

Top Contributor
Wie wäre folgender Ansatz:

Schedule_Intervall: (Speicherung des Intervall)
- ID
- Name
- Beschreibung
- StartDate
- EndDate
- ScheduleType (By Day, By Week, By Month, By Year)
- Every_Minutes (-> integer)
- Every_Hours (-> integer)
- Every_Days (-> integer)
- Every_Weeks (-> integer)
- Every_Month (-> integer)
- Weekday_Monday (-> boolean)
- Weekday_Tuesday (-> boolean)
- Weekyday_... (-> boolean)
- Month_January
- Month_February
- ....

So könnte ich dann auch etwas anlegen, wie:
- Jeden zweiten Donnerstag im April
= Every_Days = 2
= Weekkay_Thursday = true
= Month_April = true


Schedule_Execution: (Speicherung der Ausführungen + nächste Ausführungen)
- ID
- Schdule_Intervall_FK
- Status (successful, outstanding)

Im EJB - Container habe ich dann jede Minute einen Schedule laufen, der:
- Holt mir alle "outstanding" Schedules.
- Führt diese aus
- Legt nach der Ausführung einen neuen Eintrag in der Schedule_Execution an, der die nächste Ausführung speichert (mit dem Status "outstanding")


Möchte jemand wirklich die nächsten Ausführungen (also mehr als nur den einen Eintrag sehen), könnte man diesen sich selbst als JAVA Objekte anhand der Schedule_Intervall - Tabelle generieren.

Passt dieser Ansatz?
 

mrBrown

Super-Moderator
Mitarbeiter
Schedule_Intervall: (Speicherung des Intervall)
uU sind da noch Cron-Expressions einen Blick wert: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
(was deinem ja auch nah kommt)
- Jeden zweiten Donnerstag im April
Das wäre damit * * * ? 4 4#2, wenn ich mich grad nicht irre (und könnte natürlich in eine besser lesbare Form überführt werden)

Im EJB - Container habe ich dann jede Minute einen Schedule laufen, der:
- Holt mir alle "outstanding" Schedules.
- Führt diese aus
- Legt nach der Ausführung einen neuen Eintrag in der Schedule_Execution an, der die nächste Ausführung speichert (mit dem Status "outstanding")
Wenn möglich würde ich das nicht mit Polling lösen, kommt aber immer auf den Zweck an und ob das überhaupt möglich ist.
Für den Anfang dürfte das aber vermutlich reichen.

Möchte jemand wirklich die nächsten Ausführungen (also mehr als nur den einen Eintrag sehen), könnte man diesen sich selbst als JAVA Objekte anhand der Schedule_Intervall - Tabelle generieren.
Das würde ich auch so lösen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Datenmodell für Regeln + Bedingungen & Referenz auf andere Tabelle Datenbankprogrammierung 12
G Tabelle für Zeitraum sperren Datenbankprogrammierung 4
M sql-code für suche in tabelle nach höchster transaktionsnr Datenbankprogrammierung 12
D Ich möchte dass ich nachdem man den Kommentar geschrieben hat den Kommentar in den Tabelle Bestellübersicht geschbeichert wird klappt nicht bei mir Datenbankprogrammierung 2
D Tabelle an Persistenzeinheit binden Datenbankprogrammierung 1
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
S gesamte Tabelle löschen Datenbankprogrammierung 2
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
Kirby.exe Eine Tabelle updaten Datenbankprogrammierung 16
L SQL Tabelle Datenbankprogrammierung 11
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
P Derby/JavaDB Datenbanktabelle erweitern, ohne Tabelle zu ändern Datenbankprogrammierung 6
S FilterSearch Tabelle Datenbankprogrammierung 4
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
Thallius MySQL Tabelle splitten aber wie eine abfragen? Datenbankprogrammierung 10
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
RowdyN SQLite Einfache Abfrage mit temporäre Tabelle, die nur innerhalb der Abfrage gültig ist Datenbankprogrammierung 0
N Dynamische Tabelle Datenbankprogrammierung 84
T Zeitraum aus SQL-Tabelle Datenbankprogrammierung 3
V SQLite 2 Tabelle vergleichen und alle unterschiede rausgeben Datenbankprogrammierung 1
D UCanAccess / MS Access - Tabelle / Spalte vorhanden Datenbankprogrammierung 3
M MySQL wie Listen oder arras in Tabelle(n) schreiben Datenbankprogrammierung 10
Paul15 Tabelle vergleichen Datenbankprogrammierung 15
J Tabelle synchronisieren mit Datenbank Datenbankprogrammierung 7
E Wie kann man bestimmte Zeilen der Tabelle rot markieren? Datenbankprogrammierung 1
L Tabelle mit Inhalt füllen Datenbankprogrammierung 2
J Optimierung von Querys/ ausgegebene Tabelle mit in neue Anfrage einbinden Datenbankprogrammierung 2
M Derby/JavaDB Kleine DB mit Tabelle erweitern - Integrität - Alter-Table - Netbeans ... Datenbankprogrammierung 5
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
A MySQL Tabelle ID abfragen und Spalte ausgeben Datenbankprogrammierung 4
S Update Tabelle aus Textfeld Datenbankprogrammierung 2
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
E Nur der letzte Datensatz wird in Tabelle geschrieben Datenbankprogrammierung 4
B Nur 99% der Datensätze werden in Tabelle geschrieben Datenbankprogrammierung 2
Joew0815 Datenmerge große Tabelle Datenbankprogrammierung 16
R MySQL Blob aus DB auslesen und einer Tabelle ausgeben Datenbankprogrammierung 7
P Neue Tabelle dazugekommen Datenbankprogrammierung 1
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
J Normalisierung - Aufspaltung der Tabelle Datenbankprogrammierung 4
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
S Wie muss meine SQL Tabelle aufgebaut sein, um unendliche Attribute zu vermeiden Datenbankprogrammierung 2
R HSQLDB Tabelle in JTable übertragen Datenbankprogrammierung 3
S MySQL Einfügen in Tabelle nur von Programm zulassen Datenbankprogrammierung 7
S Oracle Database 11g , eclipse , Tabelle erstellen Datenbankprogrammierung 2
L MySQL Uhrzeit-Format innerhalb einer Tabelle Datenbankprogrammierung 8
E Abfrage nach existierender SQL-Tabelle Datenbankprogrammierung 7
M Designfrage zu Rows die sich auf einen Datensatz derselben Tabelle beziehen Datenbankprogrammierung 7
N Temporäre tabelle MySQL Datenbankprogrammierung 2
X MySQL Hibernate: Massenupdate auf unbekannte Tabelle Datenbankprogrammierung 4
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Rudolf MySQL MySQL Tabelle mit Fremdschlüsseln in JTable darstellen Datenbankprogrammierung 5
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
D JPA (Hibernate) : Tabelle zweimal joinen Datenbankprogrammierung 4
G Oracle Hibernate M:N-Beziehung mit nur einer vorhandenen Tabelle Datenbankprogrammierung 5
N [XLS]Strings in Excel-Tabelle schreiben (poi) Datenbankprogrammierung 2
M DB View in Tabelle konvertieren in DB2? Datenbankprogrammierung 2
N Einzelne Spalte in MySQL-DB-Tabelle schreiben Datenbankprogrammierung 7
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
H MySQL Tabelle "Table" programmieren Datenbankprogrammierung 2
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
I Tabelle mit "|" getrennten Werten -> einzelnen Wert davon abfragen Datenbankprogrammierung 15
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
A Wie Tabelle auf bestimmten Inhalt überprüfen? Datenbankprogrammierung 7
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
Y Tabelle (elegant) importieren Datenbankprogrammierung 4
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
T Update an SQL Tabelle ?! Datenbankprogrammierung 10
F Baumstruktur erstellen und Art Tabelle festhalten!? Datenbankprogrammierung 13
S JPA: Objekt in Tabelle mit Composite Keys mappen (Embeddable Annotation) Datenbankprogrammierung 2
A Tabelle aktuell halten Datenbankprogrammierung 5
trash SQL, ganze Tabelle abfragen Datenbankprogrammierung 3
F HSQLDB HSQLDB lässt mich nicht auf erstellte Tabelle zugreifen Datenbankprogrammierung 12
Airwolf89 Spaltennamen einer Tabelle zurückgeben lassen Datenbankprogrammierung 9
J Ausgewählte Datensätze in DB-Tabelle schreiben Datenbankprogrammierung 13
J zufällige Auswahl aus einer Tabelle Datenbankprogrammierung 4
O eine Tabelle hat mehrere PrimKey mit dem selben Wert Datenbankprogrammierung 9
M Ausgabe in Tabelle der MySQL-Datenbank mit Java Datenbankprogrammierung 4
J Tabelle auslesen- knifflig Datenbankprogrammierung 7
Z [ORACLE] Ausgabe Tabelle im GUI Datenbankprogrammierung 4
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
R Tabelle Updaten aber auch Speichern Datenbankprogrammierung 2
D MySql Tabelle mit MySQLAdministrator (Anfänger) Datenbankprogrammierung 5
M Spaltennamen einer MS Access Tabelle ermitteln Datenbankprogrammierung 3
B Suche Query um genau einen Wert einer def. Gruppe aus einer Tabelle zu erhalten. Datenbankprogrammierung 2
C Prüfen, ob eine MySQL-Tabelle bereits existiert Datenbankprogrammierung 7
M Tabelle in Access Datei mit JDBC generieren Datenbankprogrammierung 3
G DB Modellierung mit variablen Attributen in der Tabelle Datenbankprogrammierung 4
S Datenbank-Tabelle in SWING/AWT ausgeben Datenbankprogrammierung 28
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
B Doppelte Zeilen einer Doppelten Spalte aus einer Tabelle entfernen. Datenbankprogrammierung 2
V Delete From Tabelle, ohne vorher die Tabelle zu kennen Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben