The following sections provide a range of tools and libraries for integrating PL/I on OpenVMS with other native languages. Although all native languages on OpenVMS adhere to the common calling standard, there are some situations where building up the necessary modules and include files can be a large and drawn out task. The tools offered here attempt to ease this difficulty.
The following tools and libraries are currently available:
- J2VMS, a interface between the Java Virtual Machine and the native calling standard of OpenVMS,
- SDLEXT, a collection of Structure Definition Language (SDL) compiler backends that generate output for Java (to be used with J2VMS) and other languages;
Use the menu on the left hand side to navigate to the language integration you are interested in.
In many situations the tools presented here are as useful to other languages as they are PL/I. For example, the J2VMS Java->OpenVMS interface can be used to call routines and manipulate data structures from any language.
The following is a growing collection of complete working examples that attempt to properly demonstrate the use of these integration tools.
This example demonstrates the calling of OpenVMS native routines from Java, as well as the manipulation of data structures. The original program is an example PL/I application called PHONE (not to be confused with the OpenVMS PHONE utility). It is a simple progam that presents an example for file I/O and screen management as a phone book.
For the purpose of demonstrating the integration utilities the file access routines were extracted and put into a run-time library. A Java-Swing application was then developed that uses this RTL to access and update the phone book file.
The main objectives were to:
- move the application to a Java-Swing based frontend,
- re-use the existing file access routines,
- avoid any major changes to the original application,
- allow the original application to continue being used in parallel with the new Java application.
All of these objectives were met and the whole process is demonstrated in the article, Calling Native OpenVMS Routines from Java.
A backup saveset containing the full source for both the PL/I and Java-Swing applications can be downloaded here. The saveset is also available inside a ZIP file here.
|PHONE - The original PL/I application
||Some helpful constants (include file).
||Utility routines for working with the phone book file.
||Database entry record definition (include file).
||Keypad constants (include file).
||Menu operation constants (include file).
||Phone book database file.
||Screen handling support routines.
||The PHONE utility (not to be confused with the OpenVMS PHONE utility) is a simple phone/address book utility that maintains it's data in an indexed file. It originally appeared in the Kednos PL/I for OpenVMS example program library that ships with the compiler.
The following build instructions, as well as building the PHONE utility, also build the run-time library necessary to implement the jPhone utility shown below.
$ TYPE BUILD_PHONE.COM
$ PLI PHONE
$ PLI DATABASE
$ PLI SCREEN
SYMBOL_VECTOR = ( -
OPEN_PHONEBOOK = PROCEDURE, -
CLOSE_PHONEBOOK = PROCEDURE, -
GET_A_RECORD = PROCEDURE, -
GET_A_MONTH_RECORD = PROCEDURE, -
GET_A_DATE_RECORD = PROCEDURE, -
WRITE_A_RECORD = PROCEDURE, -
DELETE_A_RECORD = PROCEDURE -
$ DEFINE/NOLOG DATABASE_RTL SYS$DISK:DATABASE_RTL
$ LINK PHONE,SCREEN,SYS$INPUT/OPTIONS
$ IF (F$SEARCH("PHONE.DAT") .EQS. "") THEN CREATE/FDL=PHONE.FDL
$ EXIT 1
|jPhone - The Java/Swing version of PHONE.
||Java class interface to the native DATABASE_RTL run-time library.
||Java class generated from DATABASEDEF.SDL. It details the record structure of the phone book database file and the native routines found in DATABASE_RTL.
||SDL header file, generated from DATABASE.PLI (above).
||Panel for manipulating phone book entries.
||Panel for querying the phone book for upcoming events.
||This application is the Java/Swing based version of the PHONE utility. It uses J2VMS to interface with the DATABASE_RTL run-time library so it can manipulate the same data file in a way that can be viewed by either the Java or native application.
$ TYPE BUILD_JPHONE.COM
$ set noon
$ on control_y then goto bail_out
$ set process/parse_style=extended
$ define/nolog decc$efs_case_preserve enable
$ define/nolog decc$efs_case_special enable
$ define/nolog decc$efs_charset enable
$ define/nolog decc$argv_parse_style enable
$ jc = "''javac' -classpath - "
+ """/sys$library/j2vms$vs.jar:./bin"" -d ""./bin"""
$ set verify
$ $ ! Database Interface
$ jc Database.java
$ jc DATABASEDEF.java
$ ! Supporting classes
$ jc UpperCaseField.java
$ ! Application
$ jc EntryPanel.java
$ jc EventPanel.java
$ jc JPhone.java
$ set noverify
$ jphone == "''java' -classpath " -
+ """/sys$library/j2vms$vs.jar:./bin"" com.kednos.jphone.JPhone"
$ write sys$output "Type: ""jphone"" to run"
$ set noverify
$ exitt 1