ubuntuusers.de

Pellet-Dig-Server aus Java-Programm starten

Status: Gelöst | Ubuntu-Version: Ubuntu 9.04 (Jaunty Jackalope)
Antworten |

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Hat denn der Server keine ordentliche Methode beendet zu werden? Wie wird er denn beendet, wenn er nicht in einem Javathread gestartet wird?

Manchmal ist es ja etwas rabiat den Prozess zu beenden, aber das wäre mein zweiter Weg, wenn der erste versperrt ist - ist der Prozess beendet, dann müßte auch der Port wieder frei sein.

Arubeto

(Themenstarter)

Anmeldungsdatum:
4. Dezember 2007

Beiträge: 384

Leider ist die Pellet-Api so gut wie gar nicht kommentiert. Ich habe noch keine Funktion gefunden, mit der ich den Server wieder stoppen könnte.

Wenn ich den Server nicht aus dem Java-Programm sondern direkt über das Skript starte, öffnet sich eine Kommandozeile, die angibt, dass Pellet gestartet wurde und jetzt läuft. Um den Server zu beenden, habe ich bisher einfach primitiv das Konsolenfenster geschlossen. Da ich jetzt aber kein solches Extra-Fenster habe, fällt diese simple Methode weg.

Nochmal eine dumme Frage hinterher: wie beende ich denn den Prozess? Ich habe von Prozessen und Threads leider keine richtige Ahnung...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Ich würde sagen, das hängt davon ab, wie Du sie gestartet hast.

Normalerweise startet man unter linux server im init-System mit

/etc/init.d/xyd start  

und beendet mit

/etc/init.d/xyd stop  

Man kann auch das Programm mit Strg + C abbrechen, wenn es nicht im Hintergrund gestartet wird, oder man schaut mit ps nach der pid, und killt es mit pkill.

Unter java hinge es davon ab, ob das startende Programm weiterlaufen soll, oder om man das mitabschießen kann, darf, will.

Arubeto

(Themenstarter)

Anmeldungsdatum:
4. Dezember 2007

Beiträge: 384

user unknown schrieb:

Unter java hinge es davon ab, ob das startende Programm weiterlaufen soll, oder om man das mitabschießen kann, darf, will.

Hm, also eigentlich soll der Server erst beendet werden, wenn auch das aufrufende Programm beendet wird. Solange darf er bei uns weiterlaufen. Kannst Du mir sagen, wie man das Betriebssystem unabhängig machen würde?

Vielen Dank schonmal für die ganze Hilfe!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Also nach 4 Tagen muß ich mich wieder einlesen, worum es überhaupt ging, was der letzte Stand war.

Das ist nicht optimal. Jetzt habe ich alles nochmal gelesen, und komme zu folgendem Schluß: Du bist in irgendeiner Firma an das Problem gesetzt worden, aber hast selbst noch kaum Erfahrung mit Java, und auch nicht mit der Linux- oder Windowsshell?

Was ist eigentlich ein Pelletserver? Ist das für eine Pelletheizung eine Steuerung? Eher nicht. Aber OWL-DL sagt mir auch nix. Es ist OpenSource, aber die Dokumentation lausig, so daß man kostenpflichtigen Support ordern muß.

Das sollst Du jetzt günstiger liefern, und Du versuchst uns dazu zu bringen, es zu tun.

Aber ich müßte mir jetzt erstmal selbst diesen Pelletserver runterladen und installieren - ohne zu wissen wozu der überhaupt gut ist.

Hm, also eigentlich soll der Server erst beendet werden, wenn auch das aufrufende Programm beendet wird. Solange darf er bei uns weiterlaufen. Kannst Du mir sagen, wie man das Betriebssystem unabhängig machen würde?

Das kann ich noch sagen: Wenn Du den Server nicht als Dämon startest, dann wird er automatisch beendet, wenn das aufrufende Programm beendet wird. Betriebssystemunabhängig.

Arubeto

(Themenstarter)

Anmeldungsdatum:
4. Dezember 2007

Beiträge: 384

Nein, ich möchte nicht, dass Ihr die Arbeit für mich macht. Wirklich nicht. Und das Starten (und hoffentlich Beenden) des Pellet-Servers ist nur ein winziger Teil des Projektes. Ich habe tatsächlich bei komplexeren Java-Entwicklungen wenig Erfahrung, und mit Linux arbeite ich auch erst seit ca. 1,5 Jahren. Deswegen muss ich hier auch noch so häufig nachfragen. Es tut mir leid, wenn das jetzt so rüberkam, als wollte ich meine Arbeit von anderen machen lassen.

OWL ist die Abkürzung für "Web Ontology Language" (der Grund für das Kürzel "OWL" statt "WOL" hat geschichtliche Gründe) und ein bestimmter XML-Dialekt zum Erstellen von Wissensbasen durch Beschreibungslogiken. OWL-DL (DL steht für Description Logic - also Beschreibungslogik) ist eine Ausprägung von OWL, die sich von den beiden anderen Ausprägungen OWL-Lite und OWL-Full durch ihre Ausdrucksmächtigkeit unterscheidet. Wir nutzen OWL-DL, da wir mehr Konstrukte als in OWL-Lite brauchen (nämlich z.B. verschiedene Quantoren), nicht jedoch OWL-Full, da dieses unentscheidbar ist und für unseren praktischen Anwendungsfall daher unbrauchbar.

Entschuldigung nochmals für Vermittlung des Eindrucks, ich wollte hier meine Arbeit von anderen Leuten machen lassen. Das war nicht meine Absicht. Aber vielen Dank für die Hinweise, die Du mir gegeben hast, das hat mir viel geholfen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Hat es das? Es tut mir schon wieder leid, daß ich unwirsch wurde, aber nach 4 Tagen nochmal so einen Thread zu lesen, und nicht von Anfang an zu wissen, was für Fähigkeiten Du hast und welche nicht - Du beschreibst den Server am Anfang so, als ob hier jeder fünfte so ein Ding in Betrieb hätte, dabei ist das eine recht exotische Sache, die hier wahrscheinlich niemand sonst nutzt. Das wirkte irgendwie schief - auf der einen Seite komplexe Software, Ontologie, aber zum ersten Mal eine Bat-Datei von innen sehen.

Arubeto

(Themenstarter)

Anmeldungsdatum:
4. Dezember 2007

Beiträge: 384

Ja, stimmt. Ich schäme mich auch ein wenig dafür, in vielen wirklich grundlegenden Fragen wenig Ahnung zu haben. Leider habe ich bis jetzt hauptsächlich theoretische Informatik-Kenntnisse. Meine Praxis-Erfahrungen lassen noch sehr zu wünschen übrig. Aber dieses Problem versuche ich derzeit zu beheben. Auf jeden Fall läuft der Pellet-Server jetzt und unsere Ontologie-Verwaltung kann ihn zur Klassifizierung beschreibungslogischer Konzepte und Rollen nutzen. Daher hat mir das auf jeden Fall viel geholfen.

Danke.

adun Team-Icon

Avatar von adun

Anmeldungsdatum:
29. März 2005

Beiträge: 8606

Das Schließen des Fenster entspricht einem SIGTERM/SIGKILL, ich kenne mich mit Java nun gar nicht aus, könnt ihr ihm nicht einfach ein Signal schicken oder gleich den Thread mit ner interrupt Methode abschießen? (scheint ja nicht so schlimm zu sein)

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Er beendet den Server, in dem er das startende Programm beendet, das scheint ja jetzt zu klappen, und das Programm kann man wie alle Javaprogramme beenden - da muß man nicht das Fenster für schließen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

In einem anderen Zusammenhang habe ich jetzt gemerkt, daß meine Erinnerung mich trog. Nicht, wenn der Service als normaler Thread lief, sondern wenn er als Daemon lief, wird er beim Beenden automatisch mitbeendet:

$JAVA_HOME/docs/api/java/lang/Thread.html schrieb:

When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:

  • The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.

  • All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.

oder besser dies:

public final void setDaemon(boolean on)

Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads.

This method must be called before the thread is started.

Ich habe das länger nicht mehr benutzt, und bin jetzt selbst etwas konfus geworden. Wenn alle laufenden Threads - bei Dir sind es ja nur 2, der, der den Pelletserver direkt startet, und der der Dämon sein soll, und der, der den Starter startet - der Hauptthread. Wenn der Hauptthread beendet wird, dann läuft ja nur noch der Dämon, und dann, so heißt es hier, beendet sich die JVM, und wenn sich die beendet, dann kann natürlich auch der Pelletthread, der Dämon nicht weiterlaufen, und wird dadurch mitbeendet.

Antworten |