Il linguaggio di programmazione Java è forse uno dei più diffusi o comunque uno dei più famosi nel panorama attuale. Fu introdotto intorno agli inizi degli anni ’90 da Sun Microsystems.
Le principali caratteristiche di Java sono:
- linguaggio di programmazione di alto livello
- linguaggio di programmazione orientato agli oggetti
- linguaggio di programmazione indipendente dalla piattaforma
Quando si compila un programma Java si ottiene un file con estensione .class il quale è indipendente dalla piattaforma e per essere eseguito ha bisogno di una Java Virtual Machine (JVM) che è l’infrastruttura tra l’applicazione Java e il sistema operativo.
IBM i dispone di diverse versioni di Java Virtual Machine (JVM). Ogni versione di sistema operativo può avere JVM diverse.
Il prodotto interessato ha codice 57xx-JV1. Le varie opzioni di questo prodotto identificano le diverse versioni di JVM.
Per esempio in IBM i 7.1 si potrebbe avere una situazione di questo tipo (comando DSPSFWRSC
):
5761JV1 *BASE IBM Developer Kit per Java
5761JV1 *8 J2SE 5.0 32 bit
5761JV1 *9 J2SE 5.0 64 bit
5761JV1 *11 Java SE 6 32 bit
5761JV1 *12 Java SE 6 64 bit
Le versioni di JVM a 32-bit sono disponibili a partire dalla versione IBM i V5R4.
La prima versione di JVM disponibile su IBM i risale alla versione V4R2 (circa 1998) ed era a 64-bit.
Le versioni di JVM a 64-bit vengono denominate “Classic JVM“.
Invece le versioni a 32-bit sono denominate “IBM technology for Java“.
Le versioni a 32-bit sono eseguite nell’ambiente PASE (Portable Application Solutions Environment), quindi è richiesto che sia anche installata l’opzione 33 del prodotto 57xxSS1 (Portable App Solutions Environment).
I prodotti citati 57xxJV1 e 57xxSS1 opz. 33 sono gratuiti.
Avendo più versioni di JVM installate su IBM i è importante saper scegliere quale versione eseguire. Il controllo della versione di JVM che verrà avviata dipende dalla variabile di ambiente JAVA_HOME.
Per visualizzare i valori delle variabili di ambiente attualmente impostate si può usare il comando
WrkEnvVar level(*job)
: visualizza le variabili ambiente a livello del job corrente
WrkEnvVar level(*sys)
: visualizza le variabili ambiente a livello di sistema
Per impostare p.es. la JVM J2SE 5.0 a 32 bit a livello del lavoro corrente si può usare il comando:
ADDENVVAR ENVVAR(JAVA_HOME) VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit') LEVEL(*JOB)
Ovvero si imposta nella variabile JAVA_HOME il percorso dell’IFS ove è installata la JVM.
Per determinare quale sia la versione di JVM correntemente in esecuzione in un job si può aprire una sessione qshell
StrQsh
e digitare il comando
java -version
l’output del comando dopo qualche istante di attesa può essere
java version "1.6.0" Java(TM) SE Runtime Environment (build pap3260sr16fp41-20170215_04(SR16 FP41)) IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 OS/400 ppc-32 jvmap3260sr16fp41-20170215_04 (JIT enabled, AOT enabled) J9VM - 20161215_329869 JIT - r9_20160630_120368 GC - GA24_Java6_SR16_20161215_0927_B329869) JCL - 20170215_01
Oppure molto più semplicemente eseguire il comando RUNJVA CLASS(*VERSION)
.
In generale prima di IBM i 7.3 è preferibile usare una JVM a 32-bit che ha un minore impatto sulle prestazioni, sopratutto a livello di memoria. Però lo svantaggio è che l’applicazione potrà avere al massimo 4 Gb di heap size (decurtato della memoria utilizzata dalla JVM stessa a disposizione dell’applicazione rimangono circa 3 Gb).
La JVM a 64-bit invece ha un limite di 240 Gb.
Dalla versione IBM i 7.3 è consigliato utilizzare la versione JDK 8.0 a 64-bit.
JVM di default
Ogni versione di sistema operativo IBM i può avere una JVM che viene avviata per default diversa:
- V5R4 e V5R4M5: IBM Classic JDK 1.4 (57xxJV1 Option 6) (ovvero una JVM a 64-bit). Percorso: /QIBM/ProdData/Java400/jdk14
- 6.1 e 6.1.1: IBM Technology for Java JDK 5.0 32-bit (57xxJV1 Option 8). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit
- 7.1: IBM Technology for Java JDK 6.0 32-bit (57xxJV1 Option 11). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit
- 7.2: IBM Technology for Java JDK 7.1 32-bit (57xxJV1 Option 14). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk71/32bit
- 7.3: IBM Technology for Java JDK 8.0 32-bit (57xxJV1 Option 16). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit
- 7.4 e 7.5: IBM Technology for Java JDK 8.0 64-bit (57xxJV1 Option 17). Percorso: /QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit
Come si può vedere tutte le release hanno come JVM di default una versione a 32 bit tranne la V5R4 e la 7.4.
Per impostare anche su una V5R4 come una JVM di default a 32 bit si può usare il comando:
ADDENVVAR ENVVAR(JAVA_HOME) VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit/jre/lib/ext') LEVEL(*SYS)
JVM in esecuzione
Per visualizzare i job che stanno utilizzando una JVM si può usare il comando WRKJVMJOB
.
Dall’elenco dei lavori si può fare opzione 9 su un lavoro per visualizzare le informazioni relative alla JVM tra cui la versione.
P.es.
Visualizz. informazioni raccolta dati inutili Sistema: Sxxxxxx Lavoro . . . . . : QSRVMON PID . . . . . . : 501 Utente . . . . . : QSYS JDK . . . . . . : 1.6.0 Numero . . . . . : 229738 Bit . . . . . . : 32
JVM disponibili su IBM i
IBM i 7.5
Opt. | JDK | java_home |
16 | IBM Technology for Java 8.0 32bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit |
17 | IBM Technology for Java 8.0 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit |
19 | IBM Technology for Java 11 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit |
20 | IBM Technology for Java 17 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit |
Download, installation and usage of Java 11
Download, installation and usage of Java 17
IBM i 7.4
Opt. | JDK | java_home |
16 | IBM Technology for Java 8.0 32bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit |
17 | IBM Technology for Java 8.0 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit |
19 | IBM Technology for Java 11 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit |
20 | IBM Technology for Java 17 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit |
IBM i 7.3
Opt. | JDK | java_home | EOS |
14 | IBM Technology for Java 7.0 32bit IBM Technology for Java 7.1 32bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk70/32bit /QOpenSys/QIBM/ProdData/JavaVM/jdk71/32bit |
30/09/22 |
15 | IBM Technology for Java 7.0 64bit IBM Technology for Java 7.1 64bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk70/64bit /QOpenSys/QIBM/ProdData/JavaVM/jdk71/64bit |
30/09/22 |
16 | IBM Technology for Java 8.0 32bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit | |
17 | IBM Technology for Java 8.0 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit | |
19 | IBM Technology for Java 11 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk11/64bit |
IBM i 7.2
Opt. | JDK | java_home | EOS |
11 | IBM Technology for Java 6.0 32bit IBM Technology for Java 6 2.6 32bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit /QOpenSys/QIBM/ProdData/JavaVM/jdk626/32bit |
31/12/17 |
12 | IBM Technology for Java 6.0 64bit IBM Technology for Java 6 2.6 64bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit /QOpenSys/QIBM/ProdData/JavaVM/jdk626/64bit |
31/12/17 |
14 | IBM Technology for Java 7.0 32bit IBM Technology for Java 7.1 32bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk70/32bit /QOpenSys/QIBM/ProdData/JavaVM/jdk71/32bit |
30/09/22 |
15 | IBM Technology for Java 7.0 64bit IBM Technology for Java 7.1 64bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk70/64bit /QOpenSys/QIBM/ProdData/JavaVM/jdk71/64bit |
30/09/22 |
16 | IBM Technology for Java 8.0 32bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit | |
17 | IBM Technology for Java 8.0 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit |
IBM i 7.1
Opt. | JDK | java_home | EOS |
8 | IBM Technology for Java 5.0 32bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk50/32bit | 31/12/17 |
9 | IBM Technology for Java 5.0 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk50/64bit | 31/12/17 |
11 | IBM Technology for Java 6.0 32bit IBM Technology for Java 6 2.6 32bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit /QOpenSys/QIBM/ProdData/JavaVM/jdk626/32bit |
31/12/17 |
12 | IBM Technology for Java 6.0 64bit IBM Technology for Java 6 2.6 64bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit /QOpenSys/QIBM/ProdData/JavaVM/jdk626/64bit |
31/12/17 |
13 | IBM Technology for Java 142 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk14/64bit | 31/12/17 |
14 | IBM Technology for Java 7.0 32bit IBM Technology for Java 7.1 32bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk70/32bit /QOpenSys/QIBM/ProdData/JavaVM/jdk71/32bit |
30/09/22 |
15 | IBM Technology for Java 7.0 64bit IBM Technology for Java 7.1 64bit |
/QOpenSys/QIBM/ProdData/JavaVM/jdk70/64bit /QOpenSys/QIBM/ProdData/JavaVM/jdk71/64bit |
30/09/22 |
16 | IBM Technology for Java 8.0 32bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit | |
17 | IBM Technology for Java 8.0 64bit | /QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit |
Bibliografia
- Redbook “IBM technology for Java Virtual Machine in IBM i5/OS” http://www.redbooks.ibm.com/redbooks/pdfs/sg247353.pdf
- IBM Technical document “Default Extension (Ext) Directory Paths for the IBM Classic and Technology for Java JVMs”: http://www-01.ibm.com/support/docview.wss?uid=nas8N1011798
- Video IBM i Global support “The WRKJVM command”: https://www.youtube.com/watch?v=O9r3yMxUS6M
- IBM i and Java support, Steve Will, 11-dic-2018: http://ibmsystemsmag.com/blogs/you-and-i/december-2018/ibm-i-and-java-support/
- Java products and options on IBM i: https://www.ibm.com/support/pages/node/1117869?myns=swgother&mynp=OCSWG60&mync=R&cm_sp=swgother-_-OCSWG60-_-R