Lotus Java Agent. Acceso al iSeries desde Domino en Java.

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×

En un post anterior os comentaba como acceder a los datos de la base de datos DB2 del iSeries desde un Agente Lotus Domino hecho en Lotus Script (este). Hoy os explico como hacer eso mismo desde un agente escrito en Java.

El utilizar un lenguaje u otro es únicamente por dos motivos, por preferencias de programación o por el entorno donde queremos ejecutarlos. Un agente escrito en Lotus Script sólo permite ejecutarlo desde un entorno cliente de Lotus, mientras que el escrito en Java podemos ejecutarlo desde el iSeries con el mandato SBMDOMCMD como os explicaba aquí.

Lotus Java Agent. Empecemos por las clases.

A la hora de hacer el agente Java para acceder a nuestra Base deDatos DB2 lo primero que tenemos que hacer es incluir en nuestro proyecto las clases java necesarias para todo lo relacionado con nuestro iSeries. Debeis añadir las siguientes clases

jt400.jar y util400.jar  que podemos encontrar en el directorio \QIBM\ProdData\HTTP\Public\jt400\lib

Notes.jar que podeis encontrar en el directorio \QIBM\ProdData\LOTUS\NOTES de vuestro servidor

db2_classes.jar, db2routines_classes.jar y sqlj_classes.jar que encontrareis en \QIBM\ProdData\Java400\ext

Para incluir las clases en nuestro proyecto debemos pinchar con la derecha en el titulo del proyecto, seleccionar propiedades del proyecto y vias de construcción. en la pestaña de bibliotecas tenemos la opción de añadir JAR externos.

Lotus Java Agent

Una vez cargadas las clases, creamos un nuevo agente en Java y empezamos a meter código.

Agente-Domino-Java

Lo primero, como es habitual, es  importar las clases de Lotus y Sql necesarias

import lotus.domino.*;
import java.sql.*;

Luego conectamos con la base de datos DB2 con el siguiente código, donde server es la dirección de nuestro servidor, user nuestro nombre de usuario y password nuestra clave.

DriverManager.registerDriver(new com.ibm.db2.jdbc.app.DB2Driver());
Connection dbConnect = DriverManager.getConnection(«jdbc:db2://» +server, user, password);
dbConnect.setTransactionIsolation(1);
dbConnect.setReadOnly(true);
Statement stmt = dbConnect.createStatement();

En este momento ya estamos conectados al iSeries, por lo que ya solo falta recuperar los datos de las tablas que necesitemos. Para ello usamos el siguiente código donde sql es un string con la sentencia SQL que queremos ejecutar.

ResultSet rs = stmt.executeQuery(sql);
rs.setFetchSize(1);

while (rs.next()) {

….. Proceso de registros leidos

}

Por último cerramos la conexión

stmt.close();
rs.close();
dbConnect.close();

Con este método podemos crear documentos Lotus Domino en una base de datos alojada en un iSeries en Java. Además, como he comentado antes, podemos llamarlo desde un programa CL con el mandato SBMDOMCMD, con lo que podemos automatizarlo y ejecutarlo dentro de cualquiera de nuestros programas.

Yo, por ejemplo, lo uso para generar las fichas de los artículos, que se preparan previamente con un programa ILERPG y que justo cuando termina hace una llamada al Agente para que actualice los datos en Domino.

Os pongo el ejemplo completo para que podáis estudiarlo y usarlo.


import lotus.domino.*;
import java.sql.*;

public class JavaAgent extends AgentBase {
   public void NotesMain() {
      try {

         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
         Database db = agentContext.getCurrentDatabase();
         String fichero = db.getFileName();
         Document doc;

         String server = "";
         String user = "";
         String password = "";

         DriverManager.registerDriver(new com.ibm.db2.jdbc.app.DB2Driver());
         Connection dbConnect = DriverManager.getConnection("jdbc:db2://" +server, user, password);
         dbConnect.setTransactionIsolation(1);
         dbConnect.setReadOnly(true);
         Statement stmt = dbConnect.createStatement();

         String sql = " ";
         sql = "SELECT * FROM articulos";
         ResultSet rs = stmt.executeQuery(sql);
         rs.setFetchSize(1);

         int Leidos = 0;
         byte PARCOD = 1;
         byte PARDES = 2;

         while (rs.next()) {

            Leidos=Leidos+1;
            Document nuevoDoc = db.createDocument();
            nuevoDoc.replaceItemValue("form","fArticulos");
            nuevoDoc.replaceItemValue("fArticulos_CodigoInterno",rs.getString(PARCOD).trim());
            nuevoDoc.replaceItemValue("fArticulos_Descripcion",rs.getString(PARDES).trim());

            nuevoDoc.save(true);
            nuevoDoc.recycle();

         }
         stmt.close();
         rs.close();
         dbConnect.close();
      } catch(Exception e) {

         System.out.print(e);
         System.out.print(e.getMessage());
         e.printStackTrace();
      }
}

JoBenCa

http://jobenca.es

Administrador y desarrollador de sistemas IBM System i y curioso de todo tipo de tecnología.

View more posts from this author

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Google+ 0 0 Flares ×