Download xdc_sc

Document related concepts
no text concepts found
Transcript
Ampliación y Optimización De Un Repositorio De Metadatos De
Componentes De Software Para PyMEs Colombianas
David Ortega y Jorge A. Beltrán
Carrera de Ingeniería de Sistemas
Universidad Javeriana
Bogotá, Colombia
{david.ortega, jnull}@javeriana.edu.co
Documento de Definición de los Servicios que van a prestar los
WebService
JUSTIFICACION
Los Webservices son aplicaciones modulares y reutilizables que se comunican
por la Web, o al interior de una organización, para llevar a cabo una funcion
especifica del negocio. Basandose en una serie de protocolos estandar de
comunicación, una de las principales motivaciones para la implementacion de
Webservices en nuestro poyecto es que estos son idependientes de la
plataforma y tecnologia y pueden ser unidos muy facilmente. La comunicación
entre diferentes sistemas es uno de sus fuertes, con estos, el proceso para la
conexión de los procesos se hace mucho más sencillo y flexible.
La filosofia del Repositorio de metadatos es la de prestar servicios a nuestras
Pymes Colombianas, y los webservices son los precursores para la adopcion
de una arquitectura orientada a servicios. Esta arquitectura promete eficiencia
en costos, integracion simplificada, la facilidad de incorporacion de nueva
tecnologia y la valoracion de los activos actuales. Factores que van de la mano
con las necesidades de nuestro mercado objetivo.
IMPLEMENTACION
Inicialmente en este documento se va a hacer una breve descripcion de la
funcionalidad actual del prototipo funcional de la biblioteca de componentes
para luego definir los servicios que van a ser publicados en el WebService,
describiendo su funcionalidad a nivel general.
Funcionalidades actuales del Repositorio:

Registro de Proveedor :
Puerta de entrada a los modulos de ingreso y actualizacion de metadatos de
componentes. En el registro se solicita la siguiente informacion: Nombre, Login,
Email, Password, Re-Password. Retornando un mensaje de éxito en caso de
que el registro se halla realizado correctamente.

Autenticación de Proveedor :
Paso obligatorio del sistema para tener acceso a los modulos de ingreso y
actualizacion. Aca son solicitados el usuario y el password del proveedor
previamente registrado.

Ingreso de metadatos de un componente
Aca es posible ingresar los metadatos que describen un componente, esta
operación se puede realizar luego de que se ejecute la autenticacion del
proveedor. Durante toda esta operación se va a ir ingresando de a poco la
informacion de un componente basandose en el Estandar de Descricion de
Componentes desarrollado por el director del proyecto PICS. Inicialmente se
ingresa y modifica la información básica del componente. A continuacion se
ingresa la descripcion del componente con la informacion solicitada por el
formulario. Luego, es requerida la informacion del creador, publicador,
contribuyente, formato, relaciones y los derechos del componente. El sistema
informara de los errores o el éxito de las operaciones.

Actualizacion de metadatos de un componente previamente ingresado
En este modulo el sistema solo dara autorizacion de actualizacion al proveedor
que ingreso el componente, es importante en este punto, que el sistema trae
los componentes publicados previamente por el proveedor autenticado.

Consulta de componentes almacenados bajo los siguientes criterios: tipo
de arquitectura, sistema operativo, lenguaje de programacion,
funcionalidad y palabra clave.
En este modulo el sistema permite consultar los metadatos de los componentes
teniendo en cuenta la informacion de filtro para ejecutar la busqueda
TRANSFORMACION AL ESTANDAR DE DESCRIPION DE COMPONENTES
(XDC_SC)
Actualmente toda esta informacion esta contenida en objetos java, la propuesta
consiste en hacer de esta informacion, o por lo menos aquella que se valla
publicar en el webservice, un procesamiento previo para dejarla toda en
formato XML con la estructura del Estandar de Descripcion de Componentes,
de esta forma el cliente que consuma el servicio va a poder aprovechar todas
las ventajas y oportunidades que provee este formato.
Otra razon por la cual se llevara a cabo este procesamiento previo, es debido a
un acuerdo con el director del proyecto en donde es más conveniente tener
esta informacion que se va a publicar en clases aparte de las que ya se
encuentran desarrolladas.
Ademas de esto, otro de los motivos por el cual se pasa la informacion a
formato XML, es porque vemos que la base de todo el proyecto es el Estandar
de Descripcion de Componentes desarrollado por rafael gonzales y en esencia
este es un archivo descriptor XML donde esta reflejada de alguna forma toda la
funcionalidad del Repositorio de Componentes y en la actualidad esta
informacion no esta en este formato, nos parece conveniente que los clientes
que consuman los servicios publicados en el webservice conoscan el contenido
de la informacion almacenada en el repositorio en el formato como fue
concebido inicialmente.
Teniendo en cuenta los dos puntos tratados anteriormente, funcionalidad actual
y procesamiento previo a XML, vamos a definir los servicios a publicar en el
WebService.
SERVICIOS:
Es importante aclarar que los servicios que necesiten de la autenticacion previa
de usuarios, esta operación se hara efectiva, por lo tanto es necesario que para
este tipo de consultas se solicite el usuario y password.
Ahora mismo vamos a mencionar tres grupos generales de servicios a prestar

Consulta de componentes almacenados bajo criterios de selección
(Detalle del Componente).
Los criterios de busqueda son los mismos que estan definidos en la aplicación
desarrollada en la primera etapa del proyecto, para este servicio será publicada
la funcionalidad actual del sistema como servicio Web, sin ninguna
transformación previa a ningún formato diferente al que ya esta definido en el
repositorio, para este servicio se creara un cliente de prueba en el que se usara
el formato adecuado para el consumo del servicio.

Actualización de un componente previamente ingresado, manteniendo la
regla de que el proveedor que lo ingreso sea el unico con autorizacion
para actualizarlo.
La aclaracion anterior de solicitar usuario y password aplica para este tipo de
servicio, en este punto, el cliente que va consumir este servicio debe conocer
de antemano la informacion del componente que va a actualizar, es esto
necesario.

Ingreso de un componente
Para el ingreso de un componente, el servicio inicialmente tomara toda la
informacion tenida en cuenta en el flujo de la aplicación desarrollada en la
etapa inicial del proyecto en donde se ingresa la descripcion del componente
con la informacion solicitada por el formulario. Luego, es requerida la
informacion del creador, publicador, contribuyente, formato, relaciones y los
derechos del componente. Ahora mismo esta definido que el cliente use de una
vez el Estandar de Descripcion de Componentes y sea este nuestro formato
para el ingreso de toda esta inforamcion al sistema. El servicio debe estar en
capacidad de tomar toda esta informacion (un String XML) y en la medida de
que la informacion sea solicitada por el flujo de la aplicación, esta va a ser
suministrada a partir del archivo descriptor (XDC_SC).
La facilidad de esto es la forma facil y clara en que el cliente puede ingresar a
traves de un solo formato, lo que se le estaba enviando en diferentes
momentos dentro de la sesion.
Aclaramos que toda esta implementacion esta sujeta a cambios ya que todo el
desarrollo esta de algun modo sujeto a la arquitectura inicial del repositorio.
Ahora mismo, la propuesta es la siguiente:
Contamos con una arquitectura j2ee, la cual nos brinda una funcionalidad
basica, y lo que se propone hasta ahora es seguir con la misma funcionalidad,
de tal forma que vamos a reutilizar tanto el modelo de datos, como la logica del
negocio ya desarrollada, y que para la transformacion previa a la publicacion
del servicio la informacion sea tomada desde el mismo punto en donde los
datos son preparados para ser desplegados en pantalla.
DETALLES TECNICOS DE LA IMPLEMENTACION DE LOS SERVICIOS:
Anteriormente comentamos que para dos de los tres servicios que van a ser
publicados, se va a utilizar el formato XML que define el estándar de
componentes, esta funcionalidad esta representada en un componente
desarrollado que denominamos GATEWAY.
Contexto
Precondición
Poscondición
Parámetros
GATEWAY es un componente que nace como una iniciativa
para dar solución al problema de procesar la petición hecha
por un cliente desde el servicio Web y para mejorar el
rendimiento de la aplicación durante el desarrollo.
El objetivo de implementar este componente, es centralizar
los llamados de las funciones implementadas por la lógica de
negocio por los servicios Web, con esto se busca reducir el
tiempo de implementación para el procesamiento de los
servicios pendientes de la aplicación.
Elaboración, por parte del Cliente, de la cadena de texto a
partir de la cual GATEWAY da inicio a su funcionalidad. Esto
se refiere al String XML, que representa el XDC_SC.
Invocación correcta, en tiempo de ejecución, del método de
objeto de negocio. Encargado de la petición hecha por parte
del usuario.
1 Cadena de texto que representa un documento XML, el
XDC_SC especificamente, con la información necesaria
para invocar de forma dinámica los métodos de los
objetos de negocio que procesan el requerimiento.
Funcionalidad
1
Lectura XML
Como primera medida es necesario procesar la cadena
de texto que llega como parámetro de la petición hecha
por el usuario y construir el documento XML a interpretar.
En java, para la interpretación de documentos XML
hacemos uso de la Liberia JDOM que nos proporciona
funciones que permiten de una forma ágil y sencilla
reconocer y manipular un documento XML.
Lo principal de esta fase, es reconocer el id definido en la
petición hecha por el cliente para poder hacer el llamado
al método correspondiente.
Este id es un atributo que se adiciona al XDC_SC el cual
indica al GATEWAY que operación de las dos definidas
se va a ejecutar, Ingresar o Actualizar un componente,
este atributo se adiciona en el tag <xdc_sc >
<xdc_sc SQLAction="ActualizarComponente">
<xdc_sc SQLAction="IngresarComponente">
2
Mapeo del identificador con el método que debe ser
invocado (clase, nombre del método, parámetros).
El identificador, es un id único, definido por nosotros y
hace referencia a ese atributo adicional al tag <xdc_sc >,
a través del cual podemos reconocer la clase y el método
que van ser invocados. Esta fase consiste simplemente,
en relacionar el identificador con los métodos y clases
creados en los objetos de negocio, así el componente
sabe que objeto debe instanciar de forma dinámica.
Luego, la información obtenida del mapeo debe ser
administrada y para esto usamos el API REFLECTION
DE JAVA.
3
Administración dinámica
(Llamado y Retorno)
del
método
invocado.
El API Reflection es una herramienta muy poderosa que
nos permite realizar en Java cosas que en otros
lenguajes es imposible.
Todos los objetos en java heredan de la clase
java.lang.Object y por ello están dotados de un método
getClass, cuya firma es public final Class getClass(). Este
método nos devuelve un objeto java.lang.Class, que va a
ser nuestro punto de partida para el diseño de nuestro
componente GATEWAY.
Los pasos a seguir, haciendo uso del API, son los
siguientes:




Cargar la clase obtenida de la tabla de mapeo.
Instanciar el objeto.
Invocar el método obtenido de la tabla de mapeo.
Retornar respuesta del método.
Cargar la clase obtenida de la tabla de mapeo
Class clase;
clase = Class.forName("className ");
java.lang.Class forName(String className): Carga una
clase del classpath a partir de su nombre (nombre
completo, con todos los paquetes. Si la clase no se
puede cargar, porque no se encuentra en el classpath, se
lanzará una java.lang.ClassNotFoundException.
Instanciar el objeto
Object objeto;
objeto = clase.newInstance();
Obtenemos simplemente la instancia (objeto) de la clase
cargada anteriormente, esto con el fin de tener acceso al
método que se necesite invocar, ya que mas adelante
este objeto hace parte de los parámetros de entrada de la
función que permite llamar dinámicamente el método
definido en nuestro mapeo. Si el objeto no puede ser
instanciado
de
lanzará
una
java.lang.InstantiationException.
Invocar el método obtenido de la tabla de mapeo
Method metodo;
metodo
clase.getMethod(map.getMetodo(),arrayParamTypes);
=
java.lang.reflect.Method getMethod(String name, Class[]
parameterTypes): Devuelve un método público de la
clase, a partir de su nombre, y de un array con las clases
de los parámetros del método. Si la clase no contiene
ningún método con ese nombre y esos parámetros, se
lanzará una java.lang.NoSuchMethodException.
Retornar respuesta del método
En este punto, el método del API que permite invocar el
método adecuado es:
public Object invoke(Object obj, Object[] args): Ejecuta el
método sobre un objeto, pasándole los parámetros
necesarios, y devuelve su resultado. Si al invocar este
metodo se genera algún error, se lanzará una
java.lang.reflect.InvocationTargetException.
API
Clase
public class Gateway
Extiende
Constructor public Gateway()
Permite
instanciar
la
clase sin tener
que
pasar
parámetros.
Métodos
public
String Método
que
Gateway1(String cad)
concentra toda la
funcionalidad del
componente.
public
Mapeo Encargado
de
Mapear(String id)
mapear el id con
el método y la
clase
correspondiente,
se conecta a la
base de datos
public
Document Interpreta
la
convertStringToXML(String cadena que llega
cad)
de la capa de
presentación y lo
transforma a un
documento XML.
Toda esta funcionalidad se debe desarrollar del lado del servidor, es claro que
para efectos de pruebas debe ser desarrollado un cliente que haga uso de todo
lo planteado anteriormente, para esta parte, va a ser desarrollada una interfaz
de usuario en Swing en la cual se va a reflejar el flujo tal cual esta diseñado en
la aplicación Web, pero que va a hacer uso del GATEWAY, de un servicio de
autenticación y del otro servicio que se va a publicar que hacer referencia a la
consulta de componentes.
Cliente Swing prueba del WebService
Para acceder a los servicios de ingreso y actualización de componentes, el
proveedor debe estar previamente registrado y autenticado. En el caso del
ingreso de componentes el cliente de prueba desarrollado desplegara una serie
de pantallas mediante las cuales el proveedor ingresara la información
correspondiente a la descripción del componente que desea almacenar en el
repositorio. Se describirán las pantallas describiendo la funcionalidad y el flujo
de cada servicio:
Es clave anotar que en la aplicación Web durante la ejecución del programa, el
flujo de la aplicación hace un uso muy importante de la sesión del usuario
(HttpSession), de esta forma la información recolectada en las jsp’s de las
funcionalidades de ingreso y actualización de componentes, se mantiene
almacenada en lo que se denomina sesión de usuario, para nuestro cliente del
servicio Web hemos definido, para reemplazar las facilidades que el
HttpSession brinda, una clase contenedora en la cual almacenamos toda la
información de los flujos que cada servicio requiere que tiene la particularidad
que su implementación sigue el patrón de desarrollo Simgleton el cual actúa
como una variable global en la medida de que se diligencian los frames de la
interfaz swing y así al final construir de una vez el documento XDC_SC que se
va a enviar como parámetro de los servicios Web definidos.
Antes de usar cada uno de los servicios el proveedor debe autenticarse frente
al sistema. Para esto encontrara la siguiente pantalla:
Figura: Interfaz Cliente Webservice, Autenticación Proveedor

Consulta de componentes almacenados bajo criterios de selección
(Detalle del Componente).
Figura: Interfaz Cliente Webservice, servicio Consultar Componente
Luego de escoger el primero de los servicios, la primera pantalla será igual a la
que encontramos en la aplicación Web que hace referencia a la búsqueda
general de un componente.
Figura: Interfaz Cliente Webservice, servicio Consultar Componente
Para este servicio Web, que depende de la parte del tema de optimización de
consultas, no se ha construido la interfaz definida como ultima versión eso
depende de cómo vamos a integrar esos temas en el desarrollo, así que ahora
mismo queda pendiente mostrar la interfaz definitiva que muestra el resultado
de las consultas.

Actualización de un componente previamente ingresado, manteniendo la
regla de que el proveedor que lo ingreso sea el único con autorización
para actualizarlo.
Para este servicio las pantallas del flujo, usando la clase Singleton, de la q
hablamos anteriormente, son las siguientes:
Figura: Interfaz Cliente Webservice Actualizar Componente, – Básico
Figura: Interfaz Cliente Webservice Actualizar Componente, – Descripción
Figura: Interfaz Cliente Webservice Actualizar Componente, – Creador,
Publicador, Contribuyente (tienen la misma información de entrada)
Figura: Interfaz Cliente Webservice Actualizar Componente, – Formato
Figura: Interfaz Cliente Webservice Actualizar Componente, – Relaciones
Figura: Interfaz Cliente Webservice Actualizar Componente, – Drechos

Ingreso de un componente
Para este servicio el flujo anterior de actualización es el mismo, usa la misma
interfaz.
El resultado de cada una de estas operaciones del lado del cliente da como
resultado el siguiente archivo xml, que describe el estándar de componentes
adicionando el atributo que mencionamos anteriormente:
…………..
Esta solución se va a llevar a cabo como esta planteado este documento. Con
esto ganamos todas las oportunidades explicadas en los documentos de la
primera fase del proyecto, y en la primera parte de este documento, pero
pensando un poco en lo que viene con el tema de la optimizacion de consultas
vemos que nos encontramos sujetos a ciertas caracteristicas, como las
consultas basicas prestadas por el repositorio hasta este momento. Entonces si
queremos hacer cambios sobre el modelo de datos mas adelante, la logica del
negocio va a verse afectada y por lo tanto tendriamos que hacer cambios sobre
la logica y asi sucesivamente, y no se esta respetando la constante de
mantener el desarrollo implementado en la primera fase del proyecto. Es así
como nuestro desarrollo va a tratar de respetar esto al máximo, pero
cumpliendo con nuestros objetivos iniciales.
Por ultimo, este desarrollo va a incluir un manual de instalación junto con el
cual se va hacer entrega de dos instaladores, el primero de ellos es la Maquina
Virtual de Java, componente necesario para ejecutar programas JAVA y el
segundo instalador va a ser el cliente swing que tiene como característica que
este instalador es un archivo de extensión .exe que va a poder ser descargado
de la pagina Web del nuestro proyecto y automáticamente generara un acceso
al desarrollo a través del menú inicio de Windows, de esta forma al cliente le
parecerá mas cómodo ejecutar este cliente y hacer uso de los servicios Web
publicados.