Utilizando Java desde RPG - RPG Meets Java
En los últimos años, IBM ha potenciado el lenguaje RPG en AS/400 con la finalidad de ofrecer nuevas y mejores oportunidades a desarrolladores y arquitectos de software, para utilizar las ventajas del código abierto y la potencia de otros lenguajes de programación como Java.
En este sentido, una de las principales mejoras que ha tenido RPG, es la facilidad para utilizar objetos creados en clases Java. En este artículo, les presento como utilizar los objetos Java en RPG.
Para referenciar objetos Java en RPG se debe especificar las variables de objetos Java en RPG del modo siguiente:
Modo formato Fijo:
D Cad S O CLASS(*JAVA:'java.lang.String')
Modo Free-Format:
DCL-S Cad OBJECT(*JAVA:'java.lang.String');
Constructores
Las variables declaradas como un objeto, son solo de referencia. Con la finalidad de utilizar esas referencias a objetos, se necesita crear una instancia a ese objeto. Para poder utilizar el objeto, se debe acceder al método constructor de la clase. Cuando se crea el objeto en la memoria, el programa utiliza la variable de referencia para identificar el lugar de la memoria donde se encuentra el objeto.Un método contructor es invocado en un programa RPG utilizando la palabra clave *CONTRUCTOR cuando se define el prototipo en EXTPROC.
Por ejemplo, para crear la referencia al constructor del objeto String en RPG, se debe realizar lo siguiente:
Modo formato Fijo:
D cl_Cad PR extproc(*JAVA:
D 'java.lang.String':
D *CONSTRUCTOR)
D Cadena 65535A varying const
D getBytes PR 65535A EXTPROC(*JAVA:
D 'java.lang.String':
D 'getBytes') VARYING
Modo free-format:
DCL-PR cl_Cad extproc(*JAVA:'java.lang.String':*CONSTRUCTOR);
Cadena varchar(65535) const;
End-pr;
DCL-PR getBytes varchar(65535) varying EXTPROC(*JAVA:'java.lang.String':'getBytes') END-PR;
D getBytes PR 65535A EXTPROC(*JAVA:
D 'java.lang.String':
D 'getBytes') VARYING
Modo free-format:
DCL-PR cl_Cad extproc(*JAVA:'java.lang.String':*CONSTRUCTOR);
Cadena varchar(65535) const;
End-pr;
DCL-PR getBytes varchar(65535) varying EXTPROC(*JAVA:'java.lang.String':'getBytes') END-PR;
El Típico "Hola Mundo"
Todo programa Java debe ejecutarse sobre una instancia de la JVM. En este caso para RPG sucede lo mismo. Cuando RPG intenta realizar el llamado a métodos Java, el sistema valida si una instancia de JVM ha sido activada, sino existe, el sistema la ejecuta automaticamente.
Vamos a ver un ejemplo sencillo
ADDENVVAR ENVVAR(CLASSPATH) VALUE('/misclases/*')
/free
CTL-OPT THREAD(*SERIALIZE);
dcl-s fld varchar(20);
cad=cl_Cad('Hola Mundo');
CTL-OPT THREAD(*SERIALIZE);
dcl-s fld varchar(20);
cad=cl_Cad('Hola Mundo');
fld=getBytes(cad);
DSPLY fld;
*inlr = *ON;
/end-free
Nota final: si se están utilizando clases propias de Java se debe configurar la variable de ambiente CLASSPATH. Por ejemplo:ADDENVVAR ENVVAR(CLASSPATH) VALUE('/misclases/*')
0 comentarios:
Publicar un comentario