Announcement

Collapse
No announcement yet.

System.exit() verhindern ???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • System.exit() verhindern ???

    Hallöchen,

    ich verwende in einer Container-basierten Applikation eine Komponente aus einer Fremd-Bibliothek in der unter bestimmten
    Umständen ein System.exit() aufgerufen wird. Dies ist aber unerwünscht, da ja dadurch die komplette VM inkl. Container
    "runtergerissen" wird.

    Gibt es eine Möglichkeit, das irgendwie zu verhindern oder abzufangen? Wie lösen denn z.B. Application-Server sowas?

    Viele Grüße,
    Vans

  • #2
    Die Nachricht ist zwar schon älter, aber vielleicht ist die Antwort ja noch interessant :-)

    Die Lösung ist ein Security-Manager, bzw. eine Permission zu setzen. Die API-Doku gibt darauf schon einen Hinweis:

    Throws SecurityException:
    en
    if a security manager exists and its checkExit method doesn't allow exit with the specified status.

    Ist ein Security-Manager installiert, wird er gefragt, ob exit() erlaubt ist. Da kann er natürlich durch eine SecurityException Nein sagen.

    Für Tomcat gibt es eine sehr schöne Anleitung unter http://tomcat.objektpark.org/pdf/04_04_tomcat_JM.pdf.

    Grüße

    Christian | http://www.tutego.com/

    Comment


    • #3
      Policyfile eingebunden, dennoch wird System.exit(0) ausgeführt

      Ahoi,

      hatte es nun eigentlich schon etwas länger, dachte ich... Nun versuche ich gerade mein Programm einfach mal mit einem System.exit(0) über einen geladenen Programmteil abzuschießen... und schwups, es war dennoch aus, obwohl ich nirgendwo die Permission gesetzt habe, dass es erlaubt ist.

      Meine Frage nun, muss ich noch irgendetwas in das Policyfile mit rein schreiben, damit ich es evtl doch noch geblockt bekomme? Weil ich finde da leider gerade nichts zu gefunden, nach mehreren Stunden suche ^^ Hoffe mir kann dabei jemand helfen.

      mfg Manny

      Comment


      • #4
        Zitat javadoc von java.lang.RuntimePermission zu "exitVM":

        Note: The "exitVM" permission is automatically granted to all code loaded from the application class path, thus enabling applications to terminate themselves.

        D.h. du musst es nicht explizit setzen. Das explizite Blocken über policy geht (leider) nicht.

        Kannst du noch etwas zu deinem Programm sagen (standalone java applikation?) und wie genau du Programmteile lädst?

        Comment


        • #5
          Ahoi, danke für die schnelle Antwort.

          Also ich lade das Programm in eine zweite VM, welche ich von Java aus starte. In der zweiten VM führe ich dann im Prinzip das ganze aus. Da es sich um ein Abgabesystem handelt, möchte ich natürlich nicht, dass die abgebenden das ganze mit System.exit() beenden, weil sonst ja die Ergebnisse usw verfälscht wären.

          mfg Manny

          Edit:
          Aber sieht dann wohl ganz danach aus, dass ich demjenigen nicht die System.exit rechte entziehen kann, außer ich überlade das System.exit direkt beim laden der VM oder ich gucke, ob schwachfug als Ergebnis rausgekommen ist, oder?
          Zuletzt editiert von WalhallaManny; 16.02.2010, 14:43.

          Comment


          • #6
            So spontan würden mir folgende Varianten einfallen:

            1) Du definierst einen eigenen SecurityManager (siehe java.lang.SecurityManager) und gibst dem beim Starten der 2. JVM an (-Djava.security.manager=MeineSecManagerKlasse). Dort kannst du dann die checkPermission()-Methode überschreiben. Google' mal nach "SecurityManager exitVM", da finden sich Beispiele.

            2) System.exit überladen ist kaum möglich, aber du könntest z.B. mit einem Aspekt die Aufrufe von "System.exit()" abfangen. Dann brauchst du aber noch zusätzlich ein Aspekt-Framework wie AspectJ oder Spring.

            Was ich nicht sofort beantworten kann ist, wie du jetzt unterscheiden kannst, wer die zweite JVM "wirklich" beenden darf und wer nicht.

            Comment


            • #7
              OK, danke dir für die Antworten, werde da mal weiter rumbasteln

              Comment

              Working...
              X