viernes, 29 de junio de 2007

Struts con NetBeans 5.5 Parte I




Introducción

Podemos encontrar mucha información acerca del Framework Jakarta Struts en la red, por tal motivo este artículo no pretende ser un tutorial de Struts propiamente, sólo es una guía práctica para implementar algunas utilidades con Netbeans 5.5 y Struts 1.2.9.

Crear la Aplicacion Web:

Para crear una nueva aplicación web nos dirigimos a File/New Project:


Asignamos nombre al proyecto:



Y marcamos la opción Struts 1.2.9, notemos como asigna la extensión *.do como predeterminada, esta extensión según he leido no es obligatoría, podemos usar cualquier otra, sin embargo por convención es preferible usarla como lo indica el estandar de struts.



Una vez seleccionadas las opciones, damos clic en finalizar. Apareceré el explorador de proyecto con con su correspondiente árbol de estructura.



Vale la pena que antes de seguir veamos como esta organizado el patrón MVC de Struts.

Este es modelo del caso más simple que se podría presentar en una aplicación basada en struts.

  1. El cliente hace la petición al controlador que a final de cuentas es un servlet, a este servlet se le conoce como action, este es mapeado a través de un archivo xml que generalmente se llama struts-config.xml y que incluye todas las directivas que controlan la aplicación.
  2. Si la acción se encuentra dentro del archivo de configuración, el ActionServlet controlador entrega el control al modelo que general mente es un JavaBean que contiene la lógica del negocio que puede o no estar dentro del mismo Servidor Web ó en un Servidor de Aplicaciones como JBoss ó WebLogic (en forma de EJB).
  3. Este a su vez puede hacer una petición a una capa de persistencia, a una Base de Datos, Archivo XML ó de texto plano. Hasta aquí el flujo se encuentra dentro del modelo.
  4. Una vez obtenidos los métodos ó la información requeridos el controlador retoma el control del flujo para presentar información a través de una pégina JSP la vista ó simplemente ejecutar el método del bean sin presentar ninguna información situación que raramente nos podremos encontrar pero que es posible.
Es muy sencillo crear un proyecto de una aplicación web basada en struts con Netbeans 5.5, ahora vamos a hechar un vistazo a los documentos más importantes del proyecto:

El documento web.xml




En este documento se establecen las directivas de la aplicación, como ya sabemos todo proyecto basado en servlets debe incluir este documento y todos los servlets del proyecto deben ser declarados aquí, de esta forma el contenedor (tomcat) podrá acceder a ellos.
A grandes rasgos el web.xml que utilizamos con struts se compone de las siguientes directivas:

  1. servlet contiene la definicion de los servlets que residiran en el contexto.
    • servlet-name el nombre utilizado para hacer referencia al servlet en este caso se llama action
    • sevlet-class el nombre de la clase del servlet, para struts la clase se llama ActionServlet, todos los peidos que lleguen a nuestra aplicacion struts deben pasar atraves de un action.
      • param-name nombre del parametro
      • param-value el path en donde recide el archivo de configuracion struts-cofig.xml que es el archivo que regira el contexto del framework
    • url-pattern el patrón permite asociar al Servlet de struts con todos los pedidos que tengan la extención .do
      • Es muy importante recordar que de ahora en adelante todos las ligas de referencia que utilicemos en nuetro proyecto se deben asociar a una acción , osea en lugar de mandar llamar a la página pagina.jsp deberemos asociarla a una accion.do que generará la vista ( no preocuparse si esto suena confuso, pues aún n hemos visto como hacer esto, pero digamos que en este concepto radicará el exito de entender ó no el funcionamiento del framework)
    • wlecome-file El archivo de la página que se visualizara al ingresar al entorno de nuestra aplicación creada con struts.

(Nota: Por ahora solo veremos estos parametros)


Bueno, ahora vamos a ver que pasa despues de haber creado nuestra aplicación, así sin habe tecleado una sola línea de código, hacemos clic sobre el icono "Debug Main Project" o con la tecla F5:


Se compilará y hará el despliege del proyecto (deploy), el navegador por defecto (Firefox para este caso) es lanzado y podremos entrar al entorno de la aplicacion que en este caso tiene como pagina de beienvenida la página "index.jsp", cuyo codigo es el siguiente:



Notemos que tiene una liga que hace referencia a la url : "./Welcome.do" , pero en donde rayos esta ese documento?, en realidad no es un dovumento, sino una referencia que Netbeans carga en el struts-cofig.xml y que apunta por así decirlo hacia un archivo JSP que se llama "welcomestruts.jsp" , veamos que si hacemos clic sobre la liga, la barra de navegación del browser mostrara la siguiente URL : http://localhost:8084/ToolShop/Welcome.do


Ahora vamos a ver como lograr que esto pase. Abrimos el documento ./WEB-INF/struts-config.xml

jueves, 1 de marzo de 2007

Stored Procedures con Oracle10 EX

Procediniento sencillo que busca un registro coincidente con el argumento p_email que proviene de un servlet, si no encuntra coincidencias, creará un nuevo registro.

CREATE OR REPLACE PROCEDURE INSERTA_CLIENTE(p_idCliente out Cliente.idCliente%TYPE, p_nombre in Cliente.Nombre%TYPE,
p_apaterno in Cliente.APaterno%TYPE, p_amaterno in Cliente.AMaterno%TYPE, p_email in Cliente.Email%TYPE,
p_estado in Cliente.Estado%TYPE,p_ciudad in Cliente.Ciudad%TYPE,
p_pwd in Cliente.Pwd%TYPE)

AS

aux Cliente.idCliente%TYPE;

BEGIN

SELECT idCliente INTO aux FROM Cliente

WHERE lower(email)= lower(p_email);

p_idCliente:=-1;

EXCEPTION

WHEN NO_DATA_FOUND THEN // (NO_DATA_FOUND es una constante de oracle) Si no encuentra ningun registro ...

INSERT INTO Cliente VALUES(SEQ_IDCLIENTE.NEXTVAL,p_nombre,p_apaterno,
p_amaterno,p_email,p_estado,p_ciudad,p_pwd);


SELECT SEQ_IDCLIENTE.CURRVAL INTO p_idCliente FROM dual; //SEQ_IDCLIENTE.CURRVAL es un objeto de oracle que crea una, secuencia de mumeros, su uso tine ciertas restricciones,dual es umna tabla auxiliar de oracle que se crea temporalmente.

COMMIT;

END INSERTA_CLIENTE;

Finalmente el procedimiento devuelve un valor de salida llamado p_idCliente

viernes, 23 de febrero de 2007

Breves

Crear un Package Java con Console

En la cabecera del archivo.java se anexa la siguiente instrucción:


package directorio_principal.sub_directorio1.subdirectorio_n;

En la consola:

javac -d . archivo.java

Esta instrucción genera los folders y los integra en el calsspath del proyecto, de ahora en adelante compilaremos los archivos java que se deseen incluir en este package de esta forma.


Clases Abstractas

Una clase abstracta tiene la característica de no poder ser instanciada debido a que sus métodos son abstractos es decir aún no han sido implementados o están vacíos para decirlo en una forma más simple, la forma de invocar una clase abstracta es extendiendola e implementando sus métodos en la clase extendida.

martes, 13 de febrero de 2007

MySQL 5.0 en MacOSX

El paquete para MacOSX lo encontre aquí: MySQL 5.0, actualmente tengo instalado Apache 2.0 con PHP 4 y Mysql 4 corriendo en una PowerPc G4 y todo ha ido de maravilla, todo el paquete se puede conseguir en Server Logistics en forma gratuita y su configuración es sumamente sencilla. Ahora toca instalar MySQL 5 para poder invocar Stored Procedures con Java.

Para crear un procedimiento almacenado desde mysql:



mysql> delimiter // (para cambiar ";" por "//")

mysql> CREATE PROCEDURE p (out p int)
-> BEGIN
-> SELECT COUNT(*) INTO p FROM muestra; <- esta tabla existe en la BD -> END//

mysql> delimiter ;

**********************************************************************************
Para crear un Stored Procedure un poco más útil:

mysql> DELIMITER //

mysql> CREATE PROCEDURE inserta(p int(1))
-> BEGIN
-> SET @id = p;
-> SET @muestra = HEX(p);
-> CREATE TABLE muestras(id int(1), muestra varchar(10));
-> INSERT INTO muestras(id, muestra) VALUE(@id, @muestra);
-> END//

Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> CALL inserta(1);

Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM muestras;
+------+---------+
| id | muestra |
+------+---------+
| 1 | 1 |
+------+---------+
1 row in set (0.00 sec)

Manejo de excepciones con Stored Procedures

mysql-> CREATE PROCEDURE creatabla_m()
BEGIN
DECLARE error_tabla CONDITION FOR SQLSTATE '42S01';
DECLARE CONTINUE HANDLER FOR error_tabla
BEGIN
SELECT 'La tabla muestras ya existe, esta se volvera a crear';
DROP TABLE muestras;
CREATE TABLE muestras(id int(1), muestra varchar(10));
END;
BEGIN
CREATE TABLE muestras(id int(1), muestra varchar(10));

END;
INSERT INTO muestras (id, muestra) VALUES (1, 'nuevo');
END//