Applets und Java Programm

Maik20

Erfahrenes Mitglied
Ich grübel gerade über eine Möglichkeit wie ein Applet ein Java-Programm als separaten Prozess starten kann. Das beenden des Applets darf nicht dazu führen, dass das Java Programm terminiert wird.

Das Applet muss signiert sein und ich würde das Java Programm als JAR im archive Tag des Applets mit angeben, aber wie bekomme ich dann zugriff vom Applet um es quasi als separaten Prozess zu starten.

Jemand eine Idee?

Einen Aufruf über Runtime.exec() halte ich für schwierig. Erstens weiß ich nicht in welchem Ordner meine Archivdateien (JARs) liegen und zweitens kann ich mir vorstellen das diese nicht den gleichen Namen tragen.
 
Moin,

Finde die Idee irgendwie irrsinnig.
Du müsstest halt eine neue VM starten, da die alte (des Browsers) ja mit dessen Schließung beendet wird.

Spricht etwas dagegen, gleich mit WebStart zu arbeiten oder ist das Applet ein Muss?

Gruß,
Xan
 
Das Applet ist ein muss.

Bei den Applet handelt es sich um eine GUI, das Java-Programm ist die eigentliche Backend-Software. Das Applet prüft ob das Java-Programm gestartet wurde wenn nicht soll das Applet den Start vornehmen.

Das Backendprogramm ist ohne GUI konzipiert, der Status kann eben nur über ein anderes Programm abgefragt werden. Wir haben uns hier für unser Intranet eben für ein Applet entschieden. Und dem Nutzer zwei Programme (Applet + Java y mittels WebStart) starten zu lassen halte ich für nicht Nutzerfreundlich.

Es sei denn ich kann mittels WebStart ein Programm ebenso automatisch z.B. beim laden einer bestimmten Seite starten. Aber meines wissens muss der Nutzer hier aktiv auf den Link klicken. Habe aber mit WebStart noch nicht gearbeitet.
 
Hi Ho,
wie Xandroverstehe ich die Motivation ebensoweinig ein Applet zu benutzen um eine Javaprogramm zu starten. Geht das nicht eigetnlich an einer Applet-Philosophiie vorbei? Denn so ohne weitres darf ein Applet keine weiteren Programme starten, meines wissens, es sei denn man gibt entsprechende Rechte (Stichwort: SecurityManager).
Was macht das Backend eigetnlich genau? Wäre es nicht vielleicht sinniger das Backend auf einen Server zu verlagern?
 
Ok, dann muss ich etwas ausholen.

Das Backendprogramm führt Berechnungen durch, welche recht umfangreich sind und unter umständen Tage dauern kann. Ein Applet hingegen läuft nur solange die Internetseite geöffnet ist, daher fällt das Applet (als Backend) aus. Das Backend auf einen Server zu übertragen bringt nichts, da so nicht hunderte Clients an der Berechnung mitwirken können.

Also warum überhaupt das Applet, das Applet ließt die Ergebnisse vom Server aus und stellt den Fortschritt der Berechnungen (aller Backendclients) dar. Da ich sowieso das Applet brauche um die Ergebnisse / Fortschritte für den Nutzer darzustellen, kann ich auch gleich das Backendprogramm über das Applet starten (notwendige Rechte / signatur) vorrausgesetzt.

Vorteil, der Nutzer braucht keine separate Installation des Programms, das Programm läuft weiter wenn die Webseite geschlossen wird.
 
Ok, dann muss ich etwas ausholen.

Das Backendprogramm führt Berechnungen durch, welche recht umfangreich sind und unter umständen Tage dauern kann. Ein Applet hingegen läuft nur solange die Internetseite geöffnet ist, daher fällt das Applet (als Backend) aus. Das Backend auf einen Server zu übertragen bringt nichts, da so nicht hunderte Clients an der Berechnung mitwirken können.
Hast Du sowas wie im Seti-Home vor? Die Berechnungen der Clients, wie werden diese ausgewertet? Musst Du sie nicht dann auch irgendiwie zur zusammenfassung zu einem Server senden?
Also warum überhaupt das Applet, das Applet ließt die Ergebnisse vom Server aus und stellt den Fortschritt der Berechnungen (aller Backendclients) dar. Da ich sowieso das Applet brauche um die Ergebnisse / Fortschritte für den Nutzer darzustellen, kann ich auch gleich das Backendprogramm über das Applet starten (notwendige Rechte / signatur) vorrausgesetzt.
Ich bin mit Applets und Rechtevergabe nicht so vertraut, aber muss dann nicht jeder Nutzer bei sich irgendwas einstellen?
Vorteil, der Nutzer braucht keine separate Installation des Programms, das Programm läuft weiter wenn die Webseite geschlossen wird.
Das gleiche bekämst Du auch bei einer Webstartanwendung, nur dass Du nicht umständlich einen Mechanismus bauen musst, um mittels Applet ein Programm zu installieren.
AFAIK musst Du die Bibliotheken Deines Backend-Programmes vom Applet auf den entsprechendne Client übertragen, sonst könntest Du es vermute ich mal nicht starten. Und auch für das Starten eines Programmes braucht Dein Applet spezielle Berechtigung. Besser wäre hier wirklich Web-Start, da Du hier eben diesen Mechanismus der Bibliothekeninstallation inklusive Startmechanismus nicht erst noch erbauen musst.

Wenn Du dann Informationen vom Server lesen willst, oder der Server diese Informationen senden soll, damit der Client-Rechner arbeiten kann, und falls Du dann die Ergebnisse wieder zusammenführen willst, bietet sich Meiner Meinung nach ein virtuelles Netzwerk an, (JXTA). Man könnte natürlich auch mit SOAP arbeiten, es geht von Haus aus über HTTP (Port 80) ist aber dann auch lediglich Request/Response fähig. Techniken, in denen die Clients direkt auf einer DB lesen oder schreiben würde ich von abraten wollen, da damit die Sicherheit nicht gewährleistet werden kann, denn stünde der DB-Server vermutlich zu offen und es könnte theoretisch alle Welt abfragen und manipulationen mit gesendeten SQL durchführen.

Mal noch 'ne andere Frage, verstehe ich es richtig, dass Du für Deine Berechnungen Arbeitspakete für dei Clientrechner schnüren musst, bzw ein koordinierter Teil?
 
Hast Du sowas wie im Seti-Home vor? Die Berechnungen der Clients, wie werden diese ausgewertet? Musst Du sie nicht dann auch irgendiwie zur zusammenfassung zu einem Server senden?

Ja es geht zumindest in die Rechnung einer Verteilten Rechenanwendung. Die Ergebnisse werden durch den Backendclient mittels RMI übertragen.

Ich bin mit Applets und Rechtevergabe nicht so vertraut, aber muss dann nicht jeder Nutzer bei sich irgendwas einstellen?

Das Applet muss vom Entwickler (mir) signiert sein und der Anwender muss dieses Signierte Applet akzeptieren. Sobald er die Seite lädt kommt automatisch ein Hinweis.

Das gleiche bekämst Du auch bei einer Webstartanwendung, nur dass Du nicht umständlich einen Mechanismus bauen musst, um mittels Applet ein Programm zu installieren.

Aber dann habe ich ja wieder zwei startet. 1. Der Nutzer muss das Applet starten, 2. Der Nutzer drückt auf WebStart für die Anwendung. Das wollte ich eigentlich vermeiden.
Das es mit WebStart funktioniert ist mir klar nur wie gesagt wollte ich diesen 2. manuellen Schritt eben vermeiden.


Mal noch 'ne andere Frage, verstehe ich es richtig, dass Du für Deine Berechnungen Arbeitspakete für dei Clientrechner schnüren musst, bzw ein koordinierter Teil?

Ja das ist richtig. Am einfachsten kannst du dir das wie folgt vorstellen:

((3 + 2) * 7) + (8 - 9)
Client A = 3 + 2
Client B = 8 - 9
und irgendeiner rechnet alles zusammen.

Ist zugegeben ein sehr sehr einfaches Beispiel und eine Verteilte Anwendung macht bei der Formel keinen Sinn ;-)
 
Die Ergebnisse werden durch den Backendclient mittels RMI übertragen.
RMI ... wenn Du einen Rechnerverbund nicht im LAN sondern im Internet planst, wirst Du IMHO viel Spaß (Aufwand) mit Firewalls/Routern etc bekommen können.
Um sowas zu umgehen, würde ich entweder auf Protokolle wie SOAP oder auf JXTA ausweichen. Vermute mal das SOAP sogar angemessen wäre, da ein Client gleich am Start den Server auf ein Arbeitspaket anfragen könnte. Also Request/Response-Technik reicht da sicher aus. (sorry ich wiederhole mich)
Erzähl mal wenn Du fertig bist, ob es ohne oder mit (welchen) Schwierigkeiten bezüglich Firewall/Router etc. mittels RMI ging.
Aber dann habe ich ja wieder zwei startet. 1. Der Nutzer muss das Applet starten, 2. Der Nutzer drückt auf WebStart für die Anwendung. Das wollte ich eigentlich vermeiden.
Das es mit WebStart funktioniert ist mir klar nur wie gesagt wollte ich diesen 2. manuellen Schritt eben vermeiden.
Ich würde bei Möglichkeit kein Applett verwenden, sondern stattdessen nur eine Web-Start-Anwendung. Denn wenn Du die SEite erneut aufrufst, musst Du sicherstellen, dass dass Applet nicht erneut dein Backendprogrammstartet ;-)
Solchen Zusätzlichekeiten würde ich echt aus dem Weg gehen wollen.
 
Da es im LAN läuft sollte es keine Probleme mit Firewalls geben.

Ich sagte ja auch nicht das es einfach ist ;-)
 
Zurück