[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Zitat Zitat von dschroeder Beitrag anzeigen
    ... so dass er die user requests ab sofort auf den bisherigen Testserver, der ab jetzt ja der produktive werden soll, umleitet.
    Und wie bringt Ihr die Daten des bisherigen Testservers auf den aktuellen Stand?

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Da verstehe ich die Frage nicht. Wir tauschen die jar-Files aus und ändern die RPG-Programme, auf die mittels java zugegriffen wird. Vielleicht denke ich da zu einfach.

    Dieter.

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Was ist mit euren produktiven Daten in der Datenbank.
    Wie ziehen die mit um bei so einem Wechsel?
    Oder habt ihr sowas nicht?

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Ach so. Der Begriff "Testserver" war von mir vielleicht etwas unglücklich gewählt. Ich meine damit schon einen Server, der Webservice für die echten Datenbanken bereitstellt. Nur ist er für die Clients nicht erreichbar und damit nicht im produktiven Einsatz. Das heißt, wir können Programmänderungen auf diesen (zur Zeit nicht im Echteinsatz befindlichen) Server ausrollen. Wenn das Ausrollen erledigt ist, soll der reverse proxy die Requests aller Client auf diesen Server (der jetzt ja die neuesten Versionen der Programme hat) umleiten.

    Dieter

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Auf welchem Server liegen denn die (aktuellen produktiven) Daten auf die diese Programme zugreifen?

  6. #6
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Die Daten liegen bei uns immer auf der iSeries.

    Vielleicht nochmal als Grobskizzierung unserer Idee:

    - Unsere Daten liegen alle auf unserer zentralen iSeries
    - Unsere Kernanwendung (Individualprogrammierung) besteht aus RPG-Programmen
    - Wir haben auch viele, immer wichtiger werdende, Java-Anwendungen für die PCs.
    - Die Java-Anwendungen benötigen Daten aus der iSeries Datenbank.
    - Um die im Laufe der Jahre entstandenen diversen Zugriffswege (ODBC, JDBC, SQL-UDF, SQLUDTF, ...) zu vereinheitlichen, möchten wir in Zukunft alles über Webservices abbilden.
    - Die Webservices sollen in Java geschrieben werden. Die Java-Programme, aus denen diese Webservices bestehen, sollen ihrerseits ihre Daten mithilfe von SQL und von RPG-Programmen ermitteln.

    Wenn das so klappt, hätten wir eine saubere Webservice-Schicht, die alle "PC-Anwendungen" von der iSeries abkapselt. Die Implementierung der Webservices soll in der Hand der iSeries Programmierer liegen.
    Auf der iSeries sind wir es im RPG gewohnt, Programme auch mal im laufenden Betrieb kurzfristig auszutauschen. Das wollen wir natürlich auch mit unseren Webservices machen, bzw. mit den RPG-Programmen machen, die unsere Webservices bedienen.

    Vielleicht hat der eine oder andere ja auch schon mal so eine Umgebung errichtet. Wir sind für jeden Tipp dankbar.

    Dieter

  7. #7
    Registriert seit
    Aug 2014
    Beiträge
    181
    Hallo Dieter,

    ich war beim Bau meiner Hotelsuchmaschine mit einer ähnlichen Aufgabenstellung konfrontiert.

    - Daten liegen auf der i
    - RPG-Programme greifen auf die Daten per SQL zu und sollen sie über den Webserver dem Webfrontend (HTML5, CSS3, JavaScript, jQuery) per Webservice zur Verfügung stellen. Die geeignete Methode sind AJAX-Requests, die browserseitig mit JavaScript generiert werden.

    Für den Datentransport vom Server zum Browser hat man zwei Formate zur Verfügung: XML oder JSON. Anfangs habe ich zu XML tendiert, habe mich aber nach umfangreichen Tests für JSON entschieden.

    Das bedeutet, dass ich die RPG Programme grundsätzlich webservicefähig gebaut habe. Sie nehmen die Requests mit den Parametern vom Browser entgegen, lesen die Daten aus der Datenbank, dann erzeugen sie einen JSON-Datenstrom, den sie an den Browser zurücksenden. Das Ganze ist sehr performant. Die Antwortzeiten liegen im lokalen Umfeld im Schnitt bei 20ms - siehe Grafik. Wenn es über das Internet läuft, kommt noch die Latenzzeit von 100-200ms dazu.

    Gestern hatte ich 90.000 Zugriffe auf meinen Webserver gemessen. Die Antwortzeit für die Bereitstellung einer Website an den Browser liegt bei 0,46s im Durchschnitt, die Internet-Latenzzeit ist mit eingerechnet. Die Prozessorauslastung der IBM i liegt bei ca. 3%. Mir scheint, da ist noch richtig Luft nach oben.

    Noch eine kleine Anmerkung zum Thema RPG-Programmaktualisierung. Wenn ein RPG Programm, das als Webservice fungiert geändert und ins Echtsystem eingespielt wird, ist es sofort scharf, ohne dass der Webserver neu gestartet werden muss.

    Ein kleines Beispiel soll dieses Vorgehen transparenter machen. Die Aufgabenstellung ist, die Spools eines Anwenders im Browser darzustellen und jede Spalte sortierbar zu machen. Hierfür habe ich ein RPG-Programm erstellt, dass die Spooldaten per API ausliest, daraus JSON-Daten erstellt und sie an den Browser sendet.

    Dieses Programm kann per JavaScript über einen AJAX-Request aufgerufen werden:
    http://www.myhofi.com/devhtm/spoolsorter.htm

    PHP-Code:
    function readJsonSpoolData() {
        
    ajaxRequest01.send("POST"xmdomain "expcgip/lstspl04.pgm",
                
    requestHandlerSpoolDataxmcontent);

    oder wenn es direkt über
    http://www.myhofi.com/expcgip/lstspl04.pgm
    aufgerufen wird, dann ist es ein Webservice

    Wenn man zusätzlich Parameter übergeben möchte, dann im folgenden Format:
    test.com/programm.pgm?kundennr=4711&ort=muenchen&strasse=li ndenstr&user=test&password=geheim

    Mit V7R2 und dem kostenlosen OpenSource Lizenzprogramm 5733OPS kann man Node.js auf der IBM i installieren und mit serverseitigen JavaScript Anwendungen schreiben. Node.js nutzt die V8 JavaScript Engine von Google, die für den Chrome-Browser entwickelt worden ist.

    Ich habe es installiert und es genügen wenige Zeilen Code, um auf die DB/2 zuzugreifen und die Daten im JSON-Format an den Browser zu senden

    PHP-Code:
    var http = require('http');
    var 
    db   = require('/QOpenSys/QIBM/ProdData/Node/os400/db2i/lib/db2');
    var 
    conf = {"port"8020};

    http.createServer(function(request,response) {
        
    db.init();
        
    db.conn("*LOCAL");
        
    db.exec("SELECT CUSNUM, LSTNAM, CITY, BALDUE FROM QIWS.QCUSTCDT", function(rows) {
            
    response.writeHead(200, {'Content-Type''application/json'});
            
    response.end(JSON.stringify(rows));
        });
        
    db.close();
    }).
    listen(conf.port,'your ip');

    console.log('Server running at http://your ip:' conf.port '/'); 

    Herzliche Grüße

    Rainer

    www.myhofi.com
    Hotels finden leicht gemacht - powered by IBM i
    www.powerwire.eu/speedy-websites-a-winner-with-power-i-and-watson
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Click image for larger version. 

Name:	AJAX.JPG 
Views:	33 
Size:	59,3 KB 
ID:	314  


  8. #8
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Hallo Rainer,
    vielen Dank für deinen ausführlichen Beitrag. Ich denke, wir haben da ähnliche Problemstellungen. Wir haben uns ebenfalls für JSON als Datenformat entschieden. Mit Node.js haben wir vor einer Woche auch experimentiert. Bei Node.js haben wir jedoch den Nachteil gesehen, es im Kern nicht multithread-fähig ist. Wir haben da ein paar Experimente gemacht und festgestellt, dass man den Webserver mit einigen Javascript-Operationen schnell lahmlegen kann. Zwar sind die I/O-Operationen asynchron, aber der Aufruf (besser gesagt, die Aufrufvorbereitung) eines RPG-Programms kostet bei uns knapp 10ms. Wir haben die Sorge, dass das nicht so gut skaliert. Deshalb sind wir jetzt auf dem Weg, die Webservice-Schicht mit Java zu machen.

    Dieter

Similar Threads

  1. "Reverse engineering" aus logischer Datei
    By MoselRBA in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 18-12-14, 14:19
  2. iSeries Apache Log
    By SE in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 12-12-02, 10:28
  3. OVRPRTF im laufenden Programm
    By Skipper in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 28-06-02, 10:36
  4. AccessLogExcludeUrl -> Apache
    By SE in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-02-02, 16:16
  5. 9204/36 in Betrieb nehmen ?!
    By jkal in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 01-08-01, 18:30

Berechtigungen

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