[NEWSboard IBMi Forum]
Seite 2 von 3 Erste 1 2 3 Letzte

Thema: JVM beenden

  1. #13
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.013
    Auch wenn man mir das hier nicht glauben mag, aber eine JVM kann man auf der iSeries nicht mehr manuell beenden. Früher ging das mit der Prozedur destroyJVM (siehe Ausschnitt aus ILE Programmers Guide V5R1). Aber in neueren Handbüchern ist das nicht mehr zu finden, weil es auch nicht mehr funktioniert.

    Welches Release hast Du denn?

    Gruß,
    KM


    Code:
    /*------------------------------------------------------*/
    /* destroyJVM */
    /*------------------------------------------------------*/
    P destroyJVM B EXPORT
    D destroyJVM PI N
    D rc S LIKE(jint)
    D rpgRc S N
    D jvm S * DIM(1)
    D env S *
    D bufLen S LIKE(jsize) INZ(%elem(jvm))
    D nVMs S LIKE(jsize)
    /free
    //----------------------------------------------------------------
    // See if there's a JVM started
    //----------------------------------------------------------------
    rc = JNI_GetCreatedJavaVMs (jvm : bufLen : nVMs);
    //----------------------------------------------------------------
    // If JVM is started, destroy it
    //----------------------------------------------------------------
    if (rc = 0
    and nVMs > 0);
    JavaVM_P = jvm(1);
    rc = DestroyJavaVM (jvm(1));
    endif;
    if (rc = 0);
    return *ON;
    else;
    return *OFF;
    endif;
    /end-free
    P destroyJVM E
    Figure 83. Source Code for destroyJVM

  2. #14
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn es denn ein Batchjob ist, mach einfach einen TFRJOB.
    Damit beendest du den Job und auch die JVM und startest halt einen neuen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #15
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    neuere Doku als V6R1 kenne ich nicht!
    IBM i information center

    @Robi: es bringt nix den Überbringer schlechter Nachrichten zu schelten. In dem vorherigen link steht ein RPG Beispiel für das beenden der JVM in dem link von KM steht noch ein weiterer Work around mit RRTJOB. Eines von beiden, oder gar beides sollte funzen.

    D*B

    Zitat Zitat von KM Beitrag anzeigen
    Auch wenn man mir das hier nicht glauben mag, aber eine JVM kann man auf der iSeries nicht mehr manuell beenden. Früher ging das mit der Prozedur destroyJVM (siehe Ausschnitt aus ILE Programmers Guide V5R1). Aber in neueren Handbüchern ist das nicht mehr zu finden, weil es auch nicht mehr funktioniert.

    Welches Release hast Du denn?

    Gruß,
    KM


    Code:
    /*------------------------------------------------------*/
    /* destroyJVM */
    /*------------------------------------------------------*/
    P destroyJVM B EXPORT
    D destroyJVM PI N
    D rc S LIKE(jint)
    D rpgRc S N
    D jvm S * DIM(1)
    D env S *
    D bufLen S LIKE(jsize) INZ(%elem(jvm))
    D nVMs S LIKE(jsize)
    /free
    //----------------------------------------------------------------
    // See if there's a JVM started
    //----------------------------------------------------------------
    rc = JNI_GetCreatedJavaVMs (jvm : bufLen : nVMs);
    //----------------------------------------------------------------
    // If JVM is started, destroy it
    //----------------------------------------------------------------
    if (rc = 0
    and nVMs > 0);
    JavaVM_P = jvm(1);
    rc = DestroyJavaVM (jvm(1));
    endif;
    if (rc = 0);
    return *ON;
    else;
    return *OFF;
    endif;
    /end-free
    P destroyJVM E
    Figure 83. Source Code for destroyJVM
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #16
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    @KM
    Danke für die Info, dort läuft V5R4

    @Fuerchau
    Ist teilweise versucht worden, macht andere Probleme


    Dank dieses Thred wird nun ein serverjob der via dataq bedient wird die Aufgabe übernehmen. Der wird nur zur Nacht beendet.

    dann sollte es gehen
    Danke an Alle
    Robi

  5. #17
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    @Dieter
    Sollte keine Schelte sein, nur ein verzweifelter Hilferuf.
    Das kleine Free-Programm aus dem o.a. Link hatte ich schon probiert.
    Es meldet erst das die JVM beendet ist und dann einen Haufen Fehler.
    Auf jeden Fall ging es nicht.
    Das destroy hab ich noch nicht probiert

    auch dir großen Dank
    Robi

  6. #18
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Weitere schlechte Nachrichten
    das mit dem destroy geht, wie von KM beschrieben, auch nicht.
    Und die Umstellung auf einen Server Job ist nicht möglich, das es in dem Pgm einen kleinen Dialog Teil gibt, der natürlich so nicht mehr funktioniert. Da der Dialog mit Dateien die vom Java erzeugt werden arbeitet, (Qtemp ) ist das auch nicht ohne weiteres zu trennen.
    Bleibt das Prob. die JVM 'ordentlich' zu beenden.

    Robi

  7. #19
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    nochmal ein paar Grundlegende Zusammenhänge zum Verständnis:
    - RPG verwendet für seine Java Einbindung das Java native Interface (JNI), das ist eine Java Standardschnittstelle für C Programme, die auch auf einer AS/400 wie auf jeder anderen Plattform funktioniert, wird das nicht so implementiert, gibt es keine Kaffeetasse.
    - JNI Anwendungen laufen (skizziert) wie folgt:
    -- erzeugen der Java VM mit JNI_CreateJavaVM, hier wird die JVM geladen und man bekommt ein array of pointer, mit dem man auf Funktionen der JVM zugreifen kann
    -- Aufruf von Java Funktionen über die erhaltenen Pointer
    -- beenden der JVM mit DestroyJavaVM (macht man das nicht, stirbt die VM spätestens bei Ende des Prozesses = Job)

    Bei der Verwendung von Java in RPG Programmen über die Unterstützung des Compilers macht man selber keinen JNI_CreateJavaVM (das versucht der Compiler implizit), mit einer Palette an Nebenwirkungen, man kann nicht steuern wie man die JVM gestartet haben will und man kann das beenden aus RPG nicht steuern (da man an die Pointerstruktur nicht drankommt!!!).

    Im vorliegenden Fall wird ein RPG Programm mit RCLACTGRP rausgefenstert, mit der Folge, dass die Werte der Pointer, die die Verbindung zur JVM darstellen futsch sind.

    Wird jetzt das RPG Programm aufgerufen, hat das Pointerfehler zur Folge, da die RPG Runtime den Connect zur noch existierenden JVM nicht mehr bekommt (zeitweilig wurde da einfach eine weitere gestartet, was mit neueren Releases nicht mehr geht).

    Problem ist hier in keinem Fall das "ordentliche" beenden der JVM, das geht in jedem C Programm ohne jedes Problem. Problem ist hier, dass man (so wie es aussieht) ein RPG Programm mit RCLACTGRP rausfeuern kann und dasselbe Programm anschließende keinen connect zur JVM mehr findet.

    Wenn das aus dem Kaffeesatz raus soll, dann muss hier mehr Information auf den Tisch.

    D*B

    Zitat Zitat von Robi Beitrag anzeigen
    Weitere schlechte Nachrichten
    das mit dem destroy geht, wie von KM beschrieben, auch nicht.
    Und die Umstellung auf einen Server Job ist nicht möglich, das es in dem Pgm einen kleinen Dialog Teil gibt, der natürlich so nicht mehr funktioniert. Da der Dialog mit Dateien die vom Java erzeugt werden arbeitet, (Qtemp ) ist das auch nicht ohne weiteres zu trennen.
    Bleibt das Prob. die JVM 'ordentlich' zu beenden.

    Robi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #20
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Danke Dieter,

    ich versuch 's mal ...
    da ich weis, wann das Pgm verlassen wird, könnte ich unmittelbar vorher ein 'beende' aufrufen.

    leider gehen die Beispiele nicht
    (oder ich mach was falsch)
    Das Destroy war ja ein srvpgm.
    Da mein rufendes pgm ein RPG ist habe ich es in ein separates LE pgm gepackt, das ich rufe mit actgrp(*caller)

    Robi

  9. #21
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    "funktioniert nicht", "geht nicht", sind etwas generische Angaben, es ist auch schön, wenn ihr wisst was das Programm macht und warum der RCLACTGRP erforderlich ist, oder ein RRTJOB nicht geht, aber davon weiß es der geneigte Leser hier nicht; ein wenig konkreter müsste das schon sein (wenn das denn per Ferndiagnose im Forum überhaupt lösbar ist.

    D*B

    Zitat Zitat von Robi Beitrag anzeigen
    Danke Dieter,

    ich versuch 's mal ...
    da ich weis, wann das Pgm verlassen wird, könnte ich unmittelbar vorher ein 'beende' aufrufen.

    leider gehen die Beispiele nicht
    (oder ich mach was falsch)
    Das Destroy war ja ein srvpgm.
    Da mein rufendes pgm ein RPG ist habe ich es in ein separates LE pgm gepackt, das ich rufe mit actgrp(*caller)

    Robi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #22
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Die Frage nach dem warum ist "SubOptimal"

    Das ist keine Verarschung, das ist wirklich so !!

    Es war einmal das Problem das ???? nicht funktionierte.
    ... und zur Lösung des Problems wurde vorgeschlagen die Umgebung aufzuräumen. Seit dem ist in dem Menu als Abschluß ein RCLRSC und RCLACTGRP und es gab nie wieder das (Keiner weiss mehr welches!!) Problem.
    Die Software funktionierte glücklich und zufrieden bis eines Tages eine Fremdsoftware eingeführt wurde die auch mit Java arbeitet.

    Ich rufe nun VOR dem rclactgrp die versionen des "endjava"
    (egal ob destroy oder das aus dem englischen Forum) bekomme ich nach erneutem Java Aufruf (Fremdsoftware!)
    (immernoch) diesen Fehler:
    Code:
                            Weitere Nachrichteninformationen                    
                                                                                
     Nachrichten-ID . . . . :   JVAB55C       Bewertung  . . . . . . :   40     
     Nachrichtenart . . . . :   Diagnose                                        
     Sendedatum . . . . . . :   25.03.10      Sendezeit  . . . . . . :   11:02:3
                                                                                
     Nachricht . . . :   Java Virtual Machine kann nicht erstellt werden.       
     Ursache  . . . . :   Wegen Ursachencode 5 konnte Java Virtual Machine (JVM)
       nicht erstellt werden. Die Ursachencodes sind wie folgt definiert:       
         4 - Der Thread ist einer anderen JVM zugeordnet.                       
         5 - JVM bereits in in Bearbeitung.                                     
         7 - Der Prozess muss Multithread-fähig sein.                           
         8 - Der Klassenpfad ist nicht gültig.                                  
         9 - Informationen für die Garbage Collection sind nicht gültig.        
         13 - Empfangene Eigenschaften sind nicht gültig.                       
         15 - Zweite JVM kann für einen einzelnen Prozess nicht erstellt werden.
         18 - JVM_OnLoad-Verarbeitung für -Xrun-Option konnte nicht zu Ende     
       durchgeführt werden.                                                     
                                                                       Weitere .
    Das würde ich gerne ändern

    Eine analyse, warum der RCLACTGRP läuft
    und eine individuelles aufrufen nur wenn wirklich nötig
    kommt (fast) nicht in Frage, da die SW permannent weiter gepflegt wird und sich somit immer die Bedingungen ändern.

    Ich weiß, unbefriedigende Antwort (auch für mich) aber
    ...
    Gruß
    Robi

  11. #23
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.013
    beenden der JVM mit DestroyJavaVM (macht man das nicht, stirbt die VM spätestens bei Ende des Prozesses = Job)
    Hört mir hier eigentlich irgendjemand auch mal zu??? Wie oft soll ich eigentlich noch schreiben, dass man eine JVM innerhalb eines Jobs nicht mehr manuell beenden kann? Das mag vielleicht bis V5R1 noch möglich gewesen sein mit der erwähnten Prozedur, aber danach nicht mehr!!!

    neuere Doku als V6R1 kenne ich nicht!
    Da bin ich ganz Deiner Meinung. Aber was willst Du mir damit sagen???????

    @Robi:
    Es bleibt Dir aus meiner Sicht wirklich nur übrig den RCLACTGRP wegzulassen, so wie vom Hersteller der Software empfohlen. Probier es doch mal aus, um festzustellen, ob der ursprüngliche Fehler wieder auftritt. Vielleicht kann man den ja dann anderweitig beheben. Oder handelt es sich evtl. um benannte ACTGRPs, die Du gezielt beenden kannst?

    Gruß,
    KM

  12. #24
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... wenn du mal dem link folgen würdest, dann stösst du auf die offizielle Doku von DestroyJavaVM V6R1 und die sagt was anderes als du - ergo: einer erzählt Quatsch, du oder die Doku.

    D*B

    Zitat Zitat von KM Beitrag anzeigen
    Da bin ich ganz Deiner Meinung. Aber was willst Du mir damit sagen???????
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SBS läßt sich nicht beenden
    By Marimari1009 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 10-01-07, 11:41
  2. Starten und beenden der AS/400
    By Klabautermann in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 29-09-06, 15:39
  3. JVM kann nicht erstellt werden
    By KM in forum NEWSboard Java
    Antworten: 1
    Letzter Beitrag: 21-07-06, 11:13
  4. Beenden eines Bildschirmprogrammes (RPG)
    By gaby68 in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 14-06-06, 16:27
  5. Job in SBS beenden
    By hs in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-12-01, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •