25 diciembre 2006

Por fin Luz v1.0 disponible


Despues y de mucho especular por fin ve la luz el " Sistema Luz v1.0". Sistema de Gestión de Empleados, para la Agencia Comercializadora Prestadora de Servicios PRECOE.

Este proyecto que originalmente se inicio hace como 1 añ o y medio, y que fue liberado a inicios del añ o 2006, pero con algunas, por no decir muchas fallas, pero fue remotado hace 3 meses para corregir estos errores y agregar mejoras.

Este proyecto surguio como resultado de proyecto de tesis, con el fin de aprender y aplicar la tecnología java orientado a una aplicación stand-alone y que por fin y de muchos desvelos sale la versión estable, esta a disposición de cualquier persona en código fuente, desarrollado totalmente en java, utilizando como motor de base de datos MySQL 5.0.

NOTA: Antes de continuar, quiero decir que este Sistema lo desarrolle completamente en java, cuando apenas no sabia nada, así que si observas el código notaras que la forma de programar es muy " inocente" , en cierto sentido y que en algunas otras es muy redundante, mi justificación es la de provar cual era la mejor forma de hacer las cosas y en realidad me he llevado varias sorpresas. (lo digo porque ya teniendo un poco de experienciay estudiar lo que hice al inicio veo y reconosco mis errores, pero no me arrepiento de haberlos hecho porque ya se como no se deben hacer las cosas, el problema radica en que me salto el diseñ o " vista-modelo-controlador" , solo en el último módulo en el de " configurar propiedades" lo hago y lo es ya que fue el último que hice dentro del sistema, pero no por eso el sistema deja de tener su chiste o su dificultad, y sus trucos)
Primeramente descargaremos el fuente Luz
v1.0



También tendra que descargar el script de la creación de la base de datos Luz-db.sql
Vea la documentación de Sistema Luz v1.0
Dentro de las caracteristicas y mejoras que se hicierón son:
  • Manejo de roles

  • Altas, bajas y modificación de empleados

  • Busqueda de empleados

  • Impresión de información

  • Gestión de usuarios

  • Y mejoras en el fuente

  • Mas adelante continuae con detalles sobre la configuración e instalación
    del sistema, si tienes alguna duda o interes hasmelo saber.

    30 junio 2006

    Conectividad con la API JDBC

    La siguiente pequeña tutoría consiste en mostrar y enseñar
    lo que te piden en una entrevista de trabajo, como caso practico para evaluar
    el conocimiento que traes como programador.

    Básicamente te piden que realices una conexión con una base de datos
    ya sea en Oracle, MySQL o Server SQL, e inmediatamente te piden insertar, modificar,
    consultar y eliminar datos de algunas tablas.

    Bueno, empecemos de una vez, para terminar temprano, pero primero me imagino
    que querras ver el código fuente, asi que lo podras descargar de AQUI.


    PRIMER PASO: debemos de declarar algunas variables que nos serán útiles:

    private Connection conexion;// Representa la conexión con una BD.

    private Statement stmSql;//ejecutar una sentencia SQL

    private String sControlador; //Contiene el nombre del controlador.

    private String sUsuario;//Contiene el nombre de usuario.

    private String sContasenia;//contraseña para el acceso a la BD

    private String sURL;//Contiene el url para realizar la conexión

    private String sDB;//Nombre de la BD para trabajar

    De todas estas variables las mas importantes son la de Connexion , Statement, ya que en estas radican la funcionalidad de la conexión a la BD.


    SEGUNDO PASO: crear un constructor sin parámetros, que nos permitirá realizar una conectividad a una BD por default, el constructor de la clase le asignaremos, las rutas y/o parámetros que permitirán la conexión a la BD

    public Conexion(){

    sControlador = "com.mysql.jdbc.Driver";

    sDB = "dbluz";

    sUrl = "jdbc:mysql://localhost/"+sDB;

    sUsuario = "root";

    sContrasenia = "moster03";

    }

    Observe como la variable sControlador se le asigna el nombre del controlador, en este caso la conexión se realiza con MySQL, el nombre cambia dependiendo
    de la BD a conectarse, se puede configurar una conexión especificando
    la clase del driver y la URL de la conexión para la base de datos seleccionada.
    Abajo tiene un listado con las clases de driver, las URLs de conexión
    y los ficheros .jar del driver para las bases de datos más utilizadas:


    DB2

    Clase Driver : COM.ibm.db2.jdbc.app.DB2Driver

    URL de Conexión:: jdbc:db2:<database>

    Fichero .jar/.zip: db2java.zip

    Sybase

    Clase Driver : com.sybase.jdbc2.jdbc.SybDriver

    URL de Conexión:
    dbc:sybase:Tds:<host>:<port>/<database>

    Fichero .jar/.zip: jconn2.jar

    Oracle

    Clase Driver : oracle.jdbc.driver.OracleDriver

    URL de Conexión: jdbc:oracle:thin:@ <host>:<port>:<sid>

    Fichero .jar/.zip: classes12.zip

    SQLServer

    Clase Driver : com.microsoft.jdbc.sqlserver.SQLServerDriver

    URL de Conexión: jdbc:microsoft:sqlserver://localhost:1433

    Fichero .jar/.zip: mssqlserver.jar, msbase.jar, msutil.jar

    PostgreSQL

    Clase Driver: org.postgresql.Driver

    URL de Conexión: jdbc:postgresql://<server>:<port>/<database>

    Fichero .jar/.zip: postgresql.jar


    NOTA:

    • Los drivers o conectores para la JDBC generalmente son ofrecidos por
    las mismas empresas que ofrecen los servicios de las BD, por ejemplo MySQL la
    ofrece en el siguiente dominio: http://www.mysql.com/products/connector/j/

    TERCER PASO: Crear otro constructor que realice la conexión a la BD,
    nótese que dependiendo de la información que le enviemos, este
    constructor nos permitirá realizar la conexión con cualquier BD.

    public Conexion(String sControlador, String sDB, String sUsuario,

    String sContrasenia, String sUrl){

    this.sControlador = sControlador;

    this.sUsuario = sUsuario;

    this.sContrasenia = sContrasenia;

    this.sUrl = sUrl+sDB;

    }

    Dependiendo de la funcionalidad de tu código, tu eliges que tipo de
    constructor elegir, si tu sabes que tipo de BD utilizar y no cambia utiliza
    la primera, si por el contrario tu necesitas estarte conectando en varias BD
    como Oracle o Serverr SQL y no estés creando clases para realizar las
    conexiones para cada una te recomiendo la segunda.

    CUARTO PASO: el siguiente paso es crear un método que nos permita abrir
    la conexión a la BD.

    private void vodAbrirConexion(){

    try{

    Class.forName(sControlador).newInstance();

    conexion = DriverManager.getConnection(sUrl,sUsuario,sContrasenia);

    stmSql = conexion.createStatement();

    System.out.println("Conexion Creada con Exito '_'");





    Este método es muy importante ya que en este crearemos las instancias
    correspondientes para realizar la conexión.

    Nótese como en el método pasado se invoca al método forName
    de Class que devuelve una Clase, especificada con el controlador, garantizando
    un objeto de la clase del controlador. En seguida creamos una instancia de la
    clase Connection por medio de la clase DriverManager que obtiene la conexión
    por medio del método getConnection con los atributos de la url de la
    BD, el nombre del usuario de la BD y por ultimo la contraseña del usuario,
    que administra la BD, creamos otra instancia de la clase Statement en base a
    la instancia Connection antes creada por su método createStatement, esta
    instancia de Statement es con la que estaremos interactuando hasta que se cierre
    la conexión a la BD para realizar las distintas sentencias SQL. Finalmente
    creamos las excepciones que nos permitirán verificar que se halla realizado
    con eficacia la conexión.

    QUINTO PASO: creamos un método que nos permita cerrar la BD.

    public void vCerrarConexion(){

    try{

    if(stmSql!=null){

    stmSql.close();

    ….

    }

    if(conexion!=null){

    conexion.close();

    ……

    }

    }

    catch(SQLException eSQL){/*NO HACER NADA*/}

    }

    Nótese como cerramos tanto el objeto de Statement como el objeto de Connection.

    SEXTO PASO: finalmente creamos un método que nos permitirá ejecutar
    sentencias SQL, impactando en la BD ya sea para Seleccionar, Borrar, etc.

    Como se observa el siguiente método nos permitirá ejecutar sentencias.

    private ResultSet rstSetConsulta(String sConsultaSql){

    ResultSet rsConsulta = null;

    try{

    rsConsulta = stmSql.executeQuery(sConsultaSql);

    }

    ….

    Observe que esta función nos regresa un objeto de tipo ResultSet, así
    como recibir como parámetro una consulta sql, que será procesada
    por el método executeQuery, de la clase Statement.

    SEPTIMO PASO: Finalmente nos queda crear un método que nos permita ejecutar
    actualizaciones en la Base de Datos, ya sea un insert, update o delete.

    private void vodModificar(String sIntruccionSQL){

    try{

    stmSql.executeUpdate(sIntruccionSQL);



    FINAL. Finalmente nos queda más que jugar con estos métodos y
    hacer nuestras consultas o actualizaciones en la base de datos tan complejas
    como se nos sea posible en base a nuestros objetivos dentro del sistema.

    Si observa en la clase Conexión.java, se crea un método llamado
    executaConsulta, que utiliza al método rstSetConsulta, y este realizar
    la consulta en especifico, dándole un tratamiento especial a los valores
    obtenidos, no importando si es de tipo int, String float, etc, ya que son obtenidos
    como Objetos, finalmente son pasados a una variable de tipo StringBuffer, pudiéndose
    también pasar en un Vector, una lista, arreglo, etc. Notese que ademas
    nos traen los metadatos es decir los nombres de los campos en la Base de datos.

    En el main, se realizan las pruebas pertinentes, si observa solo invocamos
    a la clase y en esta invocamos metos y/o funciones pasándole solamente
    las sentencias SQL, correspondientes y estos se encargan de lo demás,
    haciendo la transacción a la BD mas fácil.

    26 junio 2006

    Que es AJAX?

    Buscando nuevas técnologias para el desarrollo web me he encontrado con un articulo bastante bueno que introduce un nuevo término, que para mi es nuevo, y fastante interesante AJAX.


    ¿Porque es tan interesante AJAX? Porque en realidad AJAX no es una tecnología, sino la unión de varias tecnologías que juntas pueden lograr cosas realmente impresionantes como GoogleMaps , Gmail el Outlook Web Access ( ref ) o algunas otras aplicaciones muy conocidas: AJAX , en resúmen, es el acrónimo para Asynchronous JavaScript + XML y el concepto es: Cargar y renderizar una página, luego mantenerse en esa página mientras scripts y rutinas van al servidor buscando, en background, los datos que son usados para actualizar la página solo re-renderizando la página y mostrando u ocultando porciones de la misma.


    La traducción completa a continuación:


    Ajax : Un Nuevo acercamiento a las Aplicaciones Web

    Por Jesse James Garret t

    February 18, 2005


    Si algo del actual diseño de interacción puede ser llamado glamoroso, es crear Aplicaciones Web. Después de todo, ¿cuando fue la ultima vez que escuchaste a alguien hablar de diseño de interacción de un producto que no esté en la Web? (Okay, dejando de lado el iPod). Todos los nuevos proyectos cool e innovadores están online.


    Dejando de lado esto, los diseñadores de interacción Web no pueden evitar sentirse envidiosos de nuestros colegas que crean software de escritorio. Las aplicaciones de escritorio tienen una riqueza y respuesta que parecía fuera del alcance en Internet. La misma simplicidad que ha permitido la rápida proliferación de la Web también crea una brecha entre las experiencias que podemos proveer y las experiencias que los usuarios pueden lograr de las aplicaciones de escritorio.


    Esa brecha se está cerrando. Hechenle una mirada a las Google Suggest. Mira la forma en que los términos sugeridos se van actualizando a medida que uno tipea casi instantáneamente. Ahora mire Google Maps. Hace zoom. Usen el cursor para agarrar el mapa y navegarlo un poco. Otra vez, todo sucede casi instantáneamente, sin esperar que las paginas se recarguen.


    Google Suggest y Google Maps son dos ejemplos de un nuevo acercamiento a las aplicaciones Web, que nosotros en Adaptative Path hemos denominado AJAX . El nombre es una abreviación o acrónimo para Asynchronous JavaScript + XML, y ello representa un cambio fundamental en que es posible en la Web.


    Definiendo Ajax

    Ajax no es una tecnología. Es realmente muchas tecnologías, cada una floreciendo por su propio mérito, uniéndose en poderosas nuevas formas. AJAX incorpora:


    • presentación basada en estándares usando XHTML y CSS;

    • exhibición e interacción dinámicas usando el Document Object Model ;

    • Intercambio y manipulación de datos usando XML and XSLT ;

    • Recuperación de datos asincrónica usando XMLHttpRequest ;

    • y JavaScript poniendo todo junto.


    El modelo clásico de aplicaciones Web funciona de esta forma: La mayoría de las acciones del usuario en la interfaz disparan un requerimiento HTTP al servidor web. El servidor efectúa un proceso (recopila información, procesa números, hablando con varios sistemas propietarios), y le devuelve una pagina HTLM al cliente. Este es un modelo adaptado del uso original de la Web como un medio hipertextual, pero como fans de “The Elements of User Experience” sabemos, lo que hace a la Web buena para el hipertexto, no la hace necesariamente buena para las aplicaciones de software.


    figura 1

    Figura 1: El modelo tradicional para las aplicaciones Web (izq.) comparado con el modelo de AJAX (der.).


    Este acercamiento tiene mucho sentido a nivel técnico, pero no lo tiene para una gran experiencia de usuario. Mientras el servidor esta haciendo lo suyo, que esta haciendo el usuario? Exacto, esperando. Y, en cada paso de la tarea, el usuario espera por mas.


    Obviamente, si estuviéramos diseñando la Web desde cero para aplicaciones, no querríamos hacer esperar a los usuarios. Una vez que la interfaz esta cargada, porque la interacción del usuario debería detenerse cada vez que la aplicación necesita algo del servidor? De hecho, porque debería el usuario ver la aplicación yendo al servidor?


    Como es diferente AJAX

    Una aplicación AJAX elimina la naturaleza “arrancar-frenar- arrancar-frenar” de la interacción en la Web introduciendo un intermediario -un motor AJAX - entre el usuario y el servidor. Parecería que sumar una capa a la aplicación la haría menos reactiva, pero la verdad es lo contrario.


    En vez de cargar un pagina Web, al inicio de la sesión, el navegador carga al motor AJAX (escrito en JavaScript y usualmente “sacado” en un frame oculto). Este motor es el responsable por renderizar la interfaz que el usuario ve y por comunicarse con el servidor en nombre del usuario. El motor AJAX permite que la interacción del usuario con la aplicación suceda asincrónicamente (independientemente de la comunicación con el servidor). Así el usuario nunca estará mirando una ventana en blanco del navegador y un icono de reloj de arena esperando a que el servidor haga algo.


    Figura 2

    Figura 2: El patrón de interacción sincrónica de una aplicación Web tradicional (arriba) comparada con el patrón asincrónico de una aplicación AJAX (abajo).


    Cada acción de un usuario que normalmente generaría un requerimiento HTTP toma la forma de un llamado JavaScript al motor AJAX en vez de ese requerimiento. Cualquier respuesta a una acción del usuario que no requiera una viaje de vuelta al servidor (como una simple validación de datos, edición de datos en memoria, incluso algo de navegación) es manejado por su cuenta. Si el motor necesita algo del servidor para responder (sea enviando datos para procesar, cargar código adicional, o recuperando nuevos datos) hace esos pedidos asincrónicamente, usualmente usando XML, sin frenar la interacción del usuario con la aplicación.


    Quien está usando Ajax

    Google está haciendo una significativa inversión en el acercamiento Ajax. Todos los grandes productos que Google ha introducido en el ultimo año (Orkut, Gmail, la última versión de Google Groups, Google Suggest, y Google Maps ) son aplicaciones Ajax. (Para datos más técnicos de estas implementaciones Ajax, lean estos excelentes análisis de Gmail, Google Suggest, y Google Maps.) Otros están siguiendo la tendencia: muchas de las funciones que la gente ama en Flickr dependen de Ajax , y el motor de búsqueda de Amazon A9.com aplica tecnologías similares.


    Estos proyectos demuestran que Ajax no es solo técnicamente importante, sino también prácticos para aplicaciones en el mundo real. Esta no es otra tecnología que solo trabaja en un laboratorio. Y las aplicaciones Ajax pueden ser de cualquier tamaño, de lo más simple, funciones simples como Google Suggest a las muy complejas y sofisticadas como Google Maps.


    En Adaptive Path, estuvimos haciendo nuestro propio trabajo con Ajax en los últimos meses, y estamos descubriendo que solo raspamos la superficie de la rica interacción y respuesta que que las aplicaciones Ajax puede proveer. Ajax es un desarrollo importante para las aplicaciones Web, y su importancia solo va a crecer. Y como hay tantos desarrolladores que ya conocen como usar estas tecnologías, esperamos ver mas empresas y organizaciones siguiendo el liderazgo de Google en explotar la ventaja competitiva que Ajax provee.


    Mirando adelante

    Los mayores desafíos al crear aplicaciones Ajax no son técnicas. Las tecnologías centrales son maduras, estables y bien conocidas. En cambio, los desafíos son para los diseñadores de estas aplicaciones: olvidar lo que creemos saber sobre las limitaciones de la Web, y comenzar a imaginar un rango más amplio y rico de posibilidades.

    Va a ser divertido.