Hallo zusammen,
ich möchte eine Software (mit Java) entwickeln, die es ermöglicht, verschiedenste Geräte über Netzwerk zu steuern und zu überwachen.
Die Steuerung soll dabei so allgemein gehalten werden, dass jeder Zeit neue Gerätetypen hinzugefügt werden können, ohne dass die Applikation neugestartet geschweige denn verändert werden muss.
Hierzu habe ich mir folgende Architektur überlegt:
= Agenten =
* Jedes Gerät wird durch einen "Agenten" repräsentiert, welcher durch ein einheitliches Agenten-Interface beschrieben ist.
* Je nach den Funktionen des Gerätes bietet der Agent entsprechende Funktionen an
* Jeder Agent hat eine eigene IP-Adresse
= Server =
* Ein Server verwaltet die Agenten (und damit die Geräte) und ihre Funktionen
* Zur Laufzeit können damit Agenten eingebunden werden und ihre Funktionen dem Client zur Verfügung gestellt werden
= Webserver =
* Der Webserver stellt die GUI zur Verfügung
* Zu jedem Agenten-Typ, gibt es eine GUI,
* falls keine GUI existiert, so wird eine Liste der Funktionen ausgegeben
= Client =
* Der Client ist entweder ein Browser (Zugriff auf Webserver) oder
* Ein Komandozeilenprogramm (Zugriff direkt auf Server oder Agent)
Also nochmals anders an einem Beispiel ausgedrückt:
Ein Sensor kommuniziert z.B. über RS232 mit einem miniPC, auf dem ein Agent (und eine JVM) läuft.
Der Agent stellt z.B. die Funktionen "getActualValue()", "getMaxValue()", ..., "setConfig(String cfg)" zur Verfügung.
Der Server stellt eine TCP-Verbindung zum Agenten her und holt sich mit "getFunctions()" die möglichen Funktionen.
Diese Funktionen werden mit dem Webserver (zB. Tomcat & Spring) den jeweiligen GUI-Elementen zugeordnet. Ein Graph greift zB. zur Aufzeichnung des Verlaufs alle 2 Sekunden auf die Funktion "getActualValue()" zurück.
Mit dem Browser können dann die Sensorwerte einem User zugänglich gemacht werden.
Ich hoffe es ist zumindest prinzipiell mein Vorhaben klar geworden.
Meine Fragen:
- Sind diese Überlegungen Zukunftsfähig? Oder auch ander gefragt: Habe ich mir da nur Blödsinn überlegt?
- Gibt es alternative Architekturen, die ähnlich flexibel sind?
- Wie kann ich die Funktionen der Agenten (die ja unterschiedlich sind und zur Zeit der Entwicklung nicht bekannt sind) dynamisch bereitstellen und entsprechend aufrufen?
- Inwieweit können RMI, CORBA, o.ä zur Umsetzung dazu beitragen?
Über ausführliche Antworten, Ideen und Kritik würde ich mich freuen.
ich möchte eine Software (mit Java) entwickeln, die es ermöglicht, verschiedenste Geräte über Netzwerk zu steuern und zu überwachen.
Die Steuerung soll dabei so allgemein gehalten werden, dass jeder Zeit neue Gerätetypen hinzugefügt werden können, ohne dass die Applikation neugestartet geschweige denn verändert werden muss.
Hierzu habe ich mir folgende Architektur überlegt:
= Agenten =
* Jedes Gerät wird durch einen "Agenten" repräsentiert, welcher durch ein einheitliches Agenten-Interface beschrieben ist.
* Je nach den Funktionen des Gerätes bietet der Agent entsprechende Funktionen an
* Jeder Agent hat eine eigene IP-Adresse
= Server =
* Ein Server verwaltet die Agenten (und damit die Geräte) und ihre Funktionen
* Zur Laufzeit können damit Agenten eingebunden werden und ihre Funktionen dem Client zur Verfügung gestellt werden
= Webserver =
* Der Webserver stellt die GUI zur Verfügung
* Zu jedem Agenten-Typ, gibt es eine GUI,
* falls keine GUI existiert, so wird eine Liste der Funktionen ausgegeben
= Client =
* Der Client ist entweder ein Browser (Zugriff auf Webserver) oder
* Ein Komandozeilenprogramm (Zugriff direkt auf Server oder Agent)
Also nochmals anders an einem Beispiel ausgedrückt:
Ein Sensor kommuniziert z.B. über RS232 mit einem miniPC, auf dem ein Agent (und eine JVM) läuft.
Der Agent stellt z.B. die Funktionen "getActualValue()", "getMaxValue()", ..., "setConfig(String cfg)" zur Verfügung.
Der Server stellt eine TCP-Verbindung zum Agenten her und holt sich mit "getFunctions()" die möglichen Funktionen.
Diese Funktionen werden mit dem Webserver (zB. Tomcat & Spring) den jeweiligen GUI-Elementen zugeordnet. Ein Graph greift zB. zur Aufzeichnung des Verlaufs alle 2 Sekunden auf die Funktion "getActualValue()" zurück.
Mit dem Browser können dann die Sensorwerte einem User zugänglich gemacht werden.
Ich hoffe es ist zumindest prinzipiell mein Vorhaben klar geworden.
Meine Fragen:
- Sind diese Überlegungen Zukunftsfähig? Oder auch ander gefragt: Habe ich mir da nur Blödsinn überlegt?
- Gibt es alternative Architekturen, die ähnlich flexibel sind?
- Wie kann ich die Funktionen der Agenten (die ja unterschiedlich sind und zur Zeit der Entwicklung nicht bekannt sind) dynamisch bereitstellen und entsprechend aufrufen?
- Inwieweit können RMI, CORBA, o.ä zur Umsetzung dazu beitragen?
Über ausführliche Antworten, Ideen und Kritik würde ich mich freuen.