Salve! Posso darti maggiori informazioni
o rispondere a qualche domanda?
Come possiamo esserti utili?
Seleziona uno dei nostri esperti
Alberto Bedin
Supporto Commerciale
Sono online
Luisa Soranno
Supporto Commerciale
Sono online

Sempre più spesso applicazioni RPG, PHP su IBMi - AS400 si trovano a dover accedere in real time a dati presenti su sistemi eterogenei, quasi sempre SqlServer, ma anche Oracle o MySlq. Con BCD WebSmart è possibile creare applicazioni web come questa di esempio che accedono contemporaneamente a molteplici database DB2-400, SQL Server, MySQL, Oracle, ... con alte prestazioni Quando questa necessità si verifica, di solito ci si indirizza verso il ‘classico’ sempiterno Scott Klement (SK), che mette a disposizione un tool (JDBCR4) che permette di accedere da RPG ai driver JDBC dei vari database e leggere i dati da RPG in tempo reale. Tuttavia, tale approccio ha una serie di svantaggi: il principale e’ che si tratta di uno strumento utilizzabile solo in programmazione, e che richiede l’approfondimento di una serie di cose non sempre semplici da utilizzare anche se SK abbia fatto un ottimo lavoro nel ‘mascherare’ la complessità del tutto. Invece, utilizzando una delle funzioni poco conosciute, ma assolutamente utili dell’AS400 ed un tool che le utilizza, e’ possibile avere un approccio non solo piu’ semplice da utilizzare, ma anche rilasciabile a livello di utente via Sql CLI. Il tool di cui parliamo e’ ArdGate fornito da Dieter Bender. Questo tool utilizza una delle funzionalità dell’As400, ovvero il fatto che nella Gestione voci indirizzario database relazionale possiamo, oltre che l’indirizzo del server remoto, specificare un programma che si preoccupi di ‘convertire’ le nostre richieste in maniera che il server remoto sia in grado di comprenderle. Il funzionamento e’ semplicissimo: si scarica e si installa il package prendendolo da https://sourceforge.net/projects/appserver4rpg/ si configura con i dati del DB remoto, si avvia il lavoro server (che deve sempre essere attivo), si crea una voce nell’RDBDIRE relativa ed è finito. A differenza del tool di SK, ArdGate puo’ essere usato anche dal ‘normale’ STSQL, ed in SQLRPGLE viene visto come una istruzione SQL classica. Approfondiamo un attimo: una volta installato il tool di DB, editiamo il file /jvagate/conf/global.properties aggiungendo in fondo le righe per accedere ad un SqlServer: ### Connection to SqlServer Remote DB ard.url.MSSQLSRV=jdbc:jtds:sqlserver://https://www.linkedin.com/redir/invalid-link-page?url=192%2e168%2e75%2e28;databaseName=solutiondoc ard.driver.MSSQLSRV=net.sourceforge.jtds.jdbc.Driver salviamo e chiudiamo il file, quindi aggiungiamo il DB appena creato al RDBDIRE: ADDRDBDIRE RDB(MSSQLSRV) RMTLOCNAME(*ARDPGM) ARDPGM(JVAGATE/JDBCGATE) TEXT('Connect to SqlServer DB solutiondoc') e avviamo quindi il lavoro batch di gestione: SBMJOB CMD(CALL PGM(JVAGATE/STRJVAGATE)) JOB(JVAGATE) JOBQ(QSYSNOMAX) un attimo di attesa, e quindi possiamo provare immediatamente direttamente da riga comandi il corretto funzionamento del driver: da STRSQL digitiamo: CONNECT TO MSSQLSRV USER utente USING password e quindi con un SELECT * FROM categorie ecco che otteniamo: Analogamente, da SQLRPGLE l’utilizzo e’ completamente trasparente e sostanzialmente identico all’accesso ad un database locale : d Utente  c       Const('user') d Pwd    c       Const('password') /Free Exec sql execute immediate CONNECT TO MSSQLSRV USER utente USING pwd ; if SqlCod <> *zeros; // do whatever EndIf; SqlStat = 'SELECT * FROM categorie' ; Exec Sql Prepare S1 From :SqlStat; Exec Sql Declare Curs1 Cursor For S1; Exec Sql Open Curs1; Exec Sql Fetch Next From Curs1 Into :Id_Categoria, :Id_Rubrica, :Descrizione ; Anche utilizzando tool di sviluppo esterni, quali ad esempio WebSmart, il tool che produce programmi Web Nativi As400/RPG l’adozione e’ immediata e non richiede know-how aggiuntivo: CONNECT TO MSSQLSRV USER utente USING password SELECT sum(case when substr(digits(dtaamm), 1, 4) = 2009 then IMOBIE else 0 end), sum(case when substr(digits(dtaamm), 1, 4) = 2010 then IMOBIE else 0 end), substr(digits(CP_OBIET.DTAAMM), 5, 2) FROM CP_OBIET group by substr(digits(CP_OBIET.DTAAMM), 5, 2) order by substr(digits(CP_OBIET.DTAAMM), 5, 2) I vantaggi rispetto al tool di SK sono evidenti: • Una unica JVM attiva, già preconfigurata e pronta, con un minor tempo di avvio e nessun problema di classpath • La possibilità di essere usato dovunque si usi uno statemnt SQL. • In caso di errori, ritorna i normali codici SQLSTATE/SQLERR permettendo una facile comprensione del problema riscontrato. In conclusione, ancora una volta il sistema As400/iseries dimostra la sua eccezionale flessibilità ed adattabilità alle nuove necessità, permettendo di gestire con minimo impegno qualsiasi sfida appaia all’orizzonte.

iscriviti alla nostra newsletter