| Categoría : Programación
Autor : Edwin
Título : Web Service Java con Programas AS/400
Descripción del truco:
Describe como podemos llamar a un programa AS/400 (CL,
PGM u otro) mediante un Web Service. En este ejemplo
se llama a un programa que ingresa y sale un cadena
de caracteres /****
/* Se debe crear un archivo donde se ponga la interface de las clases
/************
import java.rmi.*;
public interface iSeriesService
extends Remote {
// Función que envia datos al AS/400 en Forma de Trama
public String enviarDatos(String pServidor, String pUsuario,
String pPassword, String pLibreria,
String pTipoProg, String pPrograma,
String pTrama) throws RemoteException;
}
/**********
/* este es el archivo que implementa la clase
/**************************************
import java.rmi.*;
import java.util.Vector;
import com.ibm.as400.access.*;
/**
*
* @author EDGO
*/
public class iSeries
implements iSeriesService {
static private AS400 servidor[];
private ProgramCall cmd;
private String sServidor=nombre de Servidor;
private String sUsuario=Usuario de Conexion;
private String sPassword=Clave de Conexion;
private int nNumConex=Numero de Conexiones con AS/400;
/**
* Método que envia una Cadena de Datos al Programa Manejador Devuelve
* una cadena con el resultado
*
* @param pServidor Nombre del Servidor iSeries
* @param pUsuario Uusario Atorizado
* @param pPassword Clave de Accesso
* @param pLibreria Nombre de la Libreria o Biblioteca
* @param pTipoProg Tipo de Programa Nativo iSeires
* @param pPrograma Nombre del Programa
* @param pTrama Cadena de Caracteres
* @throws RemoteException
* @return String
*/
public String enviarDatos(String pServidor, String pUsuario,
String pPassword, String pLibreria,
String pTipoProg, String pPrograma,
String pTrama) throws RemoteException {
String sRpta = "";
int nConexion;
if (servidor == null) {
creaConexion();
}
//crea un aleatorio para enviar la conexion
nConexion = (int) (Math.random() * nNumConex);
String sNombre = servidor[nConexion].getSystemName();
sNombre = sNombre.toUpperCase();
if (sNombre.compareTo(pServidor) == 0) {
try {
String c = "/QSYS.LIB/" + pLibreria + ".LIB/" + pPrograma + "." +
pTipoProg;
ProgramParameter[] parmList = new ProgramParameter[1];
AS400Text parm1 = new AS400Text(39999);
parmList[0] = new ProgramParameter(ProgramParameter.PASS_BY_REFERENCE,
parm1.toBytes(pTrama), 39999);
ProgramCall cmd = new ProgramCall(servidor[nConexion], c, parmList);
try {
if (cmd.run() != true) {
// Reporte de las fallas
System.out.println("Programa ha fallado!");
// muestra mensajes de error
AS400Message[] messagelist = cmd.getMessageList();
for (int i = 0; i < messagelist.length; ++i) {
System.out.println(messagelist[i]);
}
}
else {
AS400Text text = new AS400Text(39999);
sRpta = (String) text.toObject(parmList[0].getOutputData());
sRpta.trim();
parmList = null;
cmd = null;
}
}
catch (Exception ex) {
sRpta = "Error:" + ex.getMessage();
ex.printStackTrace();
}
}
catch (Exception ex1) {
sRpta = "Error:" + ex1.getMessage();
ex1.printStackTrace();
}
}
return sRpta;
}
private void creaConexion() {
int i;
servidor = new AS400[nNumConex];
for (i = 0; i < nNumConex; i++) {
servidor[i] = new AS400(sServidor, sUsuario, sPassword);
}
}
}
En el programa AS/400 se debe monitorearse los /*errores
(con las rutinas de error o con la sentencia /*Monitor
en caso sea RPG o monitoreo de error en /*caso sea CL)
a fin de que el programa no se caiga /*pero que reporte
el error
Ver
código
Fecha 29-07-2004
Tienes algún truco que quieras compartir con todos
los profesionales de Recursos iSeries AS400?.Envianoslo
y si resulta seleccionado te enviaremos un vale de Amazon
por valor de 50$
|