[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2006
    Beiträge
    5

    Performanceprobleme beim Abruf von Internetseiten Java-As400

    Hallo,
    ich möchte Informationen von https-Seiten abrufen per Kombination RGP-Java.
    Der Aufruf eines Java-Programms aus RPG sollte kein Problem machen. Das Java-Programm auch nicht und es funktioniert auch(siehe Anhang). Eine Abfrage einer Internetseite dauert zwischen 5 und 10 Sekunden.
    Nur soll dieses nicht einmal geschehen, sondern viele Male, quasi gleichzeitig.
    Starte ich das Programm quasi gleichzeitig bis zu 10 mal, ist unsere AS400 bei einer Auslastung von 100% und die Abfragen dauern in der Summe bis zu einer Minute.
    Ich vermute, es liegt am mehrfachen Laden der Virtuelle Java-Maschine.
    Hat jemand eine Idee, wie es besser zu machen ist ?


    Viele Grüße
    Franz Rust

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.security.Security;

    import javax.net.SocketFactory;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;

    public class TestPerformance2 {

    public static void main(String argv) throws Exception {
    if (argv.length != 1) {
    System.out.println("Usage: java HttpsGetTrustAll");
    System.exit(0);
    }
    String URLString = argv[0]; //z.B.
    https://www.sun.com
    String request = "";

    Security.addProvider(new com.ibm.jsse.IBMJSSEProvider());

    // Get a Socket factory
    SocketFactory factory = SSLSocketFactory.getDefault();

    // Create a trust manager that does not validate certificate chains
    TrustManager trustAllCerts = new TrustManager{
    new X509TrustManager() {
    public java.security.cert.X509Certificate getAcceptedIssuers() {
    return null;
    }
    public void checkClientTrusted(
    java.security.cert.X509Certificate certs, String authType) {
    }
    public void checkServerTrusted(
    java.security.cert.X509Certificate certs, String authType) {
    }
    }
    };

    // Install the all-trusting trust manager
    try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.g etSocketFactory());
    } catch (Exception e) {
    }
    // Now you can access an https URL without having the certificate in the truststore
    try {
    URL url = new URL(URLString + request);

    BufferedReader in = new BufferedReader(new InputStreamReader(
    url.openStream()));
    String line;
    StringBuffer sb = new StringBuffer();
    while ((line = in.readLine()) != null) {
    sb.append(line);
    }
    in.close();
    System.out.println(sb.toString());

    } catch (MalformedURLException e) {
    }
    }
    }

  2. #2
    Registriert seit
    Sep 2002
    Beiträge
    47
    Moin!

    kannst Du es nicht andersrum machen?
    Eine JVM inder Du z.B. jede Abfrage in einem eigenem
    Thread packst und von dort zusätzlich das RPG Programm
    aufrufst für die Weiterverarbeitung.
    Ciao
    Nili

  3. #3
    Registriert seit
    Oct 2004
    Beiträge
    251
    Also das öffnen der JVM und das Vorkomipilieren braucht viele Resourcen, jede JVM braucht auch viel Hauptspeicher.

    Lies dir dazu auch die Homepage von Forumsmitglied "Dieter Bender" durch.

    Für die weitere Vorgangsweise, noch folgende Frage:
    Wieviel RPG-Jobs fragen (gleichzeitig) an?

    Um auf ein vernünftige Performance zu kommen, ist es auf jeden Fall notwendig, den Javajob permanent als Serverjob laufen zu lassen.

    Eine einfach Variante wäre, den Javajob eine DataQueue abhorchen zu lassen.
    Abhängig von der obigen Frage (mehr als ein Anforderer?) reicht entweder eine Antwort DataQueue oder eine Antwortdatei oder....

    Ich mache gerade was ein ähnliches Projekt. Beim mir gibt es viele Anforderer. Ich schwanke zwischen DataQueues und Sockets.

    Ich berichte....

    Achja, schneller wird es natürlich wenn man je Anforderung an einen neuen bzw. vorgestarteten Thread übergibt.

    Robert P.

    Nachtrag: Das Starten läßt sich beschleunigen, wenn man mit CRTJVAPGM (Level--> je höher, desto schneller) die Javaprogramme vorkompiliert Das ändert aber nichts am Hauptspeicherhunger viel JVM's - ist also keine Lösung.

  4. #4
    Registriert seit
    Jun 2006
    Beiträge
    5
    Ziel ist es, im Maximum 100 Abrufe von genausovielen Usern eines RPG-Programms gleichzeitig durchführen zu können. Die Abrufinformationen kommen aus RPG und werden an Java übergeben.
    Erste Tests mit einem Javajob und Threads sehen sehr gut aus. Ich konnte 13 Abrufe auf in 9 Sekunden abhandeln
    Nun wird der nächste Schritt die Übergabe der Daten aus RPG an den Javajob sein. Ich denke an Dataqueues. Dann die Rückgabe der Antwortdaten.
    Wahrscheinlich werde ich die Daten in eine DB schreiben und das aufrufende RPG-Programm alle paar Sekunden auf diese Datei suchen lassen

    Danke für die Ideen
    Franz

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    die wesentlichen Infos hast du bereits von RobertPic bekommen. Ich habe da zwei Ergänzungen/Anmerkungen:
    - die Idee mit dem warten und wühlen in dem anfordernden RPG Programm würde ich durch einen Antwort Mechanismus über DataQ lösen (AntwortQ pro Job erstellen und da die Antwort oder fertig Meldung rein, RPG Programm macht Receive DataQ mit Wait, eventuell Timeout vorsehen).
    - die System.out.println Diagnostics durch log4j ersetzen mit der Möglichkeit das logging feinkörnig zu steuern und zwischen Entwicklung, Test, Fehlersuche und Produktion differenzierte Ausgaben zu machen ohne Programm Änderung.

    mfg

    Dieter Bender

    Zitat Zitat von Franz_Rust
    Ziel ist es, im Maximum 100 Abrufe von genausovielen Usern eines RPG-Programms gleichzeitig durchführen zu können. Die Abrufinformationen kommen aus RPG und werden an Java übergeben.
    Erste Tests mit einem Javajob und Threads sehen sehr gut aus. Ich konnte 13 Abrufe auf in 9 Sekunden abhandeln
    Nun wird der nächste Schritt die Übergabe der Daten aus RPG an den Javajob sein. Ich denke an Dataqueues. Dann die Rückgabe der Antwortdaten.
    Wahrscheinlich werde ich die Daten in eine DB schreiben und das aufrufende RPG-Programm alle paar Sekunden auf diese Datei suchen lassen

    Danke für die Ideen
    Franz
    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. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. as400 export zu einem externen programm
    By mican in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 18-01-07, 08:07
  3. Tape von einer AS400 von anderer AS400 aus nutzen?
    By hs in forum IBM i Hauptforum
    Antworten: 15
    Letzter Beitrag: 07-11-06, 19:28
  4. Druckereinrichtung auf AS400?
    By stephanr1 in forum NEWSboard Drucker
    Antworten: 7
    Letzter Beitrag: 20-07-06, 14:00
  5. AS400 Operatorin sucht Stelle im Raum Frankfurt
    By NixWisserin in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 15-02-05, 17:51

Berechtigungen

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