Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
problema con java y mainframe
Enviado por aip el día 31 de enero de 2006
Tengo el siguiente problema. Tengo una aplicación que se comunica a un mainframe (MVS os/390 IBM) la manera en que se comunica es a través de PLD\'s y lo que hacen es enviarme una respuesta en texto separando cada variable con tildes (~) después que le envíe una solicitud también con campos o variables separados con tildes.
El fragmento de código que muestro a continuación está implementado dentro de un servlet y funciona muy bien.
El servidor Web es WebSphere versión 5 y está levantado dentro del mainframe (WebSphere para mainframe). Las variables que defino son:
setUrl(\"local:\");
setPuerto(0);
setDirectorio(\"//home//iddahm//\");
Pero el problema es el siguiente:
Debo hacer un demonio con java y considero que tengo dos caminos:
camino 1: hacer una aplicación con Java y hacer que se ejecute en el tiempo que lo programe.
camino 2: hacer una aplicación que pueda montarla dentro del servidor web (en este caso WAS)
Para el camino 1 ya hice la aplicación pero por más que le hago no funciona porque no sé cuales son todos los elementos que necesita para ejecutarse fuera de WAS.
Para el camino dos, no se me ocurre cómo hacer una demonio para colocarlo dentro de WAS.
Y podría haber una tercera: usando las bibliotecas para MQ que es algo que apenas estoy empezando a manejar.
Ojalá puedan ayudarme dándome tips o aconsejándome alguna fuente donde venga información al respecto.
Las bibliotecas usadas son las de CTG
1 private MensajeRespuesta ejecutaPLD(String cuenta){
2 final String PROGRAMA = \"IW001001\";
3 MensajeEnvio msgEnv = new MensajeEnvio(cuenta);//crea mensaje
4 MensajeRespuesta msgRes = null;
5 byte[] abCommArea = new byte[12284];//
6 for(int i=0; i<abCommArea.length;i++)
7 abCommArea[i] = 0;
8 try{
9 System.arraycopy(
10 msgEnv.getMsg().getBytes(\"IBM-1047\"), 0,
11 abCommArea, 4, msgEnv.getMsg().length());
12 JavaGateway jgaConn = new JavaGateway();
13 jgaConn.setURL(getUrl());
14 jgaConn.setPort(getPuerto());
15 jgaConn.open();
16 ECIRequest eciRequest =
17 new ECIRequest(\"CICSDRG1\",
18 \"HF945016\",
19 null,
20 PROGRAMA,
21 abCommArea, //mensaje de texto separado por tildes
22 ECIRequest.ECI_NO_EXTEND,
23 ECIRequest.ECI_LUW_NEW);
24 jgaConn.flow(eciRequest);
25 String msgResultado = (new String(abCommArea,\"Cp037\")).trim(); recibo mensaje separado por tildes
26 if(out != null){
27 out.println(\"<br>Entra a la opción con out\");
28 msgRes = new MensajeRespuesta(msgResultado,out);
29 }
30 else{
31 msgRes = new MensajeRespuesta(msgResultado);
32 }
33 msgRes.convierte();
34 jgaConn.close();
35 }
36 catch(UnsupportedEncodingException e){
37 System.err.println(\"Exception al codificar el mensaje\");
38 System.err.println(e.getMessage());
39 e.printStackTrace();
40 }
41 catch(IOException e){
42 System.err.println(\"Exception al abrir url o puerto\");
43 System.err.println(e.getMessage());
44 e.printStackTrace();
45 }
46 catch(Exception e){
47 System.err.println(\"Exception dentro del metodo ejecutaPLD\");
48 System.err.println(e.getMessage());
49 e.printStackTrace();
50 }
51 finally{
52 return msgRes;
53 }
54 }
Enviado por neossoftware el día 31 de enero de 2006
Hola QUe tal:
Lo que si te recomendaria que usaras es MQ Series, ya que es bastante potente y muy flexible, ademas el Api de MQI para Java es bastante sencillo de usar. Cualquier duda por aqui andamos.
He leido tu problema y la respuesta es muy sencilla
Primero que nada define donde reside tu aplicacion esto lo puedes realizar de la siguiente manera.
Si esta dentro (WAS Mainframe) o si esta fuera
Despues crea una clase con un objeto public static Set singleton(Object o) para que sea invocado como unica instancia de tu aplicacion, de esta manera tendras sólo un objeto para todas las comunicaciones que se habran al MVS OS/390; pues de otro modo estarias creando un objeto por cada conexion.
En esta clase Singleton ubica PUERTO, USR y PASSW
Despues crea un directorio en tu HOME del segmento OMVS del Mainframe en donde residiran tus .jar
Ahí tendras tu demonio el cual lo puedes ejecutar y controlar desde el WAS con la clase
(getClass().getResourceAsStream())
por medio de un fichero de configuracion.
Ya sabes sólo crea la interface necesaria para recuperar los datos