Agricultura Precision Soft de Gestion Agroganadera
Agricultura Precision Soft de Gestion Agroganadera
Agricultura Precision Soft de Gestion Agroganadera
Corrientes - Argentina
Julio - 2010
A mi familia, esposa e hija.
Prefacio
Objetivos Logrados
Se han alcanzado plenamente la totalidad de los objetivos planteados para
el presente trabajo.
Aplicación desarrollada.
1. La Agro-Ganadería en la Actualidad 1
1.1. La Agricultura y la Ganadería en el Mundo y en Argentina . . 1
1.2. La Agricultura, la Máquina Reemplaza al Músculo . . . . . . . 2
1.2.1. Agricultura de Precisión . . . . . . . . . . . . . . . . . . 4
1.3. La Evolución de la Ganadería . . . . . . . . . . . . . . . . . . . 5
1.3.1. Ganadería Extensiva e Intensiva . . . . . . . . . . . . . 7
3. El Lenguaje Java 34
3.1. Introducción a su Codificación . . . . . . . . . . . . . . . . . . 34
ÍNDICE GENERAL
4. Los Servlets 74
4.1. Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.1.1. Principios de Codificación de Servlet . . . . . . . . . . 75
4.1.2. Ciclo de Vida del Servlet . . . . . . . . . . . . . . . . . 76
4.1.3. Instanciación e Inicialización . . . . . . . . . . . . . . . 76
4.1.4. Servicio de Demanda . . . . . . . . . . . . . . . . . . . . 78
4.1.5. Terminación . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.1.6. Modelos de Acceso JSP . . . . . . . . . . . . . . . . . . 78
4.1.7. Procesadores JSP . . . . . . . . . . . . . . . . . . . . . . 79
4.1.8. Compilación Batch de Archivos JSP . . . . . . . . . . . 81
4.1.9. Desarrollando Aplicaciones . . . . . . . . . . . . . . . . 81
4.1.10. Fases de Inicialización y de Terminación . . . . . . . . . 82
4.1.11. Rasgos de Java Servlet API . . . . . . . . . . . . . . . . 82
4.1.12. Patrones y Guías de Servlets/JSP . . . . . . . . . . . . 83
6. Eclipse 109
ÍNDICE GENERAL
7. Tomcat 114
7.1. Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
7.2. Entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
7.3. Estado de su Desarrollo . . . . . . . . . . . . . . . . . . . . . . 115
7.4. Estructura de Directorios . . . . . . . . . . . . . . . . . . . . . 115
7.5. Características del Producto . . . . . . . . . . . . . . . . . . . . 115
7.6. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
9. Conclusiones 171
9.1. Conclusiones Acerca de las Tecnologías y Software Utilizados . 171
9.2. Líneas Futuras de Acción . . . . . . . . . . . . . . . . . . . . . 172
Bibliografía 173
ÍNDICE DE FIGURAS
Capítulo 1
La Agro-Ganadería en la
Actualidad
1
CAPÍTULO 1. LA AGRO-GANADERÍA EN LA ACTUALIDAD 2
Banderilleros satelitales.
Computadoras de pulverización.
Monitores de siembra.
Balanzas electrónicas.
Software de mapeo.
Sin embargo, hasta ahora no era posible estudiar cada uno de estos factores
debido a que no existía la tecnología necesaria para ello. Gracias al desarrollo
de lo que conocemos como “nuevas tecnologías” se puede acometer hoy
día el estudio y la gestión de una explotación agrícola de forma integral, con-
siderando el uso de agroquímicos localizada a la zona que realmente hace falta
y a la dosis correcta.
La nutrición animal.
La sanidad animal.
La implantación de pasturas.
La fertilización.
Ganadería Extensiva
Menor eficiencia.
Ganadería Intensiva
Entre sus ventajas se destaca una elevada productividad, que tiene co-
mo contraparte la gran contaminación que genera, mediante la aplicación de
múltiples tecnologías y las formas de pensamiento surgidas del capitalismo.
11
CAPÍTULO 2. CONCEPTOS BÁSICOS DE JAVA 12
Orientado a objetos.
Simple.
Distribuido.
Flexible.
Independiente de la plataforma.
Robusto.
Multithreading.
Cliente-servidor.
Es simple.
Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las ca-
racterísticas menos usadas y más confusas de éstos. C++ es un lenguaje que
padece falta de seguridad, pero C y C++ son lenguajes más difundidos, por
ello Java se diseñó para ser parecido a C++ y así facilitar un rápido y fácil
aprendizaje.
Es distribuido.
Es robusto.
Es Seguro.
que incorpora objetos que permiten acceder a archivos en forma remota (via
URL por ejemplo).
Es Portable (multiplataforma).
Windows/95 y /NT.
Power/Mac.
Unix (Solaris, Silicon Graphics, ...).
La compatibilidad es total:
CAPÍTULO 2. CONCEPTOS BÁSICOS DE JAVA 17
Dinámico.
Para evitar que los módulos de bytecodes o los objetos o nuevas clases,
tengan que ser traídos de la red cada vez que se necesiten, se implementan las
opciones de persistencia, para que no se eliminen cuando se limpie la caché de
la máquina.
4. Java es un lenguaje y por lo tanto puede hacer todas las cosas que puede
hacer un lenguaje de programación: cálculos matemáticos, procesadores
de palabras, bases de datos, aplicaciones gráficas, animaciones, sonido,
hojas de cálculo, etc.
5. Si lo que interesa son las páginas Web, no tienen que ser estáticas, porque
se les pueden poner toda clase de elementos multimedia, permitiendo un
alto nivel de interactividad, sin tener que invertir tanto en paquetes de
multimedia.
Pero en general, Java posee muchas ventajas y mucha fuerza. Con este
lenguaje se pueden hacer muchas cosas interesantes. Está de moda en cualquier
medio computacional, y se apuesta a futuro con Java.
2.2.1. JavaScript
No se precompila.
CAPÍTULO 2. CONCEPTOS BÁSICOS DE JAVA 21
2.2.3. Applets
Son programas Java que corren bajo el entorno de un browser (o del ap-
pletviewer, que es el visualizador de applets de Sun.)
En sí los applets y Java standalone son el mismo lenguaje, pero cambia un
poco la forma en que se implementa el objeto principal (la aplicación).
Así los “applets” de una web, son programas diseñados para ser ejecutados
en una página Web; pueden ejecutarse en cualquier máquina que se conecte
a ella independientemente de qué sistema operativo emplee (siempre que el
ordenador en cuestión tenga instalada una JVM (Máquina Virtual de Java)).
La definición más extendida de applet, indica que un applet es “una pe-
queña aplicación accesible en un servidor Internet, que se transporta por la
red, se instala automáticamente y se ejecuta en ese lugar como parte de un
documento web”. La definición establece el entorno (Internet, Web, etc.).
Un applet trata de ser una aplicación pretendidamente corta (no ocupar
más de un gigabyte) basadándose en un formato gráfico sin representación
CAPÍTULO 2. CONCEPTOS BÁSICOS DE JAVA 22
Dado que un applet es una míni aplicación Java diseñada para ejecutarse
en un navegador Web, no necesita preocuparse por un método main() ni en
dónde se realizan las llamadas. Otra diferencia de Java con el lenguaje C. Es
que no hay función main, ya que los applets no lo necesitan. La función main
se encuentra “escondida” en el programa que cargó la página html. En los
applets no hay una función que sea llamada después de otra, sino que todo
gira en torno al tratamiento de los eventos que se produzcan. Es decir que
un applet está esperando por una serie de eventos, como la pulsación de una
tecla, el movimiento del ratón, o la pulsación de alguna de la teclas del ratón.
Y recibido el evento, responder con el método adecuado.El applet asume que
el código se está ejecutando desde dentro de un navegador.
El appletviewer se asemeja al míni navegador. Espera como argumento el
nombre del fichero HTML que debe cargar, no se le puede pasar directamente
un programa Java. Este fichero HTML debe contener una marca que especifica
el código que cargará el appletviewer.
CAPÍTULO 2. CONCEPTOS BÁSICOS DE JAVA 23
Los programas Java son otro recurso más, como pueden ser una página
HTML o un archivo gráfico. Al igual que estos últimos viajan desde el servidor
a la máquina cliente para ejecutarse en ésta. El lugar más frecuente donde se
encuentra el lenguaje Java, es en los exploradores o navegadores (browsers) de
Internet.
La WWW es la aplicación más popular en Internet, y causante de la ex-
plosión de la red de redes. Basa su existencia en dos principales aplicaciones:
Los clientes.
Seguridad
transitorios o de configuración.
Reproducir sonidos.
Esta máquina no es única, sino que hay una por cada plataforma y, en
realidad, cada browser que implementa Java tiene la suya. Así, el Microsoft
Explorer usará una máquina propia en Windows, mientras que el Netscape
Navigator usará otra máquina, que variará de Windows a UNIX.
Todas tienen la misma funcionalidad (o deberían). Tanto el usuario como
los programadores no deberían preocuparse por las distintas implementaciones.
Sin embargo, hay quejas de los desarrolladores, originadas en las pequeñas
CAPÍTULO 2. CONCEPTOS BÁSICOS DE JAVA 27
Además de la máquina virtual, cada browser instala una serie de clases, lis-
tas para usar, que Java espera tener disponibles en cualquier plataforma. Esas
clases tienen una funcionalidad definida, que no debería sufrir modificaciones.
Netscape y Microsoft
máquina genérica. Claro que esto no es muy eficiente, entonces Netscape como
Hotjava o Explorer, al ejecutar el código por primera vez, lo van compilando
(mediante un JIT: Just In Time Compiler), así al crear el código ya está
compilado específicamente para la máquina huésped.
El lenguaje de esa máquina genérica es público, y si uno quisiera hacer un
intérprete Java para otro sistema operativo sólo tendría que implementarlo y
pedir a Sun la aprobación (que verifique que cumpla con los requisitos de Java
en interpretación de cada instrucción, seguridad y otros).
“aplicaciones”.
2.3.4. HotJava
mente del sistema elegido, se puede pensar que un thread es algo así como el
lugar de ejecución de un programa.
Se debe crear una variable (instancia) del tipo Thread, que permita ac-
ceder y manejar el thread.
servidor de las oficinas centrales, hasta los servidores de las delegaciones, las
estaciones de trabajo de los programadores y las PC’s.
Las aplicaciones que se crean en grandes empresas deben ser más efectivas
que eficientes; es decir, conseguir que el programa funcione y el trabajo salga
adelante es más importante que el hacerlo eficientemente. Esto es una realidad
de la programación corporativa.
Java al ser un lenguaje más simple que cualquiera de los que ahora están
de moda para los programadores, permite concentrarse en la mecánica de la
aplicación, en vez de pasarse horas y horas incorporando API’s “Interface de
Programación de Aplicaciones” para el control de las ventanas, controlando
minuciosamente la memoria, sincronizando los ficheros de cabecera y corrigien-
do los mensajes del linker.
Java tiene su propio toolkit para interfaces, maneja por sí mismo la memo-
ria que utilice la aplicación, no permite ficheros de cabecera separados (en
aplicaciones puramente Java) y solamente usa enlace dinámico.
Muchas de las implementaciones de Java actuales son puros intérpretes.
Los bytecodes son interpretados por el sistema run-time de Java, la Máquina
Virtual Java (JVM ), sobre el ordenador del usuario.
Mantenimiento y Soporte
Uno de los problemas más conocidos que ocurre con el software corporativo
es la demanda de mantenimiento y realimentación. Java no es, ciertamente, la
solución para el problema del mantenimiento, pero es un lenguaje que posee
varias características que harán la vida más fácil a los desarrolladores y man-
tenedores de aplicaciones. [2]
Capítulo 3
El Lenguaje Java
Objetos.
Clases.
Métodos.
Subclases.
Herencia simple.
Enlace dinámico.
Encapsulamiento.
34
CAPÍTULO 3. EL LENGUAJE JAVA 35
Manejo de archivos.
Comunicación de datos.
Acceso a la red Internet.
Acceso a bases de datos.
Interfaces gráficas.
import java.awt.*;
import java.lang.String;
import java.lang.Integer;
import java.awt.event.WindowEvent;
import java.util.*;
import java.awt.TextField;
public class Simula extends Frame implements ActionListener,ItemListener{
MenuBar barra;
m1 =new Menu(“Archivo”);
barra.add(m1);
m2 =new Menu(“Ver”);
barra.add(m2);
....
public static void main(String argv [ ]){
Simula menus = new Simula();
menus.setTitle(“Simulación de Redes”);
menus.setVisible(true);
}
}
Aparece una clase que contiene el programa principal Simula (aquel que
contiene la función main()) y algunas clases de usuario (las específicas de la
aplicación que se está desarrollando) que son utilizadas por el programa prin-
cipal. La aplicación se ejecuta por medio del nombre de la clase que contiene
la función main(). Las clases de Java se agrupan en packages, que son libr-
erías de clases. Si las clases no se definen como pertenecientes a un package,
se utiliza un package por defecto (default) que es el directorio activo.
CAPÍTULO 3. EL LENGUAJE JAVA 38
3.3.1. Clase
public FuncionActivacion () {
3.3.2. Herencia
3.3.3. Interface
3.3.4. Package
package myprojects.simula;
import myprojects.calculos.*;
import myprojects.interfase.*;
CAPÍTULO 3. EL LENGUAJE JAVA 41
Las variables miembro de una clase declaradas como public son accesi-
bles a través de una referencia a un objeto de dicha clase utilizando el
operador punto (.).
variable = expression;
Los operadores más (+) y menos (-) unarios sirven para mantener o cam-
biar el signo de una
variable, constante o expresión numérica. Su uso en Java es el estándar de
estos operadores.
{entradaEntrenamiento[i][j] = paresEntrenamiento[i][j];
{salidaEntrenamiento[i][j] = paresEntrenamiento[i]
[j+numeroNeuronasEntrada];
Nombre Sintáxis
Postfijos [ ] .(params) expr++ expr-
Unarios ++expr —expr +expr -expr !
De creación (type) expr
Multiplicativo * /%
Adición +-
Shift << >> >>>
Relacional <> <= >= instanceof
Igualdad == !=
AND &
Or Excluyente ^
Or Incluyente |
Logico AND &&
Logico OR ||
Condicional ?:
Asignación = += -= *= /= %= &= ^= |= <<= >>= >>>=
i = 0; j = 5; x = i + j;
3.5.2. Comentarios
continuación de una instrucción que debe ser ejecutada. Otra forma de incluir
comentarios consiste en escribir el texto entre los símbolos “ /* */ ”. Este
segundo método es válido para comentar más de una línea de código. Por
ejemplo:
Comentarios Iniciales
/*
* Nombre de la clase
* Versión
* Copyright
*/
CAPÍTULO 3. EL LENGUAJE JAVA 52
import java.applet.*;
import java.awt.Graphics;
3.5.5. Bifurcaciones
Bifurcación if
Las llaves {} sirven para agrupar en un bloque las sentencias que se han
de ejecutar, y no son necesarias si sólo hay una sentencia dentro del if.
Bifurcación if else
3.5.6. Bucles
Bucle while
Bucle for
Bucle do while
do{
problema.fijoVector(vectorDis);
step++;
problema.fijoVector(vectorDis);
Sentencia return
Exception
2. Herencia: Una clase puede derivar de otra (extends), y en ese caso hereda
todas sus variables y métodos. Una clase derivada puede añadir nuevas
variables y métodos y/o redefinir las variables y métodos heredados.
2. Si una clase deriva de otra (extends), hereda todas sus variables y méto-
dos.
3. Java tiene una jerarquía de clases estándar de la que pueden derivar las
clases que crean los usuarios.
CAPÍTULO 3. EL LENGUAJE JAVA 58
4. Una clase sólo puede heredar de una única clase (en Java no hay herencia
múltiple). Si al definir una clase no se especifica de qué clase deriva, por
defecto la clase deriva de Object. La clase Object es la base de toda la
jerarquía de clases de Java.
5. En un fichero se pueden definir varias clases, pero en un fichero no puede
haber más que una clase public. Este fichero se debe llamar como la clase
public que contiene con extensión *.java. Con algunas excepciones, lo
habitual es escribir una sola clase por fichero.
6. Si una clase contenida en un fichero no es public, no es necesario que el
fichero se llame como la clase.
7. Los métodos de una clase pueden referirse de modo global al objeto de
esa clase al que se aplican por medio de la referencia this.
8. Las clases se pueden agrupar en packages, introduciendo una línea al
comienzo del fichero (package packageName;). Esta agrupación en pack-
ages está relacionada con la jerarquía de directorios y ficheros en la que
se guardan las clases.
Métodos de Objeto
Los métodos son funciones definidas dentro de una clase. Salvo los méto-
dos static o de clase, se aplican siempre a un objeto de la clase por medio
del operador punto (.). Dicho objeto es su argumento implícito. Los métodos
pueden además tener otros argumentos explícitos que van entre paréntesis, a
continuación del nombre del método.
La primera línea de la definición de un método se llama declaración o
header; el código comprendido entre las llaves {} es el cuerpo o body del
método. Considérese el siguiente ejemplo:
imprimoError=algor.devuelveErrorMinimo();
public double devuelveErrorMinimo()
{return errorMinimo;
}
CAPÍTULO 3. EL LENGUAJE JAVA 59
La Clase Object
Los arrays pueden ser asignados a objetos de la clase Object y los métodos
de Object pueden ser utilizados con arrays.
Algunas de las características más importantes de los arrays son las si-
guientes:
1. Los arrays se crean con el operador new seguido del tipo y número de
elementos.
2. Se puede acceder al número de elementos de un array con la variable
miembro implícita length (por ejemplo, vect.length).
3. Se accede a los elementos de un array con los corchetes [ ] y un índice
que varía de 0 a length-1.
4. Se pueden crear arrays de objetos de cualquier tipo. En principio un array
de objetos es un array de referencias que hay que completar llamando al
operador new.
5. Los elementos de un array se inicializan al valor por defecto del tipo co-
rrespondiente (cero para valores numéricos, la cadena vacía para Strings,
false para boolean, null para referencias).
6. Como todos los objetos, los arrays se pasan como argumentos a los méto-
dos por referencia.
7. Se pueden crear arrays anónimos (por ejemplo, crear un nuevo array
como argumento actual en la llamada a un método).
Inicialización de Arrays
Los arrays se pueden inicializar con valores entre llaves {...} separados por
comas. También los arrays de objetos se pueden inicializar con varias llamadas
a new dentro de unas llaves {...}.
CAPÍTULO 3. EL LENGUAJE JAVA 61
/*vector de pesos */
public double[ ] pesos;
El modelo de eventos de Java está basado en que los objetos sobre los que
se producen los eventos (event sources) “registran” los objetos que habrán
de gestionarlos (event listeners), para lo cual los event listeners habrán de
disponer de los métodos adecuados. Estos métodos se llamarán automática-
mente cuando se produzca el evento. La forma de garantizar que los event
listeners disponen de los métodos apropiados para gestionar los eventos es
obligarlos a implementar una determinada interface Listener. Las interfaces
Listener se corresponden con los tipos de eventos que se pueden producir.
Las capacidades gráficas del AWT resultan pobres y complicadas en com-
paración con lo que se puede conseguir con Visual Basic, pero tienen la ventaja
de poder ser ejecutadas casi en cualquier ordenador y con cualquier sistema
operativo.
CAPÍTULO 3. EL LENGUAJE JAVA 65
Pasos que se pueden seguir para construir una aplicación orientada a even-
tos sencilla, con interface gráfica de usuario:
valor += 1;
try
{
Thread hilo1 = new Thread( new Contador() );
hilo1.setPriority( 1 );
CAPÍTULO 3. EL LENGUAJE JAVA 67
Este programa puede no imprimir “2” en todas las plataformas, porque los
dos hilos de ejecución no están sincronizados y, desgraciadamente, este es un
problema muy profundo y no hay forma de detectar su presencia ni adivinar
el momento en que va a ocurrir.
Una solución simple, y drástica, es hacer todos los métodos sincronizados.
Pero esto también tiene problemas porque puede presentar como puntos sin
retorno obvios, lo que en realidad es una corrupción de datos.
El scheduling de los hilos de ejecución es uno de los aspectos más prob-
lemáticos de la programación Java, porque la naturaleza del problema se
vuelve global, al intervenir varios hilos de ejecución. No se puede buscar el
problema en una parte del programa, es imprescindible entender y tratar el
programa en su globalidad.
Además, hay ejemplos de contención de hilos que no serán detectados. Por
ejemplo, en la clase Contador anterior no se detectará el problema ya que la
contención está en el acceso al campo, en lugar de en el acceso al método.
ficheros.
import java.io.File;
import java.util.StringTokenizer;
*/
* carácter separador.
*/
Un driver con código nativo no está protegido por la caja negra de Java,
así que puede presentar potenciales problemas de seguridad.
Las clases de entrada y salida del JDK 1.0 no son portables a plataformas
que no soporten formatos nativos de archivos no-ASCII. Es fácil para el pro-
gramador suponer alegremente que todo el mundo es ASCII. Pero la realidad
no es esa, los chinos y los japoneses, por ejemplo, no puedes escribir nada
con los caracteres ASCII. Hay que tener esto en cuenta si se quiere que los
programas viajen fuera del país propio.
Los Servlets
4.1. Servlets
74
CAPÍTULO 4. LOS SERVLETS 75
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
Iniciar un servlet.
Solicitar servicios.
Éstos son conocidos como métodos del ciclo de vida y son llamados en la
siguiente secuencia:
Se construye el servlet.
El motor del servlet (la función del Servidor de Aplicaciones que proce-
sa servlets, archivos JSP, y otros tipos de server-side incluyendo codificación)
crea una instancia del servlet. El motor del servlet crea el objeto de confi-
guración del servlet y lo usa para pasar los parámetros de inicialización del
servlet al método INIT. La inicialización de los parámetros persiste hasta que
el servlet se destruye y es aplicada a todas las invocaciones de ese servlet hasta
destruirse.
Si la inicialización tiene éxito, el servlet está disponible para el servicio. Si
la inicialización falla, el motor del servlet descarga el servlet. El administrador
CAPÍTULO 4. LOS SERVLETS 77
4.1.5. Terminación
El motor del servlet invoca al método destroy () del servlet cuando apropia
y descarga el servlet. La Máquina Virtual de Java realiza la recolección de
basura después de la destrucción del servlet.
Cuando el contenedor Web ya no necesita que el servlet o una nueva ins-
tancia del servlet se recarguen, invoca al método destroy () del servlet. El
contenedor Web también puede llamar al método destroy () si el motor nece-
sita conservar recursos o una llamada pendiente a un método service () del
servlet excediendo el timeout. La Máquina Virtual de Java realiza recolección
de basura después del destroy.
Archivos Java que contienen el código del lenguaje Java para el servlet.
Archivos de clase que se compilan en el servlet.
El método INIT ejecuta sólo una vez durante la vida del servlet. Ejecuta
cuando el motor del servlet carga el servlet. Con el Application Server se puede
configurar el servlet para ser cargado cuando comienza la aplicación o cuando
un cliente accede por primera vez al servlet. El método INIT no se repite a
menos que muchos clientes accedan al servlet.
El método destroy () ejecuta sólo una vez durante la vida del servlet. Eso
pasa cuando el motor del servlet detiene el servlet. Típicamente, se detienen
servlets como parte del proceso de detener la aplicación.
Patrones Servlet/JSP.
Motivación.
Para aplicaciones que requieren modelado complejo sobre el nodo del servi-
dor de aplicación Web, no es fácil definir la granularidad de servlets y cómo
interactúan los servlets. Pero sin un buen diseño para el servlets y JSP es
difícil mantener la aplicación.
Una solución que tiene una granularidad entre esos extremos es dividien-
do la aplicación en estados diferentes. Se intenta transferir un diagrama de
transición de estados (por ejemplo, modelado con RationalRose) en páginas
HTML, servlets y JavaServer Pages.
Applicabilidad.
Componentes.
Controlador.
Despliegue de Patrones.
Cosecuencias.
Introducción al DB2
Express-C 9
87
CAPÍTULO 5. INTRODUCCIÓN AL DB2 EXPRESS-C 9 88
todos los servidores DB2 tienen el mismo núcleo de componentes. Esto tam-
bién significa que una aplicación desarrollada para una edición trabajará, sin
ninguna modificación, en otra edición. Y cualquier habilidad aprendida en una
edición aplicará a las otras ediciones.
Cliente Servidor de Datos IBM (IBM Data Server Client): el más com-
pleto, incluye herramientas GUI, controladores.
Fix packs.
pureXML.
CAPÍTULO 5. INTRODUCCIÓN AL DB2 EXPRESS-C 9 91
Alta disponibilidad.
Federación Homogénea.
Alta disponibilidad.
Disponible en AIX
R
, Solaris, y HP-UX además de Linux y Windows.
pureXML.
Federación Homogénea.
Conexión Concentrada.
pureXML.
DB2 Connect.
DB2 Warehouse Editions.
WebSphere
R
Federation Server.
Fix Packs
Como las transacciones son procesadas sobre la base de datos primaria, los
registros de la base de datos automáticamente son transportados al servidor
secundario a través de la red. El servidor secundario tiene una copia clonada
de la base de datos primaria, por lo general creada por el back-up de la base
de datos primaria y restaurándolo sobre la base de datos secundaria. Cuando
CAPÍTULO 5. INTRODUCCIÓN AL DB2 EXPRESS-C 9 93
los registros de la base de datos primaria son recibidos ellos son reproducidos
de nuevo y aplicados a la base de datos secundaria.
Réplica de Datos
Concentrador de Conexión
Geodetic Extender
DB2 Geodetic Extender esta disponible con pago adicional para DB2 En-
terprise Edition. Este extender hace desarrollos para aplicaciones de inteligen-
cia de negocios y egovernment que requieren un análisis de localización geo-
gráfica mucho más sencillo. DB2 Geodetic Extender puede construir un globo
mundial virtual a cualquier escala. La mayoría de información de localización
es tomada usando sistemas worldwide, por ejemplo el sistema de satélites de
posicionamiento global (GPS ), y puede ser representado en coordenadas de
latitud/longitud (geocódigo). Los datos de negocios, como direcciones, pueden
ser convertidos a geocódigo con DB2 Geodetic Extender y aplicaciones a ni-
vel empresarial trabajan mejor cuando mantienen los datos en esta forma sin
proyección, saliendo las proyecciones del mapa (tierra a mapa plano) donde
ellos pertenecen, en la capa de presentación, para mostrar e imprimir mapas.
DB2 Connect
base de datos; significando que puedes correr consultas de base de datos que
puedan trabajar con objetos de diferentes sistemas de base de datos relacional.
Por ejemplo, con WebSphere Federation Server, se puede correr la siguiente
consulta:
SELECT *
FROM Oracle.Table1 A
DB2.Table2 B
SQLServer.Table3 C
WHERE
Este apartado explicará paso a paso una instalación básica de DB2 Express-
C en Windows. La misma installation wizard está
disponible en Linux ; por lo tanto los pasos son similares en ambas platafor-
mas.
CAPÍTULO 5. INTRODUCCIÓN AL DB2 EXPRESS-C 9 98
Procedimiento
5. Correr el DB2 setup wizard. El DB2 setup wizard revisa si cumple todos
los requerimientos del sistema y ve si existe otra instalación de DB2.
Hacer clic en el botón Next para seguir con la instalación.
9. Configurar la información del usuario. Una vez que DB2 Express-C es-
tá instalado, asegurarse que los procesos de DB2 están corriendo como
Servicios del Sistema. Estos servicios requieren una cuenta del sistema
operativo para poder correrlo. En el ambiente de Windows, usar la cuen-
ta por defecto db2admin es recomendada. Si esta cuenta aun no existe,
DB2 la creará en el Sistema Operativo. También se puede especificar
CAPÍTULO 5. INTRODUCCIÓN AL DB2 EXPRESS-C 9 100
una cuenta existente, pero esa cuenta debe tener los permisos de admi-
nistrador local. Se recomienda usar las opciones sugeridas. Asegurarse
de especificar el password para la cuenta. En Linux se usa el UserID por
defecto db2inst1 (dueño de la instancia), db2fenc1 (usuario para rutinas
limitadas) y dasusr1 (usuario del DB2 Administrator Server, DAS ). Clic
en el botón Next para continuar.
13. La base de datos SAMPLE es una base datos que se puede usar para
probar DB2. Esta es creada automáticamente luego de la instalación de
DB2. Verificar que la base de datos exista abriendo la herramienta DB2
Control Center. Para abrir esta herramienta, del botón Inicio de Win-
dows elegir: Inicio → Programas → IBM DB2 →DB2COPY1 (Default)
→ General Administration Tools → Control Center. Ademas se puede
iniciar el Control Center con el comando db2cc.
Herramienta Comando
Editor de Comandos db2ce
Command Line processor db2
Ventana de Comandos db2cmd
Control Center db2cc
Task Center db2tc
Health Center db2hc
Configuration Assistant db2ca
First Steps db2fs
El panel del lado izquierdo provee una visión jerárquica de los objetos de
la base de datos en el sistema, teniendo una carpeta para Tablas, Vistas, etc.
Al hacer doble clic sobre una carpeta, del lado derecho se listarán todos los
objetos relacionados, como por ejemplo, todas las tablas asociadas con la base
de datos SAMPLE. Si se selecciona una tabla en la parte alta del panel, en la
CAPÍTULO 5. INTRODUCCIÓN AL DB2 EXPRESS-C 9 105
parte baja del lado derecho del panel se proveerá información más específica
acerca de esa tabla.
Eclipse
109
CAPÍTULO 6. ECLIPSE 110
Introducción al Servidor
Tomcat 5.0
7.1. Descripción
7.2. Entorno
114
CAPÍTULO 7. TOMCAT 115
Dado que Tomcat fue escrito en Java, funciona en cualquier sistema oper-
ativo que disponga de la máquina virtual Java [2].
Tomcat 4.x:
Tomcat 5.x:
Tomcat 6.x:
7.6. Historia
Descripción de la Aplicación
8.2. Análisis
118
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 119
8.3. Desarrollo
8.3.1. Módulos
1. Agricultura.
2. Ganadería.
3. Empleados.
4. Bancos.
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 121
5. Clientes.
6. Proveedores.
7. Consultas.
8. Planillas.
Agricultura
Cosechas.
Siembras.
Pulverizaciones.
Rollos.
Máquinas.
Campos.
Insumos .
Ventas.
Cosecha
Siembra
Rollos
Máquinas
Pulverización
Campos
Insumos
Ventas
8.3.2. Ganadería
Ganado.
Sanidad.
Inseminación.
Reproducción.
Balanza.
Campos.
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 131
Isumos.
Además permite analizar detalladamente todos lon ingresos y egresos de
la actividad financiera de este sector. La figura 8.13 de la página 131
muestra la pantalla principal del módulo Ganadería, desde la cual se
puede acceder a sus diferentes secciones.
Ganado
Sanidad
Inseminación
Esta sección permite registrar todos los datos relacionados con las inse-
minaciones realizadas al ganado. La figura 8.16 de la página 134 visualiza el
formulario.
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 134
Reproducción y Balanza
8.3.3. Empleados
8.3.4. Bancos
8.3.5. Clientes
8.3.6. Proveedores
Este módulo permite registrar todos los datos relacionados con los provee-
dores de la empresa, como se puede observar en la figura 8.22 de la página
140.
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 140
8.3.7. Consultas
8.3.8. Planillas
AREA:
BANCO:
BANIO:
CAMPO:
• CANT_LOTES_CAMP: INTEGER.
• KG_FIJADO_CAMP: DOUBLE.
CLIENTE:
COSECHA:
CREDITO:
FUMIGACION:
• TIPO_FUM: VARCHAR(50).
GANADO:
INSEMINA:
• CATEGORIA: VARCHAR(20).
• NRO_CARAVANA: BIGINT.
• PRODUCTO: VARCHAR(30).
• TORO: VARCHAR(20).
• OBSERVACIONES: VARCHAR(200) NOT NULL WITH DEFAULT ‘’.
INSUMOS:
LOTES:
MAQUINA:
PAGO:
• FECHA_VENC_TARJETA_PAGO: DATE.
• IMPORTE_TOTAL_PAGO: DOUBLE WITH DEFAULT 0.
• IMPORTE_TARJETA_PAGADO: DOUBLE WITH DEFAULT 0.
• SALDO_PAGO: DOUBLE WITH DEFAULT 0.
• RESUMEN_TARJETA_PAGO: VARCHAR(50).
• TIPO_PAGO: VARCHAR(25).
PERSONAL:
PESAJE:
PRENIEZ:
PROVEEDOR:
ROLLO:
SIEMBRA:
STOCK:
• CULTIVO_STOCK: VARCHAR(50).
• FECHA_STOCK: DATE NOT NULL.
• CANT_TN_STOCK: DOUBLE NOT NULL.
TACTO:
TARJETA:
TRASLADOS:
• COSECHA_TRASLADO: INTEGER.
• CARTA_TRASLADO: VARCHAR(100) WITH DEFAULT ‘’.
• KG_EQUIPO_TRASLADO: DOUBLE WITH DEFAULT 0.
• PROPIETARIO_EQUIPO_TRASLADO: VARCHAR(100) WITH DEFAULT
‘’.
• PATENTE_EQUIPO_TRASLADO: VARCHAR(50) WITH DEFAULT ‘’.
• DESTINO_TRASLADO: VARCHAR(50) WITH DEFAULT ‘’.
• EMPRESA_TRASLADO: VARCHAR(50).
• FECHA_TRASLADO: DATE.
• OTRO_DESTINO_TRASLADO: VARCHAR(50).
USUARIO:
VACUNA:
• TOTAL_VACUNA: INTEGER.
VENTA:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 159
import java.sql.SQLException;
import java.sql.Statement;
import java.text.NumberFormat;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import utilitarios.SagHTML;
Connection conn;
super.init(cf);
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
}catch (ClassNotFoundException e) {
e.getMessage());
try {
conn = DriverManager.getConnection(“jdbc:odbc:agro”);
}catch (SQLException e) {
super.destroy();
try {
conn.close();
IOException {
String usuario=request.getParameter(“usuario”);
String fecha=request.getParameter(“fecha”);
String empresa=request.getParameter(“empresa”);
String cultivo=request.getParameter(“cultivo”);
String maquina=request.getParameter(“maquina”);
String operador=request.getParameter(“operador”);
String operador2=request.getParameter(“operador2”);
String campo=request.getParameter(“campo”);
String cantidadha=request.getParameter(“cantidadha”);
//Importes totales
String importeha=request.getParameter(“importeha”);
String importetotal=request.getParameter(“importetotal”);
String lote=request.getParameter(“lotesel”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 161
String lotenom=request.getParameter(“lotenom”);
String tncosechadas=request.getParameter(“tncosechadas”);
String kgha=request.getParameter(“kgha”);
NumberFormat NF = NumberFormat.getInstance();
try{
maquina_cosecha,operador_maq_cosecha,campo_cosecha,lote_campo_cosecha,
kg_ha_cosecha,cant_ha_cosecha,importe_ha_cosecha,importe_total_cosecha,
cultivo_cosecha,tipo_cosecha,tn_cosecha,operador2_maq_cosecha,
lote_nom_cosecha) values(“‘+fecha+“’,“‘+empresa+”’,“+maquina+”,
“+operador+”,“+campo+”,“‘+lote+”’,“+kgha+”, “+cantidadha+”,“+importeha+”,
“+importetotal+”,“‘+cultivo+”’,‘Propia’,“+tncosechadas+”,“+operador2+”,
“‘+lotenom+”’)”);
cant_tn_stock) values(“‘+empresa+”’,“‘+cultivo+”’,“‘+fecha+”’,
“+tncosechadas+”)”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 162
“+maquina+””);
“+operador+””);
“+campo+”“);
“+operador2+””);
SagHTML.cabeceraGeneralHTML(out,“Agricultura“);
SagHTML.menuIzquierdoAgricultura(out,usuario);
SagHTML.cuadroConsultar(out);
SagHTML.cuadroBuscar(out);
SagHTML.scriptGeneral(out);
cellpadding=0>”);
out.println(“<tr>”);
cellpadding=0>”);
out.println(“<tr>”);
cellpadding=0>”);
out.println(“<tr>”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 163
cellpadding=0>”);
out.println(“<tr>”);
out.println(“</TR>”);
out.println(“<tr>”);
out.println(”</td>”);
out.println(”</tr>”);
out.println(”</TBODY>”);
out.println(“</TABLE>”);
out.println(“</TD>”);
out.println(“</TR>”);
out.println(“</TBODY>”);
out.println(“</TABLE>”);
out.println(“</TD>”);
out.println(“</TR>”);
out.println(“<TR>”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 164
out.println(“<TBODY>”);
out.println(“ <TR>”);
</a></TD>”);
out.println(“ </TR>”);
out.println(“ <TR>”);
out.println(“<TABLE border=0>”);
out.println(“<TBODY>”);
out.println(“ <TR>”);
src=images/botones/agregar.gif></a>
src=images/botones/modificar.gif></a>
src=images/botones/eliminar.gif></a></LEGEND>”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 165
out.println(“ <TBODY>”);
out.println(“ <TR>”);
out.println(“ <TD>”);
ACTION= METHOD=POST>”);
out.println(“ <TR>”);
out.println(“ <TBODY>”);
out.println(“<TR>”);
out.println(“</TR>”);
out.println(“ </TR>”);
out.println(“ </TR>”);
out.println(“ <TR>”);
out.println(“ </TR>”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 166
out.println(“ <TR>”);
out.println(“ </TR>”);
out.println(“ <TR>”);
out.println(“ </TR>”);
out.println(“ </TBODY>”);
out.println(“ </TABLE></FIELDSET>”);
out.println(“ </TR>”);
out.println(“ <TR>”);
out.println(“<TD align=left>“+empresa+”</TD>”);
out.println(“</TR>”);
out.println(“ <TR>”);
while(rs3.next()){
out.println(“ </TR>”);
out.println(“ <TR>”);
out.println(“ </TR>”);
out.println(“ <TR>”);
out.println(“ </TR>”);
out.println(“<TR>”);
out.println(“<TD align=left>”);
String numero=“”;
while(rs1.next()){
numero = rs1.getString(“cod_maq”);
rs1.close();
out.println(“ </TD>”);
out.println(“ <TBODY>”);
out.println(“ <TR>”);
; $ “+importeha+”</TD>”);
out.println(“ </TR>”);
out.println(“ <TR>”);
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 168
out.println(“ </TR>”);
out.println(“ <TR>”);
; $ “+importetotal+”</TD>”);
out.println(“ </TR>”);
out.println(“ </TBODY>”);
out.println(“ </TABLE></FIELDSET>”);
out.println(“ </TD>”);
out.println(“ </TR>”);
out.println(“ </TR>”);
out.println(“</TR>”);
out.println(“<TR>”);
while(rs2.next()){
out.println(“ </TD>”);
out.println(“ </TR>”);
out.println(“<TR>”);
if(operador2.equals(0)){
CAPÍTULO 8. DESCRIPCIÓN DE LA APLICACIÓN 169
}else{
while(rs4.next()){
out.println(“ </TD>”);
out.println(“ </TR>”);
out.println(“ </TBODY>”);
out.println(“ </TABLE>”);
out.println(”<TBODY>”);
out.println(“</table></td>”);
out.println(“</tr>”);
out.println(“ <TR>”);
out.println(“ </TR>”);
out.println(“</table></td>”);
out.println(“</tr>”);
SagHTML.cuerpoPrincipalFinal(out);
SagHTML.finCuerpoPrincipal(out);
SagHTML.finHTML(out);
}catch(Exception e){
e.printStackTrace();
}
}
Capítulo 9
Conclusiones
171
completas, intuitivas y con diversos asistentes, permitiendo de esa manera una
mejor comprensión en la utilización de la herramienta.
Se hace notar además que los usuarios a cargo de la aplicación, han mani-
festado su interés en el producto desarrollado, ya que se encuentra actualmente
en uso por el establecimiento, debido a que pudieron observar las facilidades
y buen desempeño de la aplicación y las sencillas interfaces gráficas; además
de poder ser operado completamente desde la Intranet y/o Internet.
Se considera que las principales líneas futuras de acción derivadas del pre-
sente trabajo serían las siguientes:
[1] K. Rutledge. The Business Case for e-business. IBM Corp., 2000.
[2] P. Gómez C. Solares. E. Castillo, A. Cobo. JAVA - Un Lenguaje de
Programación Multiplataforma para Internet Ű 1/E. IBM Corp.
[3] Daniela Momiroska Paul Read Nicholas Summers Virginia Totanes Calis-
to Zuzarte. Nagraj Alur, Peter Haas. DB2 UDB High Function Business
Intelligence in e-business 1/E. IBM Corp., 2002.
[4] Louisa Ford Paul Jud Kang Yong Ying. Whei-Jen Chen, Rav Ahuja. Up
and Running with DB2 for Linux 1/E. IBM Corp., 2003.
[5] G. Vasudeva G. Galambos. Patterns for e-business. J. Adams, S. Koushik.
A Strategy for Reuse. IBM Corp., 2001.
[6] David Kline Glen Johnson. Whei-Jen Chen, Angus Beaton. DB2 UDB
Evaluation Guide for Linux and Windows 1/E. IBM Corp., 2003.
[7] Alexandre H. Guerra Thomas Mitchell Francis Reddington. Whei-
Jen Chen, Chris Fierros. DB2 UDB Exploitation of the Windows En-
vironment 1/E. IBM Corp., 2003.
[8] International Business Machines Corporation. WebSphere Studio Appli-
cation Developer Version 4 for use with the Windows 2000 and Windows
NT Operating System. IBM Press, 2002.
[9] A. S. Tanenbaum. Sistemas Operativos Distribuidos Ű 1/E. Prentice Hall
Hispanoamericana S.A.
[10] D. L. La Red Martínez. Sistemas Operativos. Moglia SRL.
[11] A. S. Tanenbaum. Sistemas Operativos Distribuidos Ű 1/E. Prentice Hall
Hispanoamericana S.A.
173
Índice alfabético
agricultura browser
modulo de, 121 navegador, 23
agricultura y ganadería bucles, 53
argentina, 1 do while, 55
agro-ganadería for, 54
actualidad, 1 while, 54
API bytecodes
interface de programación de apli- serie de códigos, 16
caciones, 32
API (Application Programming Inter- C++
face), 41 lenguaje de programación
aplicación orientado a objetos, 11
descripción de la, 118 C/C++, 50
aplicación interactiva, 65 código fuente, 158
applet, 15 Clase, 38
programa independiente, 21 clase
seguridad, 24 características, 57
applets, 21 clase en Java, 57
concepto, 23 clase object, 59
appletviewer clases de utilidad, 60
visualizador de applets, 21 clase Arrays, 60
arrays, 60 clases string y StringBuffer, 61
AWT Double, 62
concepto, 63 integer, 63
interface gráfica de usuario, 63 comentarios, 50
conclusiones, 171
bibliotecas Content-Type, 75
de clases, 35
bifurcaciones, 52 DB2
if, 52 Express-C 9, 87
if else, 53 destroy, 78
bloque try, catch, finally, 56 doGet, 75
174
ÍNDICE ALFABÉTICO 175
desarrollo, 74
motor del, 76
servlets
código fuente de, 158
Set-Cookie, 75
software, 40
String, 61
métodos de la clase, 62
string, 42
StringBuffer, 61
Sun, 11, 24
thread, 17
Tomcat
Tomcat 5.0, 114
variable
clasificación, 42
local, 43
miembro de una clase, 43
referencia, 42
variables
miembro, 44
tipo primitivo, 42
visibilidad y vida de las, 44
Web
aplicaciones, 81
WWW, 22