Java e As400 Introduzione all uso della IBM Toolbox  for Java

Java e As400 Introduzione all uso della IBM Toolbox for Java PowerPoint PPT Presentation


  • 569 Views
  • Uploaded on
  • Presentation posted in: General

IBM Toolbox for Java. IBM? Toolbox for Java? rappresenta un insieme di packages che permettono a programmi Java di accedere ai dati/risorse su un servers iSeries?. Queste classi permettono di scrivere applicazioni client/server, servelt, applet. Inoltre, ? possibile eseguire in maniera nativa su iSe

Download Presentation

Java e As400 Introduzione all uso della IBM Toolbox for Java

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


1. Java e As400 Introduzione all’uso della IBM Toolbox for Java Furlani Francesco [email protected] SMS GROUP srl - Pesaro

2. IBM Toolbox for Java IBM® Toolbox for Java™ rappresenta un insieme di packages che permettono a programmi Java di accedere ai dati/risorse su un servers iSeries™. Queste classi permettono di scrivere applicazioni client/server, servelt, applet. Inoltre, è possibile eseguire in maniera nativa su iSeries applicazioni Java utilizzando la iSeries Java virtual machine (JVM). IBM Toolbox è disponibile nelle seguenti forme Programma su licenza 5722-JC1 a versione V5R4 installabile dalla versione V5R2 Comprende una versione ottimizzata per esecuzioni su iSeries Versione open source denominata JTOpen utilizzabile da un client esterno

3. IBM Toolbox for Java L’IBM Toolbox for Java è formata da un insieme di jar files. Ciascun jar è formato da classi che assolvono specifici compiti. Requisiti per l’installazione su una workstation dell’IBM Toolbox for Java Installazione di una J2SE 1.4 o superiore Copiare i jar files della toolbox necessari nel proprio CLASSPATH

4. Package del IBM Toolbox Access classes Permette di accedere e gestire alle risorse iSeries HTML classes Permette di creare forms HTML e tabelle Micro classes Permette di creare applicazioni java per dispositivi mobili per poter accedere ai dati e alle risorse iSeries ReportWriter classes Permette di create documenti PDF da datasource XML Resource classes Fornisce un framework per accedere alle risorse iSeries Security classes Fornisce connessioni sicure al server iSeries Servlet classes Permette di repererire e formattare dati in una servlet Utility classes Funzioni di sistema e utilità Vaccess classes Permette, tramite Swing, di rappresentare le risorse iSeries

5. IBM Toolbox for Java Access package Permette di accedere alle risorse iSeries Comandi, Programmi, Spool, Code Dati, ecc.. Utilizzabile da un programma standalone, da una applet o da una servlet

6. IBM Toolbox for Java Access package

7. IBM Toolbox for Java Access package

8. IBM Toolbox for Java Access package

9. IBM Toolbox for Java Access package – Data Conversion Data Conversion Le classi adibite alla conversione dati permettono di convertire dati numerici e alfanumerici tra i formati iSeries e Java. La conversione di rende necessaria in quanto su iSeries è utilizzata la codifica EBCDIC. Data Description Queste classi sono costruite sulla “data conversion” permettono di convertire tutti i campi di un record con una singola chiamata ad un metodo. La classe RecordFormat permette di descrivere i dati che saranno gestiti, ossia permette di di specifare i dati che verranno passati in una coda dati, come parametro di un comando.

10. IBM Toolbox for Java Access package – Data Conversion AS400DataType Rappresenta una interfaccia che definisce i metodi richiesti per la conversione dati. Un programma java implementerà questa interfaccia quando ci sarà la necessità di convertire singoli “pezzi” di dati. Esistono classi che convertono i seguenti tipi di dati: Numerici Testo Es: AS400Bin4 AS400Text Ecc…

11. IBM Toolbox for Java Access package – Data Conversion Conversione specificando un formato record (RecordFormat) Esistono delle classi che permettono di convertire i dati di un record in un colpo solo invece di convertire singolarmente i campi che formano il record. Per esempio, nel caso di un programma Java che legga dati da un coda dati la quale contiene un array di byte che potrebbe essere “formattato” utilizzando diversi tipi di dati iSeries. Il pgm Java potrebbe convertire il struttura letta campo per campo oppure potrebbe creare un RecordFormat che descrive la struttura dell’array. In questo caso la conversione potrebbe essere fatta direttamenta sul record. La conversione per RecordFormat si usa principalmente quando si lavora con code dati, program call e accesso al db a livello di record.

12. IBM Toolbox for Java Access package – Data Conversion Esempio di conversione di un dato numerico // Create a buffer to hold the server data type. Assume the buffer is filled with numeric // data in the server format by data // queues, program call, etc. byte[] data = new byte[100]; // Create a converter for this server data type. AS400Bin4 bin4Converter = new AS400Bin4(); // Convert from server type to Java object. //The number starts at the beginning of the buffer. Integer intObject = (Integer) bin4Converter.toObject(data,0); // Extract the simple Java type from the Java object. int i = intObject.intValue();

13. IBM Toolbox for Java Access package – Data Conversion Esempio di conversione di un testo I dati vengono convertiti utilizzando la classe AS400Text Questa classe si preoccupa di gestire la conversione da EBCDIC Quando viene costruito l’oggetto AS400Text deve essere specificata la lunghezza della stringa da convertire.

14. IBM Toolbox for Java Access package – Data Conversion For example, assume that a DataQueueEntry object returns iSeries text in EBCDIC. The following example converts this data to Unicode so that the Java program can use it: // ... Assume the data queue work has already been done to retrieve the text from the iSeries and the data has been // put in the following buffer. int textLength = 100; byte[] data = new byte[textLength]; // Create a converter for the iSeries data type. Note a default converter is being built. This converter assumes the iSeries // EBCDIC code page matches the client's locale. If this is not true the Java program can explicitly specify the EBCDIC // CCSID to use. However, it is recommended that you specify a CCSID whenever possible (see the Notes: below). AS400Text textConverter = new AS400Text(textLength) // Note: Optionally, you can create a converter for a specific CCSID. Use an AS400 object in case the program is running // as a Toolbox for Java proxy client. int ccsid = 37; AS400 system = ...; // AS400 object AS400Text textConverter = new AS400Text(textLength, ccsid, system); // Note: You can also create a converter with just the AS400 object. This converter assumes the iSeries code page matches // the CCSID returned by the AS400 object. AS400Text textConverter = new AS400Text(textLength, system); // Convert the data from EBCDIC to Unicode. If the length of the AS400Text object is longer than the number of // converted characters, the resulting String will be blank-padded out to the specified length. String javaText = (String) textConverter.toObject(data);

15. IBM Toolbox for Java Access package Per poter accedere all’iSeries è necessario identificarsi Si utilizza la classe com.ibm.as400.access.AS400 Qualunque programma deve usare una istanza di questa classe per poter accedere a qualunque risorsa Funzionalità Autenticazione tramite Utente/Password o Kerberos Gestione dei default user ID Cache passwords Prompt per password Cambio password Reperimento versione e release del sistema operativo La classe SecureAS400 permette di criptare la connessione ed evitare di spedire in chiaro userID e password AS400 sistema = new AS400( “192.168.x.x”, user, password );

16. IBM Toolbox for Java Access package L’oggetto AS400 creato contiene le connessioni ai jobs server su iSeries. Ogni connessione ad un server iSeries determinerà l’esecuzione di opportuni jobs sul server. Un server fornisce l’accesso ai seguenti servizi: JDBC Program call and command call Integrated file system Print Data queue Record-level access

17. IBM Toolbox for Java Access package – Command Call

18. IBM Toolbox for Java Access package - DataArea La classe DataArea è una classe astratta che rappresenta l’oggetto iSeries Data Area. Questo classe ha quattro sottoclassi che supportano i seguenti tipi di dati: character data, decimal data, logical data, local data areas che contengono character data. ESEMPIO: AS400 system = new AS400("MyServer"); QSYSObjectPathName path = new QSYSObjectPathName("MYLIB", "MYDATA", "DTAARA"); DecimalDataArea dataArea = new DecimalDataArea(system, path.getPath()); dataArea.create(); dataArea.clear(); dataArea.write(new BigDecimal("1.2")); BigDecimal data = dataArea.read(); dataArea.delete();

19. IBM Toolbox for Java Access package – Data Queues

20. IBM Toolbox for Java Access package – Data Queue

21. IBM Toolbox for Java Access package – Integrated file system

22. IBM Toolbox for Java Access package – Integrated file system

23. IBM Toolbox for Java Access package – Print

24. IBM Toolbox for Java Access package – ProgramCall

25. IBM Toolbox for Java Access package – ProgramCall

26. IBM Toolbox for Java Access package – ProgramCall ProgramParameter Si usa la classe ProgramParameter per passare i parametri da un programma Java ad un programma iSeries e viceversa. I dati di input vengono impostati utilizzando il metodo setInputData(). Dopo l’esecuzione del programma i dati di output possono essere reperiti utilizzando il metodo getOutputData().Ogni parametro viene passato come un array di byte. Il programma Java dovrà convertire questo array di byte. Si utilizzeranno le classi di “data conversion” per convertire i dati tra formati Java e iSeries. I Parametri vengono aggiunti alla ProgramCall come oggetti di una lista

27. IBM Toolbox for Java Access package – ProgramCall

28. Esempio // // JSMServer.java // // SMS GROUP Pesaro // // import java.net.*; import java.io.*; import com.ibm.as400.access.*; public class JSMServer extends Thread { protected Socket client; static AS400 sys; public JSMServer (Socket socket) { System.out.println("-->Connessione da:"+socket.getInetAddress().getHostName()+ " - "+socket.getInetAddress().getHostAddress()); client=socket; } public void run() { try { InputStream is=client.getInputStream(); OutputStream os=client.getOutputStream();

29. Esempio PrintStream p=new PrintStream(os); int x; ByteArrayOutputStream command=new ByteArrayOutputStream(); String prezzoCommand=new String("PREZZO"); String quitCommand=new String("QUIT"); while ((x=is.read())!=-1) { if (x==64) { if (!quitCommand.equalsIgnoreCase(command.toString())) { os.write(prezzo(command.toString()).getBytes()); } else { p.println("terminazione!"); try { Thread.sleep(100); sys.disconnectService(AS400.COMMAND); } finally { break; } } command.reset(); } else if (x!=10) /*Carriage return */ command.write(x); } }

30. Esempio catch (IOException ex) { ex.printStackTrace(); } finally { System.out.println("Connessione chiusa "+client.getInetAddress()); try { client.close(); } catch (IOException ex) { ex.printStackTrace(); } } } public static void main(String args[]) throws IOException { int port=0; Socket client; if (args.length == 0) { System.out.println("Uso: java JSMServer numero-porta"); } else { if (args.length >= 1) port = Integer.parseInt(args[0]); System.out.println("Server in avvio sulla porta:"+port); ServerSocket server = new ServerSocket(port,100); System.out.println("Server avviato sulla porta:"+server.getLocalPort()); System.out.println("Connessione iSeries in avvio");

31. Esempio try { sys = new AS400(“as400",“USER",“PASSWORD"); System.out.println("Connessione iSeries avviata"); } catch (Exception ex) { ex.printStackTrace(); } System.out.println("Ready.."); while (true) { System.out.println("In attesa di connessione..."); client=server.accept(); System.out.println("Richiesta connessione da:"+client.getInetAddress().getHostName()); (new JSMServer(client)).start(); } } } private String prezzo(String CodArt) { String tmpPrezzo=""; try { // Definizione parametri ProgramParameter[] parmList = new ProgramParameter[4]; // Data String Data="20041215"; AS400Text txt8 = new AS400Text(8); parmList[0] = new ProgramParameter(txt8.toBytes(Data),8);

32. Esempio // Cliente String CodiceCliente="000001"; AS400Text txt6 = new AS400Text(6); parmList[1] = new ProgramParameter(txt6.toBytes(CodiceCliente),6); // Articolo String CodiceArticolo=CodArt; AS400Text txt15 = new AS400Text(15); parmList[2] = new ProgramParameter(txt15.toBytes(CodiceArticolo),15); // Prezzo: valore di ritorno String prezzo=""; AS400Text txt13 = new AS400Text(13); parmList[3] = new ProgramParameter(txt13.toBytes(prezzo),13); ProgramCall pgm = new ProgramCall(sys,"/QSYS.LIB/SMS_OBJSTD.LIB/C0699C.PGM",parmList); // Run the program. if (pgm.run() != true) { AS400Message[] messageList = pgm.getMessageList(); } else { tmpPrezzo= (String)txt13.toObject( parmList[3].getOutputData()); } // Disconnect since I am done running programs} catch (Exception ex) { ex.printStackTrace(); } return tmpPrezzo; } }

33. IBM Toolbox for Java Access package – JDBC

34. IBM Toolbox for Java Access package – JDBC

35. IBM Toolbox for Java Access package – JDBC Proprietà specificate nella connessione driver utente password, lista delle Librerie, transaction isolation, formato data e ora ottimizzazione delle query,, …. ecc..

36. IBM Toolbox for Java Access package – JDBC AS400JDBCConnection class La classe AS400JDBCConnection fornisce una connessione JDBC verso uno specifico database DB2 UDB for iSeries. Per creare una istanza di questo oggetto è sufficiente richiamare il metodo getConnection. Es: DriverManager.getConnection()

37. IBM Toolbox for Java Access package – JDBC Usando la classe AS400JDBCConnection è possibile eseguire le seguenti operazioni: Creare uno Statement (Statement, PreparedStatement) Gestire i Commit e Rollbacksul database e rilasciare i lock sulle tabelle del database Chiudere la connessione terminando automaticamente le connessioni alle risorse utilizzate Impostare il livello di “transaction isolation” Avere le informazioni sulle tabelle utilizzando i metadata Impostare l’autocommit in on o off Ottenere il job identifier corrispondente al lavoro su sistema

38. IBM Toolbox for Java Access package – JDBC //Load the IBM ToolBox for Java JDBC driver DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver()); // Connect to the server. Connection c = DriverManager.getConnection("jdbc:as400://mySystem"); // Create a Statement object. Statement s = c.createStatement(); // Run an SQL statement that creates a table in the database. s.executeUpdate("CREATE TABLE MYLIBRARY.MYTABLE (NAME VARCHAR(20), ID INTEGER)"); // Run an SQL statement that inserts a record into the table. s.executeUpdate("INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('DAVE', 123)"); // Run an SQL statement that inserts a record into the table. s.executeUpdate("INSERT INTO MYLIBRARY.MYTABLE (NAME, ID) VALUES ('CINDY', 456)"); // Run an SQL query on the table. ResultSet rs = s.executeQuery("SELECT * FROM MYLIBRARY.MYTABLE"); // Close the Statement and the Connection. s.close(); c.close();

39. IBM Toolbox for Java Access package – JDBC Nell’esempio è stato necessario specificare la libreria che contiene la tabella nella forma <nome_libreria>.<nome_tabella> Se la connessione fosse stata fatta Connection c = DriverManager.getConnection("jdbc:as400://mySystem/MYLIBRARY"); non sarebbe stato necessario specificare la libreria negli SQL

40. Tips & Tricks Tabelle sotto giornale Comando CRTSQLPKG per creare la libreria che contiene le tabelle Comando STRJRNPF per mettere sotto giornale le tabelle Parametri sulla connessione (transaction isolation) L’istruzione SQL ALTER TABLE DROP COLUMN potrebbe non funzionare! aggiungere il messaggio CPA32B2 alle risposte di sistema ADDRPYLE SEQNBR(3001) MSGID(CPA32B2) RPY('I') impostare nella JOBD associata all'utente QUSER il valore INQMSGRPY(*SYSRPYL)

41. Gestione dei membri di una tabella Alternative: Utilizzare il comando OVRDBF Utilizzare l’istruzione SQL “CREATE ALIAS”

  • Login