Java y J++

POO (Programación Orientada a Objetos). Clases. Objetos. Herencia. ActiveX. Componentes. Navegador. Instancias

  • Enviado por: Elimey
  • Idioma: castellano
  • País: México México
  • 23 páginas
publicidad

Java y J++
QUÉ ES JAVA?

Java es un lenguaje de programación con las siguientes características:
Es más o menos fácil. No presenta los problemas de C y C++. Puesto que: No hay pointers, Structs, Typdefs, #defines, Administración de memoria: Toma como modelo Orientado a objetos la tecnología de objetos de C++ por su facilidad de aprendizaje.
Distribuído: tiene extensas capacidades de conexión TCP/IP, Accesa e interactúa con HTTP y FTP usando liberías clase API, contenidas en el JDK.
Robusto: Extenso chequeo de errores en compilación y tiempo de ejecución, la implementación de lenguaje reduce muchos de los errores más comunes, Chequeo de límites de arreglos, Verif icación de “Byte code”.
Arquitectura neutral: Compila código fuente en “Byte Code”a una “máquina virtual” (máquina independiente), El sistema tiempo de ejecución Java es un ïnterpretador byte code” (máquina dependiente), El sistema tiempo d e ejecución Java está actualmente implementoen los browser Netscape y Hot Java.
Seguridad: La implementación del lenguaje remueve accesos ilegales a memoria. No hay “pointers”, No hay “run time casting”, Verificador “Byte code” antes ejecución; El verificador Byte code verifica el formato de l código, detecta de pointers falso, violación a accesos de objetos, y cambios en el tipo de objetos o clases; Garantiza que el código compilado esté libre de: Excepciones de stack, Ilegales códigos de operación y tipos de datos, Conversiones ilegal de datos, Acceso Iegal a objetos; Cargador de clases, Carga de clases importadas en namespaces, Primero buscan las clases en el sistema local, luego las clases en el namespace referenciado.
Portable: Arquitectura independiente (especificación máquina virtual), Especificación Windows (GUI) virtual, Windows 95, Windows NT y Solaris 2.4 y superiores soportan JDK en esste momento.
Interpretado: La ejecución es más lenta que en fuentes nativo, Compilar a una máquina virtual primero aumente la velocidad de ejecución.,.
Alto perfomance (Futuras versiones): Las características de displays y multithread causa cuellos de botella en este ambiente, Compiladores “Just in Time” (disponible en mayo o junio) Recompila en tiempo de ejecución, La máquina es dependiente pero de más velocidad de ejecución, La optimización del Byte code Java es la última respuesta.
Multithread: Un programa puede contener múltiples “threadas”en ejecución, Threads son procesos independientes y ejecutados simultáneamente, Esta es una área donde la arquitectura hace la difere ncia. Cada S.O. y cada máquina maneja el multithreading diferencia. Este concepto es el que causa la mayor dificultad en la programación Java.
Dinámico: Los uniones de los objetos y clases en el tiempo de ejecución, Permiten que las clases y objetos externos siempre están actualizadas sin que sea necesario recompilar. Las versiones má s recientes serán automáticamente enlazados y ejecutadas en el tiempo de ejecución.

Java y J++
CONSTRUCTORES BÁSICOS JAVA


Los constructores del lenguaje de programacaión son similares a C y C++. Los Identificadores: Pueden comenzar con”_ “, “$”, o letras, Pueden contener dígitos (0-9), Se deben tener en cuenta las mayúsculas y min&uacut e;sculas, Pueden tener longitud infinita,; Los Literales son compilados a la “máquina virtual” para mantener la portabilidad y tienen las siguientes características:

Enteros

byte 8 bits

short 16 bits

int 32 bits

long 64 bits

De punto flotante

float 32 bits

double 64 bits

Boleanos

bolean true or false

Carácter

char 16 bits

Cadena de caracteres

String “This is a String example”

Java y J++
ARREGLOS EN JAVA

Los arreglos pueden ser cualquier tipo. Los límites de los arreglos son chequeados en el tiempo de ejecución para evitar excepciones de stack y corrupción de memoria. En Java los arreglos son objetos y tienen la función miembro longitud:

Int a[ ] [ ] = new a [10] [3];

a.length = 10;

a [0].length =3;

Java y J++
CREACION DE ARREGLOS

· Hay dos formas de crear un arreglo

· Crear un arreglo vacio

int list[ ]=new int [50];

· Crear y llenar un areglo con valores

String names [ ]={ “Peter”, “Joaco”, “Pig”};

· No se pueden crear arreglos estáticos en tiempo de compilación

int list[50]; dará un error

No se puede llenar un arreglo sin declarar su tamaño primero

usando el operator new.
El siguiente

ejemplo dará un error

int list [ ];

for (int i = 0; i < 9; i++)

{

list[i]=i;

}

Es necesario declarar el tamaño

list [ ] = new list [10];

Nota: los arreglos creados con valores iniciales el tamaño le es asignado automáticamente.

Java y J++
OPERADORES EN JAVA


Los operadores para números se comportan como en C y C++: Los operadores relacionales retornan resultados boleanos para comparación . Los operadores + y += pueden usarse para concatenar. Est o es diferente de C y C++. El control de flujo es lo mismo que en C y C++


Java y J++
APLICACIONES JAVA
Java tiene dos tipos de módulos ejecutables:Aplicaciones “stand alone Las cuales No poseen la funcionalidad incluida en los browsers y los Applets son ejecutadas dentro de un ambiente HTML y poseen todas las ventajas de las funciones browser.

Programación Orientada al Objeto con JAVA

La programación orientada al objeto (OOP) no es sólo una característica semántica de un lenguaje de programación. También está relacionada con una metodología de programación. La OOP, en general, se caracteriza por tener una serie de propiedades. De ellas estudiaremos las relacionadas con el lenguaje JAVA. Básicamente, la OOP se basa en el concepto de clase (abstracto) y de objeto (particularización), el cual puede tener una serie de atributos (propiedades) y métodos (funcionalidades).

Fundamentos de OOP

Una clase (class) es una plantilla para múltiples objetos con características similares. Las clases recogen todas las características y funcionalidades de un conjunto particular de objetos.

Una instancia (instance) de una clase es un objeto real. Si una clase es la representación genérica de un objeto, una instancia es su representación concreta.

Cuando se realiza un programa, en realidad se diseñan y construyen un conjunto de clases. Cuando se ejecuta el programa, se crean y se destruyen instancias de las mismas, según se van necesitando. El cometido de un programador es crear el conjunto adecuado de clases que realicen la tarea que se quiere resolver.

Cada clase que se desarrolla en JAVA va a estar formada por dos tipos de elementos:

  • Atributos

  • Métodos

Los atributos (attributes) son las propiedades individuales que diferencian un objeto de otro, y determinan la apariencia, estado, u otras características de un objeto. Los atributos se definen por medio de variables, que toman valores determinados para cada tipo de objeto. Así, se llaman también variables de instancia. Aparte están también lo que se llaman variables de clase, que se aplican a la clase en sí, y a todas las instancias de la misma.

Los métodos (methods) son funciones que se definen dentro de las clases. Estos pueden operar sólo sobre instancias de la clase, y se denominan métodos de instancia, o bien sobre la clase misma, y se denominan métodos de clase. Una clase u objeto puede llamar métodos de otra clase u objeto para comunicar cambios en el entorno o solicitar que un objeto cambie su estado.

Una de los conceptos más importantes de la OOP es la herencia. Por medio de esta, las clases se organizan de forma jerárquica, y así cada clase tiene una superclase, y puede tener cero, una, o varias subclases. En la raiz del árbol de herencia se encuentra una clase, llamada Object, de la cual heredan todas las clases del sistema. Aparte de definir una estructura jerárquica, la herencia también caracteriza cada una de las clases, pues estas heredan tanto los atributos como los métodos. Una subclase es libre de modificar la funcionalidad de un método de la superclase redefiniéndolo: declararlo de nuevo. JAVA incorpora un modelo de herencia llamado herencia simple, mediante el cual una clase sólo puede heredar de una única clase. El modelo de C++ se llama de herencia múltiple, mediante el cual una clase puede heredar de varias clases simultáneamente.

OOP con JAVA

El formato general de una clase en JAVA es la siguiente:

tipo class nombre1 extends nombre2 implements nombre3, . . .
{
    atributos (clase + instancia)

    constructores

    métodos (clase + instancia)
}

donde tipo puede ser una combinación de las siguiente opciones:

  • public: cualquier clase puede crear objetos ella.

  • protected: sólo pueden crear objetos de esta clase los descencientes por herencia.

  • private: sólo pueden acceder a ella las clases que estén en el mismo fichero.

  • final: no pueden haber subclases de esta clase.

  • abstract: se definen una serie de métodos, que tendrán que implementar las subclases.

Si no se especifica nada, la clase es pública. El parámetro nombre2 es el nombre de la clase de la cual se hereda. Por defecto se hereda de Object. La lista nombre3 es la serie de interfaces que son implementados. En un fichero .java puede haber únicamente una clase pública/protegida, y todas las privadas que se deseen.

Los atributos en JAVA se declaran de la siguiente forma:

tipo clase nombre;

donde clase es la clase del atributo, nombre el nombre que tomará dicha variable, y tipo puede ser una combinación de las siguientes opciones:

  • public: el atributo es visible desde cualquier clase.

  • private: el atributo sólo es visible desde las clases herederas.

  • protected: el atributo no es visible.

  • final: el atributo no se puede modificar (constante).

  • static: el atributo es una variable de clase.

Los métodos, similares a las funciones de C, se definen en JAVA de la siguiente forma:

tipo retorno nombre (lista_parámetros)
{
    variables locales

    instrucciones
}

donde nombre es el nombre de la función, y tipo puede ser una combinación de las siguientes opciones:

  • public: el método puede ser llamado por cualquier clase.

  • protected: el método sólo puede ser llamado por clases herederas.

  • private: el método sólo puede se llamado desde la misma clase.

  • static: el método es un método de clase.

  • final: el método no se puede redefinir.

  • abstract: el método se ha de redefinir, pues no tiene implementación.

Además retorno es la clase que devuelve la función, o void en caso de no devolver nada. La lista_parámetros es una lista de pares clase y variable, separados por comas, que son los parámetros de entrada a la función. Esta lista puede estar vacía.

Los constructores son los métodos que se invocan cuando se crea un objeto (new). Se definen de forma similar a los métodos. En los constructores es el lugar adecuado para dar valores iniciales a los atributos. Así tenemos que los constructores en java se definen:

tipo  nombre_clase (lista_parámetros)
{
    variables locales

    instrucciones
}

donde nombre_clase es el nombre de la clase de la cual es constructor, lista_parámetros es similar al caso anterior, y tipo puede ser uno de los siguientes:

  • public: se puede usar el constructor desde cualquier clase.

  • protected: sólo pueden usar el constructor clases herederas.

  • private: no se puede usar el constructor.

En cualquier situación donde se pueda producir ambigüedad entre el nombre de una variable parámetro y un atributo, se puede utilizar la notación this. De esta forma, para referirse a un atributo se le antepone el this de la siguiente forma:

this.atributo

Para utilizar una clase hay que seguir los siguientes pasos:

  • crear el objeto

  • llamar a los métodos necesarios de ese objeto

  • destruir el objeto

Para crear un objeto podemos hacer:

Object

prueba;

prueba

=

new

Object

();

donde primero declaramos la variable prueba que referenciará el objeto, y posteriormente llamamos a un constructor de la clase.

Para llamar a un método, sobre el objeto previamente creado, se especifica el nombre del método:

prueba.miMetodoDePrueba ();

por último, para destruir el objeto se puede utilizar el método genérico dispose (). Esto no es habitual, ya que existe un proceso, llamado Garbage Collector, que se encarga de eliminar los objetos que ya no se usan.

OOP avanzada con JAVA

Ya hemos visto la forma básica de trabajar con clases y métodos. Además de estas, JAVA tiene otra serie de características como son los packages y los interfaces.

Los packages (paquetes) son conjuntos de clases relacionadas por algún motivo, de forma que el manejo de las mismas, cuando el número de clases crece, sea un poco coherente. Así, los paquetes son en realidad directorios que contienen los ficheros de las clases, de forma jerárquica. Los paquetes se denominan de forma similar a los nombres en Internet (notación de punto), donde cada nombre es una parte del directorio. Hay un paquete imprescindible que contiene todas las clases básicas de JAVA, que se denomina java, del que cuelgan los demás paquetes como:

  • java.util

  • java.language

  • java.awt

En general, para cada clase definida hay que especificar en qué paquete va a estar. Esto se hace siempre al principio de cada fichero en JAVA de la siguiente forma:

package nombre;

Si no se especifica, se supone que está localizado en la raiz. Posteriormente a la declaración de paquete hay que especificar que clases vamos a usar, con su paquete correspondiente de la forma:

import nombre_de_clase;

Si vamos a usar varias clases del mismo paquete, por ejemplo URL y Socket del paquete java.net, lo podemos especificar de las siguientes formas:

import java.net.URL;
import java.net.Socket;

import java.net.*;

Los interfaces son formas de especificar plantillas de funcionalidades. En realidad son definiciones de clases que no tienen implementación, y que otras clases usarán e implementarán. Los interfaces se declaran de forma similar a las clases, solo que los atributos son todos public static final y los métodos public abstract. Un ejemplo de declaración de interface sería:

public interface mi Interface {
        public static final int coche = 1;
        public static final int casa = 2;

        public abstract int miMetodo1 ();
        public abstract float miMetodo2 (int par);
}

Para hacer uso de un interface se utiliza la cláusula extends de la declaración de clases. De esa forma la clase debe de implementar todos los métodos que use de la interfaz. Esta es la forma de simular herencia múltiple mediante JAVA. La razón por la que no está incorporada en el lenguaje es por hacerlo lo más simple y robusto posible.

NAVEGADOR

Que es un navegador.

Se les denomina navegadores, a aquellos programas utilizados para poder visualizar las páginas
que se encuentran ubicadas en los diferentes servidores que conforman la Red Mundial de computadoras denominada Internet

Como Funciona el navegador

Los navegadores ( Microsoft Explorer, Netscape, y otros) tienen características similares de funcionamiento.

Básicamente si queremos visualizar una página lo que debemos de hacer es escribir en el casillero en blanco que esta ubicado debajo de la barra de herramientas la dirección deseada.

A esta dirección se le denomina URL

Ejemplo:

http://www.interaccee.com.pe  para la página principal de InterAccess S.A.
http://www.yahoo.com           para ingresar al Yahoo uno de los buscadores mas conocidos.

En las páginas que vayamos visitando, podremos apreciar cuando pasamos el Mouse por las fotografías o textos resaltados, que el puntero cambia de forma por una mano con el dedo extendido. Esto nos quiere indicar que en esa foto o texto existe un hiperenlace, que es una conexión hacia otra página, se activa haciendo un click sobre ellos. Para regresar a la página anterior presionaremos el botón que se encuentra en la barra de herramienta y esta identificado
con una flecha hacia la izquierda.

Principales Navegadores

Entre los principales navegadores tenemos

Yahoo      http://www.yahoo.com
Ole              http://www.ole.com
Excite       http://www.excite.com
Lycos         http://www.lycos.com
Altavista   http://www.altavista.com
InfoSeek   http://www.infoseek.com

Un navegador es un programa que sirve al usuario para navegar por Internet, es decir, para acceder a una determinada página web.

Pero ¿qué es una página web?

   Las páginas web reúnen dos características importantes:

  • Son páginas multimedia: contienen texto, imágenes, sonidos, vídeo, etc. con el atractivo que da eso a la presentación de la información.

  • Son páginas hipertexto: contienen enlaces (palabras, imágenes o botones) donde podemos hacer un clic con el ratón y de forma sencilla, y sin necesidad de conocer la dirección (URL) del lugar donde queremos ir, cambiar a otra página donde se ofrece más información sobre el tema que estamos mirando. Es lo que se conoce como navegar.

    Cada página web tiene una dirección electrónica, conocida como URL. La sintaxis de esas direcciones es:

  • Primero, el protocolo. En el caso de las páginas web, normalmente será "http://", es decir, hipertext transfer protocol (protocolo de trasferencia de hipertexto). Otros protocolos son: "ftp://", "news://", "gopher://", ...

  • Segundo, el nombre del servidor donde se encuentra alojada la página. Este nombre puede escribirse de dos maneras: con su IP o, mucho más habitual y más fácil, con su DNS.
    La dirección IP (protocolo de internet), consiste en un número compuesto por 4 cifras separadas por puntos, y cuyo valor puede ser del 1 al 255. Por ejemplo: 195.77.46.40.
    La DNS (sistema de nombres de dominio) sería la traducción a palabras de una IP, lo cual a su vez se compone de un nombre, un punto y una extensión. Esa extensión suele ser el identificador del país para todo lo que sean servidores de fuera de Estados Unidos (por ejemplo: "es" para España), mientras que en Estados Unidos, se utiliza para identificar el tipo de proveedor (por ejemplo: "com" para entidades comerciales, "edu" para entidades educativas, "gov" para entidades gubernamentales, "org" para organizaciones, etc.)

  • Tercero: si no escribimos nada más, iremos a la página principal del servidor (el ordenador que contiene la información que queremos ver) nombrado. Si queremos ir a una página concreta, habrá que escribir el nombre de esa página con su ruta completa (directorios y subdirectorios).

    Un ejemplo de una URL completa para visitar una página podría ser la página de entrada a Infoville:
http://www.infoville.net

    Para acceder y visualizar una página Web necesitamos un programa que solemos llamar navegador. Los dos más utilizados son el Explorer y el Netscape.

Java y J++
ActiveX / COM y Visual J++

Estos términos parecen, en principio, irreconciliables. Muy a menudo nos referimos a COM y ActiveX como realidades contrapuestas a Java, pero, como vamos a ver, no tienen por qué ser así. Podemos utilizar componentes COM y ActiveX en nuestros programas en Java, y, a su vez, podemos crear componentes COM en este lenguaje. Este artículo va a presentar las herramientas que Visual J++ 1.1 proporciona para la integración entre Java y COM, y además vamos a crear un componente COM utilizable en el ámbito de Transaction Server utilizando Visual J++ 6.0

Antes de nada, qué es COM y ActiveX

Componentes COM

COM es un estándar que define un modo de interactuación de aplicaciones diseñado para conseguir la interactuación entre aplicación mediante conjuntos de funciones denominados interfaces. Component Object Model (COM) es una tecnología que persigue dotar a los desarrolladores de un ámbito en y mediante el que crear componentes que puedan comunicarse con otros componentes o aplicaciones, proporcionándoles servicios, incluso aunque los citados componentes y aplicaciones hayan sido desarrollados por otros programadores, o en lenguajes diferentes. No podemos desarrollar aplicaciones programando en COM sino utilizar un lenguaje de programación para desarrollar aplicaciones con componentes que se comuniquen e interactúen siguiendo el estándar que COM define.

COM es un estándar binario, es decir, los objetos desarrollados siguiendo sus especificaciones deben cumplir sus características una vez creados. Por ello, los objetos COM o los objetos OLE, si así se prefiere, pueden ser escritos en cualquier lenguaje de programación, por ejemplo Java

Conceptos fundamentales de COM

Los siguientes son conceptos fundamentales en el ámbito de COM

  • Componente COM: Una porción de código, ya sea un ejecutable o una librería dinámica, que contiene el código binario de los objetos COM

  • Objeto COM: Un ejemplar o instancia de un componente COM, que tiene sus propios elementos de datos, definidos en la clase del componente

  • Interfaces: Las interfaces proporcionan un mecanismo para que los objetos puedan exponerse a sí mismos, permitiendo que los otros componentes de una aplicación puedan hacer uso de los servicios que el objeto ofrece. Se plasman en un conjunto de prototipos de método, con una cierta finalidad, y que deberán ser implementados posteriormente para obtener la citada funcionalidad.

¿Qué es un control ActiveX?

Los controles ActiveX son componentes que utilizan la tecnología COM (Component Object Model) y que, en sus aspectos fundamentales siguen la filosofía de sus antecesores los controles OLE. Los controles ActiveX pueden insertarse en un documento HTML y comunicarse con los otros componentes que se hallen en él, tanto si son applets Java, o scripts.

En DCOM los programadores desarrollan componentes para que no se utilicen en un ordenador, sino para su uso en una red, en la que los ordenadores se hallan inmersos. En DCOM se especifican una serie de reglas y estándares en la que el usuario y la máquina, y las máquinas de la red entre sí interactuarán. Los controles creados con esta tecnología pueden ser construidos en múltiples lenguajes, como Visual C++, Visual Basic, o Java, y constituidos como librerías de enlace dinámico (DLL) almacenadas en ficheros .OCX

COM y Visual J++ 1.1

En Visual J++ 1.1 se proporcionan herramientas para referirse a objetos COM en el código Java. Esto facilita que puedan incluirse tanto controles ActiveX como componentes COM en cualquier programa escrito en Java. Veamos algunos aspectos relativos a esta posibilidad.

Utilizando objetos COM en el código Java

Java Type Library Wizard

Para utilizar cualquier objeto ActiveX desde Java es necesario importarlo creando una clase que lo envuelva (wrapper class) en el contexto y con la sintaxis de Java. Esto puede realizarse mediante Java Type Library Wizard.

COM (el modelo subyacente a ActiveX) define un mecanismo denominado bibliotecas de tipos (type library), para almacenar la información del tipo de los objetos COM. Cada una de estas bibliotecas contiene información sobre uno o más objetos ActiveX.

El asistente, accesible desde el menú Tools de Visual J++ 1.1, creará una serie de paquetes para los objetos COM de las librerías seleccionadas, y nos presentará un archivo en el que se hallan las descripciones de los interfaces y métodos definidos, que podrán llamarse desde un programa en Java.

Veamos cómo se puede llevar a cabo este proceso con el asistente.

  • Pulsar el menú Tools/Java Type Library Wizard. Se presentará un cuadro de diálogo para elegir la biblioteca de clases COM a convertir

  • Escoger la biblioteca apropiada

Una vez realizado en la ventana Output se muestran los resultados de la conversión y las sentencias para la importación de las clases creadas en los ficheros fuentes java en los que deseemos utilizar los objetos COM. En el ejemplo de la figura hemos convertido el control Calendar de Microsoft

Por otra parte, también se nos presentan una serie de ficheros llamados SUMMARY.TXT en la que se listan las definiciones de todos los métodos de las interfaces COM que van a poder ser utilizados en nuestro programa Java.

Para cada una de las bibliotecas importadas Java Type Library Wizard crea un directorio con el mismo nombre que la biblioteca de clases. Allí deposita las clases creadas, en ficheros .class, una para cada clase COM e interfaz. Cada uno de estos ficheros contiene un identificador que indica que es una clase wrapper para una clase COM.

Utilizando el objeto COM en el código Java

Una vez que se ha convertido el objeto COM mediante Java Type Library Wizard, podemos utilizar la sentencia import para poder utilizar las clases las clases creadas por el asistente.

La sentencia a escribir para nuestro ejemplo sería:

import mscal.*

La única restricción es que no puede hacerse uso de las clases directamente sino a través de una de sus interfaces.

Java y J++
Conversión de applets Java a clases COM

También podemos presentar nuestros applets Java como si fuesen servicios de componentes COM. Para ello utilizaremos el ActiveX Wizard for Java.

ActiveX Wizard for Java

Este asistente permite realizar el proceso inverso al anteriormente descrito, es decir, permite crear un control ActiveX con la misma funcionalidad que una determinada clase Java.

Para ejecutar este asistente basta con pulsar el menú Tools/ActiveX Wizard for Java. El asistente generará un método ActiveX para los métodos de la clase Java que tengan sentido en el nuevo ámbito. El objeto podrá utilizarse a través del interfaz creado sin ningún problema, una vez registrado.

Creación de componentes MTS con Visual J++ 6.0

Vamos a crear un componente COM con soporte para Microsoft Transaction Server utilizando Visual J++ 6.0. El objetivo es crear un pequeño módulo de software, un componente, que utilizando la tecnología COM, resida en el servidor a la espera de peticiones de cualesquiera aplicaciones cliente que quieran hacerse con una interfaz a su código binario. Este componente será escrito en Java, pero igualmente puede crearse con Visual C++ o Visual Basic, ya que, como hemos comentado, una de las características esenciales de COM radica en la independencia del lenguaje en la que el componente se desarrolla, ya que se trata de un estándar a nivel binario. Añadiremos al componente la funcionalidad de poder ejecutarse en el entorno de ejecución de Microsoft Transaction Server, de manera que el servidor pueda encargarse de gestionar los aspectos transaccionales.

El proceso de creación de componente de va a llevar a cabo en la misma máquina en la que se halla el servidor de bases de datos y el servidor transaccional, por simplicidad. Sin embargo, describiremos también cómo puede abordarse la situación en la que el componente se desarrolle en una máquina diferente para su posterior instalación en el servidor.

Creación del proyecto

Para poder crear el componente deberemos previamente haber creado un nuevo proyecto en el que ubicarlo. Los proyectos en Visual J++ 6 se crean en el ámbito de Solutions, que es el nuevo término que en Visual Studio 6 se utiliza para albergar proyectos heterogéneos con un mismo destino final, la colaboración para desarrollar una aplicación completa. Para crear la nueva solución accederemos al menú File/New Project, a lo que el entorno responderá presentándonos el cuadro de diálogo New Project

Este asistente permite realizar el proceso inverso al anteriormente descrito, es decir, permite crear un control ActiveX con la misma funcionalidad que una determinada clase Java.

Para ejecutar este asistente basta con pulsar el menú Tools/ActiveX Wizard for Java. El asistente generará un método ActiveX para los métodos de la clase Java que tengan sentido en el nuevo ámbito. El objeto podrá utilizarse a través del interfaz creado sin ningún problema, una vez registrado.

Creación de componentes MTS con Visual J++ 6.0

Vamos a crear un componente COM con soporte para Microsoft Transaction Server utilizando Visual J++ 6.0. El objetivo es crear un pequeño módulo de software, un componente, que utilizando la tecnología COM, resida en el servidor a la espera de peticiones de cualesquiera aplicaciones cliente que quieran hacerse con una interfaz a su código binario. Este componente será escrito en Java, pero igualmente puede crearse con Visual C++ o Visual Basic, ya que, como hemos comentado, una de las características esenciales de COM radica en la independencia del lenguaje en la que el componente se desarrolla, ya que se trata de un estándar a nivel binario. Añadiremos al componente la funcionalidad de poder ejecutarse en el entorno de ejecución de Microsoft Transaction Server, de manera que el servidor pueda encargarse de gestionar los aspectos transaccionales.

El proceso de creación de componente de va a llevar a cabo en la misma máquina en la que se halla el servidor de bases de datos y el servidor transaccional, por simplicidad. Sin embargo, describiremos también cómo puede abordarse la situación en la que el componente se desarrolle en una máquina diferente para su posterior instalación en el servidor.

Creación del proyecto

Para poder crear el componente deberemos previamente haber creado un nuevo proyecto en el que ubicarlo. Los proyectos en Visual J++ 6 se crean en el ámbito de Solutions, que es el nuevo término que en Visual Studio 6 se utiliza para albergar proyectos heterogéneos con un mismo destino final, la colaboración para desarrollar una aplicación completa. Para crear la nueva solución accederemos al menú File/New Project, a lo que el entorno responderá presentándonos el cuadro de diálogo New Project

En este cuadro escogeremos, dentro de la carpeta Visual J++ Projects/Components, el tipo de proyecto COM DLL. Llamaremos a nuestro proyecto ValidaPassword y pulsaremos el botón Open. Visual J++ 6 creará el proyecto, con una clase a la que cambiaremos el nombre para llamarla Validador. Para ello renombraremos el fichero en el que esta clase se define, para que tome el nombre Validador.java. Como es bien sabido, en Java el nombre del fichero debe coincidir con el nombre de la clase pública que se almacene en él exponiéndose al exterior.

Habilitación de la clase como un componente MTS

Una vez la clase ha sido creada, y antes de escribir el código que la va a hacer funcional, vamos a habilitar la clase como un componente MTS. Para ello usaremos el panel de gestión de clases de Visual J++ 6.0:. Los programadores familiarizados con Visual C++, podrán encontrar analogías entre este visor de clases y el archiconocido Class Wizard. La funcionalidad de esta herramienta es facilitarnos la modificación del código de una clase, permitiéndonos añadir métodos y propiedades y alterar sus características.

Deberemos marcar la casilla MTS Support Enabled y escoger el modo Supported, que indica que el componente soportará las transacciones, aunque no las requiera ineludiblemente. Esta acción vendrá acompañada por el marcado automático de la casilla COM Class. Class Builder escribirá un par de líneas de código que informarán al compilador de que debe crear y registrar la DLL como un componente MTS.

/**

* @com.register ( clsid=8EF440B8-0130-11D2-B399-002018104314, typelib=8EF440B9-0130-11D2-B399-002018104314 )

* @com.transaction (supported)

*/

Código del componente

El siguiente paso que vamos a acometer es escribir, en el fichero Validador.java, el código que va a dotar de funcionalidad a nuestro componente. Esperamos que nuestro objeto nos permita validar el nombre de usuario y contraseña que se le soliciten a un usuario, accediendo a una tabla de una base de datos en la que residan las informaciones de identificación.

Para acceder a la base de datos utilizaremos ADO (Active Data Objects), una tecnología disponible para cualquiera de las plataformas de desarrollo de Microsoft. Podríamos realizar exactamente la misma tarea utilizando ODBC o DAO. Sin embargo, vamos a aprovecharnos del soporte ADO incorporado en Visual J++ 6.0, dentro del paquete wfc.data. Así, deberemos importar este paquete en la parte superior de nuestro fichero fuente. Además deberemos importar el paquete com.ms-mtx, necesario para utilizar la clase IContextObject, que en la plataforma Java de Visual J++ 6, da acceso al objeto ContextObject del servidor de transacciones.

import com.ms.mtx.*;

import wfc.data.*;

Pasemos al código concreto de la clase. Vamos a exponer un método público, EsUsuario, que recibirá como argumentos el nombre de usuario y contraseña del usuario a validar y devolverá un valor booleano que indique si ambos datos corresponden o no a un usuario presente en la tabla Usuarios de la base de datos. Las acciones a llevar a cabo son las siguientes:

  • Declarar un ejemplar de la clase IObjectContext, que representará un contexto en MTS en el que se ejecutará el componente

  • Declarar dos variables auxiliares que servirán para almacenar el valor de retorno del método y el estado de la transacción

  • Iniciar un bloque try. Dentro de este bloque:

  • Instanciar el ejemplar de la clase IObjectContext, haciendo uso del método GetObjectContext del objeto incorporado MTX, que representa a Transaction Server en la librería de clases de Java

  • Crear un objeto ADO de la clase Connection, para representar una conexión con la fuente de datos en la que se halla la tabla de usuarios, en nuestro caso Aulanet

  • Abrir la conexión

  • Crear un objeto ADO de la clase Recordset, para albergar los registros obtenidos por una consulta SQL contra la fuente de datos

  • Inicializar la ubicación del cursor del Recordset para que se ubique en el servidor y también la conexión que deberá utilizarse, que será la que acabamos de crear

  • Escribir la consulta SQL, que deberá solicitar aquellos usuarios cuyo nombre de usuario y password coincidan con los recibidos por el método como argumentos.

  • Abrir el Recordset

  • Comprobar si el usuario existe. En caso contrario almacenar false en la variable auxiliar que contiene el valor de retorno

  • Cerrar el bloque try

  • Si se ha capturado una excepción en el bloque try, abortar la transacción, en caso contrario completarla.

  • Devolver el valor de retorno:

Una vez escrito el código deberemos construir nuestro componente, simplemente acudiendo al menú Build / Build. El entorno creará una DLL COM que contiene la clase Validador.class, así como el código stub para el registro de la clase

Instalación del componente en Transaction Server

Una vez que el componente ha sido creado debemos instalarlo en Transaction Server. Para ello deberemos tener un servidor Web IIS con Transacion Server instalado. Acudiremos a Microsoft Management Console y desplegaremos el snap-in de MTS. Crearemos un nuevo paquete, en el que incluiremos el componente que hemos construido anteriormente, tarea que realizaremos acudiendo al árbol Packages que cuelga de nuestra máquina y, pulsando con el botón derecho, elegir el menú contextual New/Package. Daremos a nuestro paquete el nombre Aulanet

Una vez el paquete ha sido creado, vamos a instalar el componente ValidaPassword. Para ello acudiremos al nodo Components dentro del nuevo paquete y escogeremos, en el menú contextual que se desplega al pulsar el botón derecho sobre él, el menú New / Component. Se nos presentará un asistente que nos conducirá en el proceso de instalar el componente

Pulsaremos el botón Install New Component(s), que nos permitirá instalar el componente, y registrarlo, a partir del fichero dll que lo contiene. Bastará con que seleccionemos el fichero, y MTS encontrará el componente o componentes que contiene.

Pulsando el botón Finish el entorno nos añadirá el componente a los que se incluyen en el paquete. Si lo deseamos podemos añadir más componentes .

Pulsando sobre nuestro componente podemos ver sus propiedades, que incluirán el soporte para transacciones que especificamos al habilitar en visual J++ el componente para MTS.