Hallo,
ich bin neu bei Java und habe aber eine recht konkrete Vorstellung von einer umfangreichen Applikation und versuche Java nun damit direkt praktisch anzuwenden, um zu lernen.
Ich würde gerne Meinungen und alternative Ansätze einholen, bevor ich in die völlig falsche Richtung programmiere. Ich mache das Ganze "Learning bei doing" und kann mich dabei vor hangeln. Wenn ich allerdings eine total doofe Struktur überlegt habe und auf halben Wege feststelle, dass das alles so nicht sinnvoll ist, ist alles "Für die Katz" und aus Erfahrung in anderen Sprachen weiß ich: Nichts ist schlimmer, wie ein kompletter Strategiewechsel bei einer bestehenden Software. Ich würde also gerne im Vorfeld wissen, ob mein Denkansatz sinnvoll ist, oder ob es deutlich sinnvollere Wege gibt.
Hintergrund ist, dass ich ein Projekt mit ganz verschiedenen Steuerungsaufgaben auf mehreren Raspberrys gleichzeitig laufen lassen will, die örtlich verteilt in einem Netzwerk sind. Ferner möchte ich, das die Raspberrys austauschbar sind, damit ich bei Ausfall einen Gerätes schnell und problemlos Ersatz schaffen kann. Ich hätte also beispielsweise ein fertiges Gerät mit einem genormten Schnittstellenstecker liegen und muss den Raspberry nur anstöpseln und mit einem bestimmten Startparameter starten, um eine gänzlich andere Funktion zu generieren, ihn also als Gerät 1, 2 oder 6 laufen zu lassen.
Der Ansatz ist also, dass auf allen Geräte sozusagen das selbe Package installiert ist und ich eben durch eine Parameterübergabe beim Start definiere, welche Aufgaben das Gerät übernimmt.
Dazu laufen auf den Raspberrys dann unterschiedliche Module (Klassen) die eben abhängig von der jeweiligen Aufgabenstellung gestartet werden sollen.
Meine Idee ist es also, zunächst ein Modul (Hauptklasse) zu starten, das eine Verbindung zu einem SQL Server herstellt. Dort gibt es eine Tabelle "Module", wo die zu dieser Konfiguration passenden Module(Klassen) mit Startparametern und anderen Informationen gespeichert sind. Ich lese das erste Modul ein und starte es mit Parameter. Dann das zweite und so weiter. Also im Grunde ein normaler Methodenaufruf. Dazu müsste ich natürlich meinen Methodenaufruf, zum Beispiel:
aus der Tabelle holen und ausführen. Den Vorteil den ich sehe ist, dass die Startklasse damit universell ist und ich bei neuen Modulen nur Einträge in die Tabelle machen muss, bzw. die passenden Module zu der Konfiguration durch Query auf dem SQL-Server ermitteln kann.
Die Frage ist. Geht sowas überhaupt?
Des weiteren sollen Steuerungsaufgaben als Jobs aus einer anderen Tabelle auf dem SQL Server kommen. Das heißt Akteure, zum Beispiel eine GUI, die irgendwo läuft, oder eine Klasse die E-Mails empfängt, aber auch Eingänge die auf dem Raspberry getriggert werden, sollen über entsprechende Klassen Jobs erzeugen, die in eine gemeinsame Tabelle "abgeworfen" werden und die jeweiligen zuständigen Module z.B. das GPIO Modul auf Rasperry 3 holt sich den für ihn relevanten Job und führt ihn aus.
Meine Idee ist das neben der Anfangs beschriebenen Start Klasse eine, ich nenne sie mal, Job Manager Klasse läuft, die sozusagen die Anforderung entgegennimmt, die Syntax prüft, auf Ausführbarkeit prüft, auf Rechte prüft und dann einen Job in die Tabelle auf dem SQL Server schreibt.
Die jeweilig zuständige Klasse müsste dann auf neue Einträge für sich lauschen und dann den Job ausführen. Damit wäre ich programmiertechnisch total flexibel. Wenn ich beispielsweise ein Gerät schalten möchte, das an einem Relais an einen GPIO an Raspberry 3 hängt und von der Klasse GPIO gesteuert wird, ist es dann unerheblich, ob ich das Gerät per Schalter an IO Pins, per E-Mail, per SMS, per GUI oder Sheduler starte. Die jeweilige Klasse erzeugt über den Job Manager dann einfach nur einen Job in der Job Tabelle, die von der jeweiligen Klasse dann ausgeführt wird.
Dazu die Frage:
Ist es sinnvoll in jeder Klasse permanent nach neuen Jobs auf dem SQL Server zu suchen oder gibt es auf einen MYSQL Server die Möglichkeit Events zu triggern, oder macht es Sinn eine Klasse zu haben, die nur nach neuen Aufträgen sucht und diese dann an die jeweilige Klasse per Event weitergibt?
Was sagen erfahrene Java Programmierer dazu? Ist diese Gesamt Idee nachvollziehbar, im Grunde ok, kann man das besser lösen oder ist das totaler Unfug?
Wäre sehr an Eurer Meinung interessiert.
Vielen Dank im Voraus
Ralf
ich bin neu bei Java und habe aber eine recht konkrete Vorstellung von einer umfangreichen Applikation und versuche Java nun damit direkt praktisch anzuwenden, um zu lernen.
Ich würde gerne Meinungen und alternative Ansätze einholen, bevor ich in die völlig falsche Richtung programmiere. Ich mache das Ganze "Learning bei doing" und kann mich dabei vor hangeln. Wenn ich allerdings eine total doofe Struktur überlegt habe und auf halben Wege feststelle, dass das alles so nicht sinnvoll ist, ist alles "Für die Katz" und aus Erfahrung in anderen Sprachen weiß ich: Nichts ist schlimmer, wie ein kompletter Strategiewechsel bei einer bestehenden Software. Ich würde also gerne im Vorfeld wissen, ob mein Denkansatz sinnvoll ist, oder ob es deutlich sinnvollere Wege gibt.
Hintergrund ist, dass ich ein Projekt mit ganz verschiedenen Steuerungsaufgaben auf mehreren Raspberrys gleichzeitig laufen lassen will, die örtlich verteilt in einem Netzwerk sind. Ferner möchte ich, das die Raspberrys austauschbar sind, damit ich bei Ausfall einen Gerätes schnell und problemlos Ersatz schaffen kann. Ich hätte also beispielsweise ein fertiges Gerät mit einem genormten Schnittstellenstecker liegen und muss den Raspberry nur anstöpseln und mit einem bestimmten Startparameter starten, um eine gänzlich andere Funktion zu generieren, ihn also als Gerät 1, 2 oder 6 laufen zu lassen.
Der Ansatz ist also, dass auf allen Geräte sozusagen das selbe Package installiert ist und ich eben durch eine Parameterübergabe beim Start definiere, welche Aufgaben das Gerät übernimmt.
Dazu laufen auf den Raspberrys dann unterschiedliche Module (Klassen) die eben abhängig von der jeweiligen Aufgabenstellung gestartet werden sollen.
Meine Idee ist es also, zunächst ein Modul (Hauptklasse) zu starten, das eine Verbindung zu einem SQL Server herstellt. Dort gibt es eine Tabelle "Module", wo die zu dieser Konfiguration passenden Module(Klassen) mit Startparametern und anderen Informationen gespeichert sind. Ich lese das erste Modul ein und starte es mit Parameter. Dann das zweite und so weiter. Also im Grunde ein normaler Methodenaufruf. Dazu müsste ich natürlich meinen Methodenaufruf, zum Beispiel:
Java:
SMS.start(String Parameter);
aus der Tabelle holen und ausführen. Den Vorteil den ich sehe ist, dass die Startklasse damit universell ist und ich bei neuen Modulen nur Einträge in die Tabelle machen muss, bzw. die passenden Module zu der Konfiguration durch Query auf dem SQL-Server ermitteln kann.
Die Frage ist. Geht sowas überhaupt?
Des weiteren sollen Steuerungsaufgaben als Jobs aus einer anderen Tabelle auf dem SQL Server kommen. Das heißt Akteure, zum Beispiel eine GUI, die irgendwo läuft, oder eine Klasse die E-Mails empfängt, aber auch Eingänge die auf dem Raspberry getriggert werden, sollen über entsprechende Klassen Jobs erzeugen, die in eine gemeinsame Tabelle "abgeworfen" werden und die jeweiligen zuständigen Module z.B. das GPIO Modul auf Rasperry 3 holt sich den für ihn relevanten Job und führt ihn aus.
Meine Idee ist das neben der Anfangs beschriebenen Start Klasse eine, ich nenne sie mal, Job Manager Klasse läuft, die sozusagen die Anforderung entgegennimmt, die Syntax prüft, auf Ausführbarkeit prüft, auf Rechte prüft und dann einen Job in die Tabelle auf dem SQL Server schreibt.
Die jeweilig zuständige Klasse müsste dann auf neue Einträge für sich lauschen und dann den Job ausführen. Damit wäre ich programmiertechnisch total flexibel. Wenn ich beispielsweise ein Gerät schalten möchte, das an einem Relais an einen GPIO an Raspberry 3 hängt und von der Klasse GPIO gesteuert wird, ist es dann unerheblich, ob ich das Gerät per Schalter an IO Pins, per E-Mail, per SMS, per GUI oder Sheduler starte. Die jeweilige Klasse erzeugt über den Job Manager dann einfach nur einen Job in der Job Tabelle, die von der jeweiligen Klasse dann ausgeführt wird.
Dazu die Frage:
Ist es sinnvoll in jeder Klasse permanent nach neuen Jobs auf dem SQL Server zu suchen oder gibt es auf einen MYSQL Server die Möglichkeit Events zu triggern, oder macht es Sinn eine Klasse zu haben, die nur nach neuen Aufträgen sucht und diese dann an die jeweilige Klasse per Event weitergibt?
Was sagen erfahrene Java Programmierer dazu? Ist diese Gesamt Idee nachvollziehbar, im Grunde ok, kann man das besser lösen oder ist das totaler Unfug?
Wäre sehr an Eurer Meinung interessiert.
Vielen Dank im Voraus
Ralf