
jdts: el paquete de tareas
connection: las conexiones a bases de datos
tasksgroup: las tareas a realizar
taskCommand: tarea de tipo comando
taskInsert: tarea de inserción
taskCopyRows: tarea de copiado de registros
transform: campos de origen y de destino
taskGetValues: almacena el valor de todos los registros en una variable por cada campo especificado
taskDeleteValues: elimina todos los registros dónde el valor de los campos especificados esté contenido en una variable
La configuración de jDTS puede realizarse desde un fichero XML y cargarse mediante la clase JDTSLoader.
El siguiente fichero define una conexión y un comando a ejecutar.
<jdts start="task0"> <connection id="conn1"> <class>org.gjt.mm.mysql.Driver</class> <string>jdbc:mysql://localhost/JDTS?user=user&password=pass</string> </connection> </jdts>
jdts
El elemento jdts
simboliza un objeto de la clase JDTS, que es el encargado de gestionar el LOG, las conexiones, y lanzar las diferentes tareas a realizar.
start: (obligatorio) es el nombre de la primera tarea a ejecutar.
connection
El elemento connection
simboliza un objeto de la clase DBConnection, que establece una posible conexión con una base de datos.
id: (obligatorio) es el identificador que se utilizará después para especificar a las tareas en qué base de datos (de cual a cual) deben actuar.
Elemento class: (obligatorio) es el nombre del driver JDBC.
Elemento string: (obligatorio) es la cadena de conexión a la base de datos.
<connection id="conn1"> <class>org.gjt.mm.mysql.Driver</class> <string>jdbc:mysql://localhost/JDTS?user=user&password=pass</string> </connection>
tasksgroup
El elemento tasksgroup
simboliza un objeto de la clase DTSTaskGroup, que se encarga de agrupar tareas concretas, y de gestionar el flujo de ejecución entre grupos de tareas.
Cada grupo de tareas puede agrupar una o varias tareas a realizar cuyo orden de lanzamiento sea irrelevante, y puede determinar cual será la siguiente tarea a lanzar.
id: (obligatorio) es el identificador que se utilizará para referirse a esta tarea.
onSuccess: (opcional) grupo de tareas a realizar si todo se ha ejecutado correctamente.
onError: (opcional) grupo de tareas a ejecutar si ha habido algún error.
onFinish: (opcional) grupo de tareas a ejecutar cuando se finalice la ejecución de todas las tareas.
Elementos task...: las tareas a realizar.
<tasksgroup id="task0" onFinish="task1"> <taskCommand conn="conn1"> <sql>DELETE FROM t_TableA</sql> </taskCommand> </tasksgroup>
taskCommand
El elemento taskCommand
simboliza un objeto de la clase DTSTaskCommand, que se encarga de ejecutar un comando (ALTER TABLE, DROP TABLE, DELETE, etc.) directamente en la base de datos.
id: (opcional) útil si vas a activar el LOG.
conn: (obligatorio) identificador de la conexión dónde debe ejecutarse.
Elemento sql: comando a ejecutar.
<tasksgroup id="task0" onFinish="task1"> <taskCommand conn="conn1"> <sql>DELETE FROM t_TableA</sql> </taskCommand> </tasksgroup>
taskInsert
El elemento taskInsert
simboliza un objeto de la clase DTSTaskInsert, que se encarga de realizar una inserción de un registro.
Su verdadera utilidad vendrá si algún día pueden manipularse variables entre tareas y grupos de tareas.
id: (opcional) útil si vas a activar el LOG.
conn: (obligatorio) identificador de la conexión dónde debe ejecutarse.
table: (obligatorio) tabla dónde se realizará la inserción.
Elemento fields: nombres de los campos, separados por comas.
Elemento values: valores de los campos, separados por comas.
<tasksgroup id="task0" onFinish="task1"> <taskInsert id="ins1d1" conn="conn1" table="t_TableA"> <fields>sText,nNumber</fields> <values>'Albin #1',1</values> </taskInsert> </tasksgroup>
taskCopyRows
El elemento taskCopyRows
simboliza un objeto de la clase DTSTaskCopyRows, que se encarga de realizar copiar registros entre tablas de la misma o de diferentes bases de datos.
Si no se define el elemento transform se considerará que son todos los campos que no sean autoincrement en el destino, y que los campos tienen el mismo nombre en ambas tablas.
id: (opcional) útil si vas a activar el LOG.
connSrc: (obligatorio) identificador de la conexión dónde debe realizarse la consulta.
connTrg: (obligatorio) identificador de la conexión dónde debe realizarse la inserción.
Elemento src-query: (obligatorio) consulta a realizar para obtener los registros.
Elemento trg-table: (obligatorio) tabla dónde serán insertados los registros.
Elemento transform: (opcional) nombres de los campos en origen y en destino.
<tasksgroup id="task0" onFinish="task1"> <taskCopyRows id="cr2d1" connSrc="conn1" connTrg="conn2"> <src-query>SELECT * FROM t_TableA</src-query> <trg-table>t_TableB</trg-table> </taskCopyRows> </tasksgroup>
transform
El elemento transform
simboliza un objeto de la clase DTSTransform, que se encarga de emparejar los campos de origen y de destino en un movimiento de registros.
Será mucho más útil cuando se puedan indicar transformaciones a realizar en el momento de la copia.
Elemento field atributo src: (obligatorio) nombre del campo en el origen.
Elemento field atributo trg: (obligatorio) nombre del campo en el destino.
<tasksgroup id="task0" onFinish="task1"> <taskCopyRows id="cr2d2" connSrc="conn1" connTrg="conn2"> <src-query>SELECT * FROM t_TableA</src-query> <trg-table>t_TableC</trg-table> <transform> <field src="sText" trg="sSomeText" /> <field src="nNumber" trg="nSomeNumber" /> </transform> </taskCopyRows> </tasksgroup>
taskGetValues
El elemento taskGetValues
simboliza un objeto de la clase DTSTaskGetValues, que se encarga de recoger en variables array el contenido de todos los registros de una consulta de los campos especificados.
Todos los valores se almacenan en memoria (en un Vector<String>), así que cuidado con utilizar consultas muy bestias.
id: (opcional) útil si vas a activar el LOG.
conn: (obligatorio) identificador de la conexión dónde debe realizarse la consulta.
Elemento var atributo name: (obligatorio) nombre de la variable.
Elemento var atributo value-field: (obligatorio) nombre del campo cuyos valores se desean almacenar.
<taskGetValues conn="conn1"> <query>SELECT * FROM t_TableA</query> <values> <var name="$aTexts" value-field="nNumber" /> </values> </taskGetValues>
taskDeleteValues
El elemento taskDeleteValues
simboliza un objeto de la clase DTSTaskDeleteValues, que se encarga eliminar los registros cuyo valor en un campo esté contenido en una variable.
id: (opcional) útil si vas a activar el LOG.
conn: (obligatorio) identificador de la conexión dónde debe realizarse la consulta.
table: (obligatorio) tabla cuyos registros van a eliminarse.
Elemento field atributo name: (obligatorio) nombre del campo.
Elemento field atributo equals-var: (obligatorio) nombre de la variable que contiene los valores que determinan qué registros eliminar.
<taskDeleteValues id="delval" conn="conn1" table="t_TableB"> <fields> <field name="nNumber" equals-var="$aTexts" /> </fields> </taskDeleteValues>
La misma tarea podría haberse configurado programáticamente con las siguientes líneas de código:
JDTS jdts; // El objeto JDTS que realiza las tareas
DBConnection dbConn1; // La conexión con la base de datos
DTSTaskGroup group1; // Un grupo de tareas
DTSTaskCommand taskCmd; // Una tarea de tipo comando
String sDriver = "org.gjt.mm.mysql.Driver";
String sConnStr = "jdbc:mysql://localhost/JDTS?user=user&password=pass";
jdts = new JDTS("task0");
dbConn1 = new DBConnection("conn1", sDriver, sConnStr);
group1 = new DTSTaskGroup("task1");
taskCmd = new DTSTaskCommand(dbConn1);
taskCmd.setCommand("DELETE FROM t_TableA");
group1.addTask(taskCmd); // Añadimos la tarea al grupo de tareas
jdts.addTaskGroup(group1); // Añadimos el grupo de tareas al objeto JDTS
jdts.addConnection(dbConn1); // Añadimos la conexión al objeto JDTS
jdts.run(); // Ejecutamos las tareas