jueves, 14 de agosto de 2014

manejo de fechas

Les comparto, ahora por este medio, una utilidad para el manejo de fechas.







Incluí lo que se utiliza a menudo: obtener fecha actual, restar fechas, sumar días, etc.


NO conté con el tiempo suficiente para revisar bien el código, así  que cualquier detalle o sugerencia será bienvenida, tampoco tengo el tiempo, en esta ocasión, de comentar el código...

Espero que con el ejemplo de uso sea más que suficiente para la mayoría.



blog en proceso...

domingo, 10 de agosto de 2014

Mandar email desde java


Necesitamos JSF y  JavaMail

El árbol de proyecto es el siguiente:

Para crear el proyecto, puede seguir los siguientes pasos u obtener  el proyecto ya realizado (al final de este blog).


  1. Creamos un nuevo proyecto (java) con el nombre correo.
  2. En la carpeta "SourcePackages" agregamos un nuevo archivo de propiedades, llamado datos.





  1. Agregamos las claves fundamentales para JavaMail (líneas 4-8) y otras claves que utilizaremos (líneas 10-12)

NOTA: el correo debe ser uno existente de gmail 
y la contraseña (línea 12) real del correo especificado

  1. Ahora creamos el paquete util, y dentro del mismo la clase EnviarMail que tendrá toda la lógica para el envío de correo utilizando JavaMail.


  1. Debemos contar con el jar de JavaMail (mail.jar) para importar algunas clases a utilizar




  2. Definimos un método que recibirá tres parámetros


  3. Encerrando las sentencias en el bloque try-catch, iniciamos leyendo el archivo de propiedades y creando una composición de Session asignando un objecto de sesión predeterminado (getDefaultInstancecon las propiedades (claves) y valores del archivo de propiedades llamado datos.


  4. Para crear el mensaje, será a través de una instancia de objeto MimeMessage y luego le establecemos los atributos y contenidos apropiados setFrom, setSubject, setText, addRecipient, etc.


  5. De la imagen siguiente,  línea 42 se establece el remitente del correo: setFrom
  6. Línea 44, se establece el asunto del mensaje (correo): setSubject
    Línea 45, se establece el mensaje como tal especificando la codificación a utilizar y el subtipo MIME
    prop.getProperty("clave") recupera el valor de la clave indicada en el archivo de propiedades llamado datos

    De la imagen anterior, en la línea 43 se declara el destinatario del correo (éste debe existir y puede ser de gmail. hotmail, yahoo, etc.), se puede incluir con copia a otro destinatario y con copia oculta



    De la imagen siguiente, en línea 49 se establece un protocolo para la transferencia simple de correo electrónico
    Línea 50, nos autenticamos con el usuario (correo) y contraseña válidos en el host especificado (en este caso smtp.gmail.com: clave mail.smtp.host del archivo de propiedades)
    Una vez autenticados, mandamos el mensaje sendMessage

    Casí para finalizar, cerramos el servicio: t.close();
    Línea 55 cerramos try y añadimos dos catch específicos: si hay error en el envío del mensaje y si hay algún problema en la entrada/sálida de datos al cargar el archivo de propiedades.


    Ahora utilizaremos este método desde una "Java Main Class"



    Descargar ejemplo
    Antes de probar el proyecto de ejemplo, debe establecer su correo y contraseña de gmail en el archivo de propiedades (en las claves mail.smtp.user y utez.gmail.pass).

    Queda como creatividad que el método enviar retorne un "booleano" para informar si se envío o no el correo, validar que las direcciones de correo cumplan con el formato de correo, y agrear una interfaz gráfica con swing o web por ejemplo.

    lunes, 4 de agosto de 2014

    de Swing a Web

    ¿cuentas con una aplicación de "escritorio" (Swing) y quieres crear su equivalente en aplicación Web?

    En este post proponemos una estrategia para ello:

    Utilizaremos MVC pero sin el uso de algún framework  para ello.





    ¡Tu aplicación de "escritorio" ya cuenta con BEAN´s y DAO´s y con su respecta manipulación de datos (operaciones CRUD) ?
    Entonces sólo hace falta el controlador (servlet) y la vista (jsp) para tener la replica como aplicación web.
    Entonces...     comenzamos!!!





  7. proyecto Swing
  8. BD
  9. controlador
  10. Vista




  11.  swing

    El proyecto de escritorio "swing" es de la autoría de un alumno de 3° "C", en la DATIC-UTEZ
    https://www.facebook.com/jorge.zmoke
    Tomo el proyecto para abordar un ejemplo del procedimiento para replicarlo en versión Web.

    Descargar proyecto



    BD


    Descargar base de datos para este proyecto
    autoría del mismo alumno de 3° "C".

    Aplicación WEB:

    Primero debemos crear un nuevo proyecto java web
    copiar los paquetes: bean, dao y util
    El resto de paquetes (considerando este proyecto) no se utiliza en una aplicación web. 

    Agregamos las librerías (sqljdbc4.jar)
    Además en la aplicación web utilizaremos la librería JSTL para mostrar tabla de registros (en este caso autores).








     Controlador

    Declaramos los métodos necesarios para atender las operaciones CRUD:


    Tomemos en cuenta que un Servlet puede responder a través de response (HttpServletResponse) o redireccionar a un recurso: como puede ser un html, jsp, otro Servlet e incluso a si mismo (dado que todo Servlet es un recurso).
                  

    Creamos un nuevo Servlet llamado Autor (en el paquete controlador).

    Programamos processRequest (método que se ejecuta sin importar si la solicitud al Servlet es get o post):

    La línea 39, recupera el parámetro llamado action el cuál contiene la información que informa de la solicitud del cliente. Sin embargo, puede suceder que no se especifique el parámetro action, en cuyo caso la variable operacion tomaría el valor de null. Razón por la que se incluye la línea 40.

    La línea 61 redirecciona a un recurso especificado en la variable irA que por default es index.jsop (ver línea 38).

    Si y sólo si la operacion es diferente de null (línea 40), se revisará si la operación (petición del usuario) es alguna de las siguientes:

    • formAdd
    • crear
    • consultar
    • formEdit
    • modificar
    • eliminar


    ¿cuál es la diferencia entre formAdd y crear ?
    formAdd se utilizará para redireccionar al formulario que permita especificar los datos del nuevo registro, mientras que crear tomará los datos del formulario y procederá a guardar/crear/insertar el nuevo registro.
    y...
    ¿cuál es la diferencia entre formEdit y modificar?
    formEdit recuperará los datos del registro a editar (por medio de su ID) y redireccionará  al formulario que permita modificar el registro, haciendo llegar los datos del registro para colocarlos por default y que el usuario ya no transcriba todos los datos y sólo modifique los campos que requiera.
    modificar (semejante a crear) toma los nuevos datos del registro, indicados en el formulario, y procede a guardar los cambios.

    De la imagen anterior, se puede ver como el Servlet Autor, si ejecuta la línea 79, está actualizando el recurso al que redireccionará (irA)  que en este caso es a si mismo, pero con el parámetro action=consultar. Lo que resulta en que una vez que se agrega el nuevo registro, se procede a consultar y mostrar los registros, con lo que le demuestra al usuario que se eliminó el registro al "actualizar" la tabla y estar ausente el registro eliminado.

    processEdit (ver siguiente imagen)

    Recupera el id del registro a modificar (línea 148), convierte a el id (pID) a entero (línea 151), recupera los datos del autor a partir de su id (línea 152), agrega a request un atributo con el nombre "attAutor" cuyo valor es el autor recuperado (línea 153).
    Actualiza el nombre del recurso al que se redireccionará (línea 154)
    En caso de existir un error al recupera el id/convertirlo a entero, se agrega un atributo llamado "mensaje" con el valor de una cadena de texto informando del error y actualiza el recurso al que redireccionará (línea 157).







    En la imagen anterior se aprecia el código del método processActualizarRegistro que es muy semejante al de crear (proccessNuevoRegistro), con la diferencia de recuperar el ID (líneas 119,125).
    Y del DAO llama al método actualizar en lugar de insertar,
    estos dos métodos en el DAO (actualizar e insertar) también son semejantes cambiando principalmente al preparar la sentencia SQL.

    Para eliminar y consultar
    prácticamente sólo se hace uso del DAO que copiamos de la aplicación de escritorio (swing)




    Vistas

    Creamos/diseñamos el index.jsp utilizando bootstrap

    Y diseñamos el formulario para un nuevo registro en (autorC.jsp), para hacerlo rápidamente, utilizamos http://bootsnipp.com/forms?version=3 (para saber como utilizar la herramienta visite  blog twitter-bootstrap)


    Al terminar autorC.jsp realizamos una copia y renombramos a autorU.jsp (para editar autor) aplicando sólo algunos ajustes dado que el formulario es semejante.



    En autorR.jsp se imprime la tabla con los registros.
    recomiendo visitar el blog: recorrer-colecciones-con-jstl

    Descargar la aplicación web

    blog en proceso...