jEduardo

Programacion y esas hierbas by Eduardo Vergara Caro

25
May.

Exportar PDF en Java con iText // Netbeans 6.7

Hola acá de nuevo, como se podrán dar cuenta todavía no cierro este blog y es que me encariñe con =( , he recibido correos de gente a la que le ha servido mucho algunos post y esto me mueve a dejarlo por un poco más de tiempo(si es que no me lo cierran antes).



El ejemplo que redacto aquí está enfocado a la exportación de un archivo PDF desde una página JSP, y esto empezaría de la siguiente forma. Lo primero es poner una buena música, algo como ACDC y …

Here We Go ¡

Como somos muy buenos re utilizadores de códigos vamos a ocupar el proyecto de Hibernate y Netbeans 6.7.1 pero antes vamos a descargar la librería iText desde aquí.

Primer paso: abrimos el proyecto creado HibernateRemuneraciones y cargamos la librería iText.jar

Segundo Paso: Abrimos  la página JSP de informes (informes.jsp) e importamos lo que utilizaremos de iText y clases de manipulación de calendarios como lo indica el siguiente código.

Tercer Paso: Agregamos un botón justo arriba de la Tabla en informes.jsp. Este botón abrirá el documento que se crea al cargar la página.

Código del botón.

Cuarto Paso: Lo que haremos ahora será crear el documento, pero en dos etapas más, una será agregando el código de cabecera, donde va el titulo y los nombres de las columnas y la otra región serán las filas (celdas) que se irán agregando a través de un ciclo que es el que va insertando las filas a la tabla HTML.

  • Cabecera:

Continuación

  • Filas (Celdas): Me voy a detener un momento para señalar que el documento se crea inmediatamente al cargar la página y queda en el path C:/Informe.pdf. Como sabemos que el proyecto HibernateRemuneraciones  tiene un ciclo que es el que agrega filas con datos, aprovechamos este mismo para agregar filas que no son precisamente filas sino más bien un conjunto de celdas que conforman una fila como vemos a continuación.

Última Fila de la Tabla:

Quinto Paso: Ahora ya la codificación en las páginas esta lista ahora falta arrancar el documento con el botón que creamos en Informes.jsp (submit=ServletEmpleados) y que se creó en C:/Informe.pdf, para eso en el ServletEmpleados de nuestro proyecto crearemos una condición y añadiremos el siguiente código.

El botón envía la petición al ServletEmpleados, el servlet toma la petición y ejecuta la acción que es abrir el Documento.

Veámoslo en ejecución.

PDF

Cualquier Duda no duden en escribir =).

Descarga este Articulo en PDF >> ExportarPDF-Java.pdf

Si quieres igualmente el Proyecto HibernateRemuneraciones modificado solo escribe y te lo hago llegar.


13
Abr.

Hibernate 3 en Netbeans 6.7.1

Hibernate en Netbeans 6.7.1 (Java)

(my last post)

Hola gente como están espero bien,  dejando de lado el fatídico terremoto ocurrido acá en mi país, me he propuesto publicar lo que probablemente sea mi último post de este blog de ARTICULOS TECNICOS.

Un día en clases con profesor conversábamos a cerca de formas de acceder a una base de datos y de cómo hacer un rollback con código Java para las transacciones, el menciono  el framework Hibernate. Llegue a casa y me puse a investigar acerca de este Framework y lo encontre genial, la idea que “saltarme” parte del proceso bases de datos,  consultas SQL, drivers  etc.  y centrarme solo en la lógica de la aplicación me pareció interesante.

El siguiente post-guía  trata de una aplicación hecha utilizando hibérnate 3 en Netbeans 6.7.1 y pretende crear un ejemplo de Software de Remuneraciones (muy simple) con estas herramientas.

Here we go ¡!

Que Necesitamos

Pues un editor web, Mysql y Netbeans 6.7.1.  Instalados

Por donde empezamos

  • Lo primero crear la base de datos y los mas importante es tener las relaciones entre tablas bien definidas.

Nota: la estructura de la base de datos la pueden descargar al fina tbn.  los tados.

En esta figura es clara la relación [one-to-many] quiere decir que un departamento puede tener muchos empleados, esta relación es clave a la hora de configurar el proyecto puesto que hibérnate tomaran esta base de datos y creara archivos de configuración y mapeo XML a partir de esta base de datos y estos serán la base para que nuestra aplicación o más bien dicho Hibernate tenga un buen desempeño.

nota:

El código SQL  de la base de datos esta adjunta con el proyecto Netbeans al final

  • Comportamiento de esta aplicación

Esta aplicación de ejemplo tiene el siguiente comportamiento.

Para el Guardado de datos.

  1. Los  formularios (JSP) envían los datos a un Servlet mediante Ajax
  2. El Servlet toma los datos y crea un Objeto (Empleado o Departamento)
  3. El Servlet crea un una instancia de las clases de Gestión de Hibernación (clases HbnGestion) el cual tiene un método que necesita un argumento (Empleado o Departamento) que guarda el Objeto.
  4. El método de guardado envía una respuesta al Servlet corroborando un guardado de datos exitoso si así lo es.
  5. El Servlet imprime una respuesta (si  la transacción fue exitosa o no) y la envía a la página JSP correspondiente.
  6. Ajax toma tal respuesta,  despliega un Alert e imprime el mensaje en un <DIV>  HTML.
  • Creación del Proyecto en Netbeans

Ya tengo la base de datos mysql creada y perfectamente relacionada (Importante ¡!) seguiremos creando el proyecto en Netbeans, para ello:

  1. Archivo > Proyecto Nuevo y siguiente
  2. Seleccionamos en categoría JavaWeb y en Proyectos WebApplication y siguiente
  3. Luego daremos un nombre al proyecto en mi caso HibernateRemuneraciones siguiente
  4. Elegimos un servidor en mi caso Apache Tomcat 6.0.8  luego Java Versión Java EE 5
  5. Luego seleccionamos un Framework adicional, y como quiero trabajar con Hibernate seleccionamos Hibernate 3.2.5  Terminar.

Como nos habremos dado cuenta, Netbeans nos creo unos archivos de forma automática, pero solo destacaremos algunos, la página de inicio (index.jsp), el archivo de configuración de hibernate (hibernate.cfg.xml) y las librerías de hibérnate.

Creo que ya todos conocemos lo que son las paginas JSP  y las librerías así que nos centraremos en el archivo de configuración y algunas características que iremos a utilizar aquí, para eso haremos doble clic en el archivo que se encuentra bajo el nodo por nombre de paquete predeterminado hibernate.cfg.xml y veremos  algo como esto.

hibérnate.cfg.xml es un archivo de configuración en donde se especifican las propiedades de hibérnate, daremos un breve vistazo a lo más relevante.

1)      Operador XML: Clicando en esta ficha veremos el código XML de toda esta configuración.

2)      Propiedades de JDBC: Vemos aquí como las propiedades de conexión que se han cargado al momento de crear el proyecto, el Driver, la ruta de nuestra base de datos, el usuario y la contraseña.

3)      Propiedades de configuración: Aquí veremos 2 cosas, la primera es elegir el dialecto que ocuparemos, es decir, que base de datos estamos utilizando (esto ya lo cargo netbeans cuando creamos el proyecto e identifico que nuestra base de datos era mysql) y lo segundo es definir si queremos que el proyecto depure nuestras consultas HQL en SQL.

4)      Propiedades Varias: Aquí habilitaremos la creación de sesiones automáticas.

Expandimos el nodo de Propiedades de Configuración presionamos el botón agregar  luego le damos los valores correspondientes.

Nuestra configuración nos quedara así(Especificamos dialecto SQL)

Luego clicamos en nodo de Propiedades varias y damos los valores señalados en la figura(Sesiones automaticas)

Terminando quedaría algo asi

La explicación de esta parte de la configuración está dada en los puntos 4 y 5.

Nuestro archivo de configuración (hibérnate.cfg.xml) o lo que necesitaremos de este archivo ya está listo, ahora clicamos en la ficha Operador XML (vista de código) y podremos ver nuestra configuración.

  • Creación del archivo HibernateUtil.java

El siguiente paso será crear el archivo HibernateUtil.java.  Este archivo lo que hace es crear un SessionFactory (objeto) que cargara la información sobre donde se encuentran los ficheros de mapeo de Hibernate.

Archivo > Archivo Nuevo > categoría Hibernar > archivo HibernateUtil  / Siguiente y veremos algo así.

Indicamos el nombre de la clase creamos un paquete nuevo llamado remuneraciones  e incluimos este archivo dentro y terminamos.

Codigo del archivo HibernateUtil.java

package remuneraciones;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.SessionFactory;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {

try {

// Create the SessionFactory from standard (hibernate.cfg.xml)

// config file.

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

} catch (Throwable ex) {

// Log the exception.

System.err.println(“Initial SessionFactory creation failed.” + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

  • Creación de archivos de Mapeo y clases de Java

Lo siguiente será crear los archivos de mapeo y las clases de java a partir de nuestra base de datos. Al  generar esto, Netbeans lo que hará será tratar de relacionar la bases de datos con clases de java (objetos), creando por cada tabla una clase java con sus atributos (filas de la tabla) y un archivo XML en donde se especifican características de “objeto-tabla” como por ejemplo el nombre de la base de datos (catalog), el nombre de la tabla (table) y otras varias características más.

Empezaremos por crear un archivo de ingeniería inversa (hibérnate.reveng.xml) archivo que guardara la configuración de nuestras tablas, para eso:

Archivo > Archivo nuevo > categoría / Hibernate > Tipo de Archivo / Asistente de ingeniería inversa de Hibernate. El asistente nos mostrara lo siguiente.

Le dejamos el nombre por default la y la ruta será src/java esto es guardara el archivo junto con el archivo hibernate.cfg.xml en el paquete predeterminado, damos siguiente.

Seleccionamos nuestro archivo de configuración y agregamos las tablas a utilizar

Una vez agregado terminamos.

Ahora vamos al paquete predeterminado y vemos como junto al archivo Hibernate.cfg.xml quedo nuestro hibernate.reveng.xml, doble clic sobre el icono y veremos su código correspondiente que no es más que esto.

Luego de creado nuestro archivo de configuración de tablas procederemos a crear los Archivos de Mapeo de Hibernate, para eso:

Archivo > Archivo nuevo > categoría / hibérnate > tipo de archivo / Archivos de mapas de hibérnate  POJOS de la base de datos > siguiente y el asistente nos mostrara algo como lo siguiente.

Seleccionamos si no lo están nuestros archivos de configuración checamos la casilla de características del lenguaje JDK 5 y lo demás lo dejamos como viene por default,  tbn. debemos de indicar en que package quedaran nuestros archivos de clase y mapeo le indicaremos el package de “negocio” remuneraciones y terminamos.

Si expandimos el nodo del package remuneraciones nos daremos cuenta que se ha creado por cada tabla de nuestra base de datos un archivo de mapeo de Hibernate y una Clase Java con el mismo nombre como veremos a continuación.

Veamos que hay en el archivo de mapeo de la clase Departamentos, doble clic en el archivo Departamentos.hbm.xml.

Antes de seguir una pequeña introducción a estas  etiquetas:

a)      Class

  1. ü  name: representa el nombre de la clase Java.
  2. ü  table: representa la tabla de nuestra base de datos.
  3. ü  Catalog: indica el nombre de la base de datos a trabajar.

b)      Id

  1. ü  name: nombre del  id (identificador unico) de la clase Departamentos.
  2. ü  type: es el tipo de dato de ese atributo.

c)       column

  1. name: el nombre del identificador único de la tabla

d)      generator:

  1. class: Indica de qué forma se incrusta el id en la base de datos.

e)      Set

  1. Name: el nombre de la variable(arreglo) que contiene todos los empleados  asociados a un Departamento(recordar las relaciones de tablas)

f)       Key

  1. Column name: nombre del campo que guardara el id de la tabla referenciada, en este caso guardaremos el id del empleado en la tabla departamentos.

g)       One-to-many: importante es entender que en una relación one-to-many la colección especificada no puede contener más de un objeto con el mismo identificador.

  1. Class: indica la clase con la que está relacionada.

Para más detalle dejo un manual mucho más detallado aquí.

Ahora echemos un vistazo a la clase Java generada por Netbeans Departamentos.java

Para los que no han visto Hibernate con Netbeans  esta es una gran sorpresa.  Netbeans ha generado una clase Java a partir de los campos de nuestra base de datos con sus atributos y métodos más comunes (getters,  setters y constructores), solo algo hay que es fuera de lo común, la línea 8.

private Set<Empleados> empleadoses = new HashSet<Empleados>(0);

La Objeto de tipo HashSet es lo más parecido a un List (Arreglo) tiene la particularidad de no poder contener 2 veces el mismo valor. Y ya nos podemos imaginar que es lo que contendrá empleadoses, pues todos los empleados asociados a un Departamento, no así Empleados que no puede contener  más de un Departamento.

  • Checando que nuestra configuración esta correcta con una consulta HQL

Hemos avanzado bastante pero todavía queda, lo que necesitamos ahora es corroborar si es que lo que hemos creado (archivos de configuración etc.) están correctamente creados y para eso realizaremos algunas consultas HQL.

¿Pero que es HQL? HQL (Hibernate Query Languaje) es el lenguaje de consultas de Hibernate así como SQL o como FQL (el lenguaje de consultas de facebook) la particularidad de HQL es que estas consultas trabajan sobre Objetos de memoria y no directamente a una base de datos, me explico con el siguiente ejemplo y si funciona será un hecho que los archivos que hemos creado anteriormente están correctamente configurados.

Podéis descargar aquí la base de datos creada por mí con 42 filas con datos de empleados y departamentos o podéis cargar tus propios desde Netbeans o en un editor sql como SQLYog.

Here we go ¡

Para esto expandimos el nodo de paquete predeterminado y hacemos clic derecho sobre hibérnate.cfg.xml y clicamos Ejecutar consulta HQL.

Nos abrirá una ventana para realizar Consultas

Primera Consulta:  Obteniendo la lista de Empleados

Como dije anteriormente las consultas HQL trabajan sobre Objetos de memoria, para seleccionar todos los Empleados tecleamos from Empleados, Netbeans nos mostrara la respectiva consulta en SQL como se indica más abajo


Ahora Presionamos el botón para la ejecución de la consulta he Hibernate, nos arroja nuestros primeros resultados.

Que interesante no??  Hibernate nos devolvió nuestra primera consulta pero por que En el Campo Departamento nos devuelve un Lugar de memoria en vez de un dato ¿? Pues bien, lo que ahí hay es un Objeto tipo Departamento y que está almacenado en ese lugar de la memoria.

Segunda Consulta: Seleccionemos los Empleados que no tienen Cargas familiares (Cargas = 0).

from Empleados as e where e.empCargas = 0

Dentro de esta consulta creamos una instancia de Empleados, e , y hacemos la comparación con su atributo empCargas.


Tercera Consulta: Seleccionemos todos los Empleados cuyo departamento sea el de Informatica y que los resultados los devuelva ordenados por apellido.

from Empleados as e where e.departamentos.depNombre = ‘Informatica’ order by e.empApellido

  • Creación de Clases de Gestión de Consultas

Ya luego de haber comprobado que nuestra configuración esta sin errores porque nuestras consultas así lo demostraron, pasaremos a crear una clase de gestión de consultas de hibernate, que es la que utilizaremos para recuperar los datos y llevarlos a las vistas. Para esto clic derecho sobre source package  > Nuevo > paquete Java y le damos por nombre Manejador.

Ahora clic derecho sobre nuestro paquete recién creado(Manejador) nuevo > clase Java,  le damos por nombre HbnGestionEmpleados y terminar.

Nuestra clase de Gestión de Hibernate esta creada, pero falta programarla, partiremos por el constructor el atributo Session y el constructor vacio.

Nota: El código solo será en pantallazos ya que desordenado no ayuda de mucho, recuerden que el proyecto completo estará disponible al final, podéis ahí mirar cada detalle  con mayor tranquilidad.

Clase HbnGestionEmpleados.java, importaciones y el atributo sesion.

Método addEmpleado: Este método lo que hará será guardar un Objeto tipo Empleados, para eso debes pasarle uno por parámetro.

Método ContarEmpleados: Este método cuenta la cantidad de Empleados en la tabla empleados, esto para crear el ID del empleado que se va a ingresar (sumándole 1). Hay mil formas y mejores de hacer un ID pero es a modo de ejemplo.

Método ListaEmpleados: Método  que devuelve todos los empleados

Método ListaEmpleadosCargas: método que devuelve solo los empleados que tienen cargas familiares.

Clase HbnGestionDepartamentos: Acá solo mostraremos 1 método ya que la estructura es muy similar a la clase HbnGestionEmplados.

Método BuscaUnDepartamento: Este método tiene la función de buscar un Departamento específico en la base de datos. Cuando al Form de agregar empleado (addEmpleado.jsp) le demos el submit  un Servlet resivira los datos, pero debemos de buscar el Departamento que nos envía el form, el que será el valor de lo que hayamos seleccionado en la lista desplegable. Invocaremos este método entonces para que nos devuelva el Objeto Departamento y podamos así crear un Empleado.

  • Creación de las paginas JSP para el guardado y vistas de datos

El siguiente paso será crear las paginas JSP tanto para la acción de guardado de datos como para la vistas de estos mismos (Listas e Informes). De los formularios veremos solo la acción de guardado de Empleados ya que el guardado de Departamentos es muy similar, lo mismo para las acciones de vistas de datos, ahí solo veremos la vista del Informe ya que la otra es similar y menos compleja que esta.

  1. addEmpleados.jsp: Formulario que guarda Empleados, los datos son enviado mediante Ajax a un Servlet (lo veremos más adelante) que gestiona la creación del mismo.
  2. addDepto.jsp: Lo mismo para este formulario
  3. Listado.jsp: Acá se muestran todos los Empleados guardados.
  4. Informes.jsp: Este informe es muy simple, muestra todos los Empleados que tengan al menos una carga familiar y por cada carga agrega un bono de $5.000 pesos.

Formulario addEmpleados.jsp: Para agregar una nueva página jsp…

Archivo> Archivo Nuevo > categoría / web > tipo de archivo / jsp > siguiente y veremos algo así.

Ponemos el nombre de nuestra página y le decimos que estará ubicada en la carpeta Web Pages.

No me quiero pasar toda una noche explicando línea a línea esta página, así que me abocare a lo más relevante.

Veamos la línea en donde obtenemos el total de registros de Empleados, se invoca aquí la clase HbnGestionEmpleados y se llama un método que habíamos creado previamente, ContarEmpleados, que nos devolvía el total de Empleados, le damos el valor devuelto a una variable int le sumamos uno, con esto tendremos el ID del próximo Empleado que creemos.

Aunque no está en fin de este post me he tomado la molestia de incorporar tecnología Ajax para el envío de datos desde este formulario al Servlet correspondiente para que los procese.

Funciones javaScript para el evitar la modificación del ID. Cuando quiera pinchar al campo txtid le damos un alert y mandamos el foco al txtnombre y la limpieza de los campos.

Codigo del Formulario

<td>Id:</td>

<td><input value=”<%=id+1%>”">txtid” size=”5″ onClick=”foco();”></td>

<td>&nbsp;</td>

</tr>

<tr>

<td width=”110″>Nombre:</td>

<td width=”251″><label>

<input name=”txtname”">txtname” size=”20″ />

</label></td>

<td width=”64″>&nbsp;</td>

</tr>

<tr>

<td>Apellido:</td>

<td><label>

<input name=”txtapellido”">txtapellido” size=”20″ />

</label></td>

<td>&nbsp;</td>

</tr>

<tr>

<td>Cargas:</td>

<td><label>

<input name=”txtcargas”">txtcargas” size=”5″ />

</label></td>

<td>&nbsp;</td>

</tr>

<tr>

<td>Sueldo:</td>

<td><input name=”txtsueldo”">txtsueldo” size=”10″ /></td>

<td>&nbsp;</td>

</tr>

<tr>

<td>Departamento</td>

<td><label>

<select”>cboDepto”>

<%

List deptos;

<!–  Acá se cargan todos los Departamentos al Select (html) llamando a la clase HbnGestionDepartamentos y rescatando todos los departamentos.à

int i;

HbnGestionDepartamentos ld = new HbnGestionDepartamentos();

deptos = ld.getDepartamentos();

for(i=0;i < deptos.size(); i++)

{

Departamentos d = (Departamentos) deptos.get(i);

%><option><%=d.getDepNombre()%></option>

<%

}

%>

</select>

</label></td>

<td>&nbsp;</td>

</tr>

<tr>

<td>&nbsp;</td>

<td align=”center”><label>

<input type=”button”">btnEnviar” value=”Enviar Formulario”

<!– Acá se hace la llamada a la función javascript Enviar() que envía los datos de este formulario de manera asíncrona al servlet à

onClick=”Enviar();” name=”btnEnviar” />

<input name=”Input” value=”Limpiar” />

</label></td>

<td>&nbsp;</td>

</tr>

<tr>

<td height=”25″><a href=”index.jsp”></a></td>

<td align=”center”><input name=”btnNuevo”">btnNuevo” value=”Nuevo Empleado”></td>

<td>&nbsp;</td>

</tr>

<tr height=”30″ >

<td height=”27″ colspan=”4″  bgcolor=”#0000FF”>

<div id=”message” style=”font-family:Arial; color:#F9F9F9;”></div>

</td>

A demás de el formulario y todo lo demás añadiremos una etiqueta DIV al final del formulario para cuando Ajax reciba la respuesta del Servlet nos despliegue su mensaje dentro de esta etiqueta.

Nuestro formulario en ejecución seria de esta forma

Nota: el menú de la navegación es lo de menos puedes linkearlo de la forma que quieras.

Como señale anteriormente el formulario addDepto.jsp no lo explicare porque es muy similar al de Empleados.

Vamos por el Informe y la recuperación de los Empleados con cargas y sus y una aplicación bonos por carga.

Informe.jsp y lo más importante.

Importaciones: La clase DecimalFormat la utilizaremos para darle un formato de moneda a lo que nos devuelva hibernate (sueldo) y el total de la planilla.

Variables a utilizar

Se imprimen los datos.

Nota: La vista en ejecución de este informe este en el siguiente paso.

  • Creación de Servlets para la recepción de los Datos de los Formularios JSP.

El siguiente paso será crear dos Servlets, uno para Departamentos y otro para Empleados, la misión de estos será tomar los datos que enviaremos de los formularios de creación de empleados y departamentos (addEmpleados.jsp y addDeptos.jsp). Solo tocaremos el ServletEmpleados, veamos entonces el método preccessRequest de este Servlet pero primero agreguemos un Servlet al Proyecto.

Archivo > Archivo Nuevo > categoría / web > tipo de archivo / Servlet > siguiente… le damos por nombre ServletEmpleados y lo ubicamos en el paquete Manejador.

Veamos la ubicación de los Servlets y de los componentes de este proyecto en general.

Codigo del método processRequest del servlet ServletEmpleados

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType(“text/html;charset=UTF-8″);

PrintWriter out = response.getWriter();

String name,apellido,depto=”";

int cargas=0;

int;

double sueldo=0;

try {

// si los campos no son nulos comienza la accion

if(request.getParameter(“txtid”) != null && request.getParameter(“txtname”) != null && request.getParameter(“txtapellido”) != null && request.getParameter(“txtcargas”) != null && request.getParameter(“txtsueldo”) != null)

{   // variable a utilizar saber si el guardado es exitoso

int succes;

//obtengo los datos

id = Integer.parseInt(request.getParameter(“txtid”));

name = request.getParameter(“txtname”);

apellido = request.getParameter(“txtapellido”);

cargas = Integer.parseInt(request.getParameter(“txtcargas”));

sueldo = Long.parseLong(request.getParameter(“txtsueldo”));

depto = request.getParameter(“cboDepto”);

//creo una instancia de Departamentos que sera el departamento del

// Empleado

Departamentos d = new Departamentos();

//creo una instancia de HbnGestionDepartamentos para obtener el departamento

//pasandole como parametro la variable depto que ahora contendra el valor del Select

//de addEmpleados.jsp

HbnGestionDepartamentos hgd =  new HbnGestionDepartamentos();

HbnGestionEmpleados hge = new HbnGestionEmpleados();

Empleados e = new Empleados();

//me devuelve un Departamento y se lo asigno a d

d = hgd.BuscaUnDepartamento(depto);

//creo el objeto tipo Empleados con los datos del Formulario.

e.setIdEmpleado(id);

e.setEmpNombre(name);

e.setEmpApellido(apellido);

e.setEmpCargas(cargas);

e.setDepartamentos(d);

e.setEmpSueldo(sueldo);

//le paso mi Objeto Empleado a HbnGestionEmpleados(Hibernate)para que realice el guardado en el método addEmpleado

//este metodo addEmpleado me devolvera un entero.

succes = hge.addEmpleado(e);

//javax.swing.JOptionPane.showMessageDialog(null, e.getDepartamentos().getDepNombre());

//si es 1 el guardado fue exitoso

if (succes == 1)

{   //Hacemos una pausa para ver el gif de Ajax

Thread.sleep(2000);

//Enviamos la respuesta mediante Ajax

out.println(“Datos Guardados Satisfactoriamente”);

}else if(succes == 2)

{    //si es 2 algo ocurrio

Thread.sleep(2000);

out.println(“Ha ocurrido una Excepcion tipo Hibernate”);

}

}else{

Thread.sleep(2000);

out.println(“Al parecer Faltan campos por llenar, no se pudieron guardar los Datos”);

}

} catch(Exception e){

e.printStackTrace();

}

finally {

out.close();

}

}

Suponiendo que hemos ido revisando el proyecto y terminando las clases ServletDepartamentos y HbnGestionDepartamentos, esta ultima omití pero puedes revisar el codigo desde el proyecto, vamos a ejecutar el proyecto HibernateRemuneracines =)

Inicio

Agregar Empleados

Datos Guardados

Mantenedor Departamentos (Similar al de Empleados)

Listado de Empleados

Informe de Bonos a Empleados con al menos una carga


segunda parte

Ojala le allá servido a alguien este post – manual, aunque sea solo a uno, con eso estaré más que pagado.

Y como es el  último post tiene que ser bueno y lo más completo posible, así que acá les dejo este manual de hibernate en pdf, la base de datos y el proyecto.  Suerte a todos en especial a mis ex compañeros y mi profe =).

nota:  bonus track Log4j


08
Mar.

Chile se levanta

Como se habrán dado cuenta los que entran,  entraron o entraran a mi blog,   mi país chile  sufrió los efectos de la furia de un terremoto y posterior Tsunami en algunas regiones, me ha conmovido la ayuda de nuestros países vecinos y de todo el mundo, gracias a dios yo y mi familia resultamos ilesos, pero hay ciudades que resultaron tremendamente destruidas.

Ayer llego la energía en mi sector, levante mis artefactos los enchufe y estaba todo bueno. En mi trabajo estamos trabajando para poder levantar la empresa y salir adelante poniendo como plazo hacer competencias el 16 de marzo si dios quiere.

El motivo de este post es para decir que chile se levanta por que su gente es fuerte y aguerrida, que esta es una instancia de unión, fraternidad y compromiso que nada acabo si no mas bien volveremos a comenzar

que no lo dude nadie ni por un segundo ;-)


29
Dic.

Netbeans 6.7.1 – Servlets y MySql

logo

…. Hace rato que no vengo por aquí  y es por sencilla razón que la universidad me tiene podrido de tiempo y de ganas para postear pero ha llegado el momento.

En la Universidad un profe me ha dado un trabajo para finalizar el año, se trataba de un Banco clientes-cuentas (Júas ¡! que novedoso) con JSP y MySql. Para el desarrollo existían 2 posibilidades, la rápida – funcional y la un poco más larga pero  ordenada, ya sabrán cual elegí.

El punto de este post no es ese trabajo, sino más bien mostrar algo que aprendí   y que estoy seguro a más de uno le servirá mucho.

Que Herramientas Necesitamos?

  • NetBeans 6.7.1 instalado si no lo tenéis podéis descargarlo gratis aquí
  • MySql 5.0 instalado que lo podemos descargar desde aquí
  • Un editor de páginas webs en mi caso Dreamweaver 8  >)

Por donde Empezamos?

Los primero que vamos a hacer es crear tres páginas JSP una llamada Login.jsp, otra llamada principal.jsp y otra llamada noticias.jsp.

Solo pondré el código más importante de cada página, el código JSP y HTML completo lo pueden ver cuando descarguen el proyecto

La página de Login.jsp

Su misión: Ingresar los datos de Logeo para enviarlos al metodo processRequest de un Servlet que nos dará el sí para poder acceder a la página principal.jsp, lo veremos más adelante.

Esta página tendrá el sgte. Código jsp


<%// Si el Usuario Inicio Sesion No puede logearse de nuevo por lo tanto lo mandamos a la página principal

if(session.getAttribute(“usuario”)!=null && session.getAttribute(“usuario”)!=”")

{

response.sendRedirect(“principal.jsp”);

}

%>

—————————————————————————–

El código del formulario sería algo así:

<form id=”form1″ name=”form1″ method=”post” action=”ServletUsuarios“>
<table width=”309″ border=”1″ align=”center” style=”font-family:Arial, Helvetica, sans-serif; color:#EEEEEE”>
<tr>
<td colspan=”2″ align=”center”>Ingrese los Datos del Usuario </td>
</tr>
<tr>
<td width=”134″>Nombre Usuario:</td>
<td width=”159″>
<input type=”text” name=”nombre” />
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type=”password” name=”password” /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><label>
<input type=”submit” name=”logear” value=”Enviar” />
<input type=”reset”  value=”Limpiar” />
</label></td>
</tr>
</table>
</form>

(Ojo con lo que está en azul)

La segunda página principal.jsp


Su Misión: solo después de haber iniciado sesión, vale decir, que los datos de login y pass son correctos, podremos acceder a esta página, esta tendrá el siguiente código java

<%// si la session es distinta de vacío o nulo decimos k la session esta iniciada

// e imprimimos el nombre del visitante si no lo invitamos a Logearse

if(session.getAttribute(“usuario”)!=null && session.getAttribute(“usuario”)!=”")

{

String user = session.getAttribute(“usuario”).toString();

%>

Sesion <%= user%>// imprimimos el valor que le dimos a la sesion   miUsuario.getLogin();

<%

}else

{//si el Usuario no tiene una session previamente iniciada

// lo mandamos a logearse, fresco !!

response.sendRedirect(“Login.jsp”);

}

%>

Y la última noticias.jsp


Su Misión: una noticia entretenida,  esto es solo para comprobar que la sesión expiro después de transcurrido un tiempo de 60 segundos.

Netbeans y Manos a la Obra

  1. i. Empezamos abriendo Netbeans,  nos vamos al menú archivo y damos click en Proyecto Nuevo
  2. ii.            Pinchamos en la carpeta Java Web y elegimos un proyecto tipo Web Aplicación

Dibujo1

Elegimos un nombre para nuestra app, en mi caso se llamara appSessionMysql

Dibujo2

Seleccionamos el Servidor de prueba a utilizar, yo ocupare esta vez Tomcat

Dibujo3

Damos Siguiente.

Dibujo4

Los Chekbox de arriba son unos framework interesantísimos que en este momento los estoy estudiando para más adelante postear algo si dios quiere.

Damos Terminar.

El proyecto esta creado ahora hay que desarrollar, pero antes importaremos el conector de MySql, para eso pinchamos con el botón derecho sobre la carpeta que dice Libraries y le damos a Agregar Biblioteca.

librerias

Luego seleccionamos el driver mysql JDBC y clickamos Añadir Biblioteca

Dibujo6

Y ya está instalado el fastidioso conector de una manera muy fácil.

Dibujo7

Creando una Base de Dato

Ahora crearemos una base de datos, para eso pinchamos la paleta que dice Prestaciones y hacemos doble click en Bases de Datos

Hacemos click derecho en Servidor MySql Localhost nos pedirá los datos de usuario y contraseña, pues metemos los valores que introdujimos cuando instalamos MySql.

Dibujo8

Luego ya podemos ver todas las bases de datos, si es que teníamos antes, o las de prueba

Dibujo9

Ahora a crear la base, hacemos click derecho en Servidor Mysql y clickamos Crear Base de Datos

Dibujo10

Le damos un nombre a la base de datos, en mi caso será la bd_usuarios y aceptar

Como nos podemos dar cuenta se creó la base de datos

Dibujo12

Ahora botón derecho sobre nuestra base de datos recién creada y clickamos conectar, si nos pide la contraseña le metemos la predeterminada en la instalación, como podemos ver más abajo ya estableció la conexión con la base de datos, ahora solo queda crear las tablas expandiendo nuestra base de datos y clickando en crear tabla

Dibujo13

Como se ve en el screen,  aparecerá un asistente para la creación de las tablas, en este caso la tabla se llamara usuarios con los campos nombre varchar (10) y password varchar (10) tbn.

Dibujo15

Aceptamos y los campos ya están creados.Ahora botón derecho en la tabla y clickamos en Mostrar Datos.

Dibujo16

Ahora aparecerá la tabla con los “datos”, pero nuestra base está en blanco así que vamos a meter los datos de nuestro usuario que tendrá acceso al sistema, pinchamos en el icono que dice Insertar Registro y aparecerá una ventana donde entraremos los valores de nuestro usuario.

Dibujo17

Y ya tenemos una base de datos creada en Netbeans  con un registro agregado :)

Packages

Ya tenemos creadas nuestras 3 páginas jsp y  la base de datos con un registro, el próximo paso será crear 3 Packages, y los llamaremos Clases, Conexión y Servlets. Click derecho en source packages agregamos un paquete java y le damos el nombre a nuestro nuevo package luego el otro y así.

Dibujo18

Ya tenemos los 3 packages creados ahora  click derecho en nuestro paquete Clases y agregaremos una clase llamada Usuario.java. Después click derecho en el paquete Conexión y agregamos otra clase llamada  Conexion.java y en el tercera creamos otra clase llamada  ServletUsuarios.java.  En el paquete Servlets (El tema de los packages no es obligatorio ni necesario para este pequeño proyecto, pero sirve para empezar a acostumbrarnos a separar los muchos datos dentro de una app como acapor ejemplo  clases, servlets, conexion etc etc y mas etc.)

Programando nuestras Clases

Solo pondre los metodos mas importantes ya que por problemas tecnicos no pude poner todo el codigo aca pero el proyecto completo estara disponible al final.

  • Usuario.java

usuarios

  • ServletUsuarios.java

servlet

  • Conexion.java

conexion

Testing

Ya esta todo listo ahora click derecho sobre el proyecto y Run

Login.java

Login

principal.jsp

welcome

Si pinchamos el link después de transcurrido un minuto se inhabilitara la sesión y los códigos java que insertamos en las paginas jsp nos impedirán seguir navegando con normalidad y como usuario registrado. Si fuera antes de un minuto podríamos ver la noticia.

noticias.jsp

noticias

Conclusión

La intención de este post no es dictar cátedras sobre Servlets o JSP, mi objetivo y espero que así sea, es entregar a los lectores algo muy util que aprendi este año y tbn. dar un primer paso (que a veces cuesta) para  cuando no se sabe por dónde empezar. Algo para destacar sin duda es la creación de una base de datos con el IDE mismo, otro a considerar es el manejo de variables de sesiones, los Packages que nos serviran y algo tbn. importante es la invalidacion de sesiones cuando ha transcurrido un periodo predeterminado.

Espero a alguien le sirva este post, con solo uno, mi tiempo invertido aqui estara pagado >) .

Descargar Proyecto << Descarga del Proyecto


14
Sep.

The Bank Fraud

umlbanco

Cuentas Bancarias en java

Hola, una día unos ex-compañeros me pidieron un favor, hacer la simulacion de un banco en java y con el pasar de tiempo lo fui expandiendo hasta quedar mas menos un proyecto de 12 Clases y 1720 líneas de código proximadamente. Bueno aplique aquí una técnica que me enseño una ex profesora de la que aprendí mucho,  se trata de crear clases de colecciones para después recorrerlas y así generar consultas de manera muy fácil.

Mas allá de que mis apps cumplan la función, siempre me he preocupado de que el desarrollo y la metodología sea la correcta o por lo menos lo he intentado y en lo posible e trata de no caer en la forma carretera de hacer las cosas  .

Me encantaría que alguien me dijera los errores tanto de programación  como de lógica o si las relaciones del UML están malas, espero recomendaciones y posibles StupidExeptions se los agradeceré enormemente.

Aquí les dejo el código o pueden pedirlo personalmente dejando su post.

The Bank Fraud

pd: no me jodan con la validación de entradas de datos ¡!


10
Sep.

Phishing – falsa verificacion de cuenta de Banco Estado

Hace un tiempo atrás escribí una articulo para TechBloog sobre el crecimiento que han tenido los ataque por suplantación de identidad mas conocidos como Phishing.  En este articulo o post se revelan estadísticas de como este peligroso método de ataque a usuarios de Internet se ha ido sofisticando cada vez más.

Las siguientes fotografías muestran la realidad de las suplantaciones de identidad y en particular una que anda circulando por los correos electrónicos en donde supuestamente Banco Estado ofrece verificación de datos.

banco

Muy percido no?? bueno, ahunque aparentemente sea un mail de Banco Estado por que el remitente asi lo indica, no lo es y tampoco el action de los <form></form> si no vean:

banco2

Impresionante la capacidad de creatividad de estos delincuentes, si se fijan en el action, el link de la operadora con la carita bonita es un detalle genial que podría llevarnos a esa dirección, que no es de Banco estado, a introducir nuestros datos de logeo, o la otra posibilidad es que en esta dirección se nos instale un script que nos robe tal información.

Por supuesto como este mail andan muchos por Internet, de tiendas comerciales, bancos etc. así que queda en nuestras manos cuidarnos de estos ataques, simplemente desconfiando o contactándose telefónicamente con la tienda o banco o lo que sea y tener siempre en mente que jamás estas entidades nos solicitaran estos datos vía e-mail, todo esto para no tener que pasa un tremendo y desagradable mal rato por culpa de delincuentes y la cooperación de nuestra confiada acción


12
Ago.

Indicadores Económicos

peso

Un día recibí un trabajo de un ex compañero en la carrera ( Programación Icarnegie), ……si esa carrera chanta que arraso con mas de 15 de mis ex compañeros en el primer semestre, bueno la cosa es que este buen tipo me ofreció un trabajo, crear un site(html o k creían jeje) pero había un detalle, el man necesitaba los indicadores económicos actualizados al día me explico, la idea es insertar un bloque de código(javascript, Pípi o cualquiera de esas hiervas) de tal manera que la información se actualice al mismo tiempo que se actualiza la, por ejemplo, Web de un banco.
La cosa es que me partí el maldito cerebro buscando una solución, le pregunte a mi profe y me dijo que lo que se hacia en esos casos era extraer la informacion de una Web que las tubiera.  Finalmente di con la Web de un banco ( no lo nombrare para no aumentar sus visitas a costillas mías) esta Web importaba en su Head un archivo de javascript(.js);
-http://www.subelaUFyomehagomasricoytumaspobre.com/personas/Valores.js,  tbn. en el código html habían funciones javascript que llamaban a los datos de este archivo js.

Que había que hacer entonces????? pues colgarse del fockin banco !
y obtener la preciada información,  este archivo …./Valores.js tenia un arreglo parecido a esto:

===============================================================

arrValores = new Array()
arrValores[1] = new Valor("+1.22", "15488.64", "12/08/2009", "+188.18", "15300.46", "15488.64", "15300.46", "_IGPA_COMPRA", "_IGPA_VENDA", "_IGPA_FECHAMENTO", "Chile", "14:38", "IGPA - Chile")  //IGPA-Santiago Stock Exch. (DT)
arrValores[2] = new Valor("+0.76", "1772.95", "12/08/2009", "+13.41", "1760.32", "1775.31", "1759.54", "_MER_VAL_COMPRA", "_MER_VAL_VENDA", "_MER_VAL_FECHAMENTO", "Argentina", "14:52", "Indice Merval")  //Indice Merval
arrValores[3] = new Valor("-1.42", "10435.00", "12/08/2009", "-150.46", "10434.09", "10526.35", "10585.46", "_INJN&GB_COMPRA", "_INJN&GB_VENDA", "_INJN&GB_FECHAMENTO", "Japan", "05:56", "Nikkei-225")  //NIKKEI-225 Japanese Index
arrValores[4] = new Valor("", "20968.77", "12/08/2009", "-2.71", "20971.48", "20971.48", "20971.48", "_UF_COMPRA", "_UF_VENDA", "_UF_FECHAMENTO", "Chile", "14:45", "Unidad de Fomento")  //Unidad de Fomento
arrValores[5] = new Valor("", "36792.00", "12/08/2009", "+0.00", "36792.00", "36792.00", "36792.00", "_UTM_COMPRA", "_UTM_VENDA", "_UTM_FECHAMENTO", "Chile", "14:45", "Unidad Tributaria Mensual")  //Unidad Tributaria Mensual
arrValores[6] = new Valor("-2.00", "444.04", "10/03/2008", "-9.07", "_DOLAROBS_MINIMO", "_DOLAROBS_MAXIMO", "444.04", "8099.00", "8100.00", "_DOLAROBS_FECHAMENTO", "Chile", "08:53", "Dolar Observado")  //Dolar Observado
arrValores[7] = new Valor("-0.22", "597.69", "10/03/2008", "-1.35", "_DOLARACU_MINIMO", "_DOLARACU_MAXIMO", "597.69", "8099.0
========================================================================
Juas !!!
la unidad de fomento !!!
luego me voy al index y veo quien llama al arreglo 4(arrValores[4])
y era este trozo de código:

===================================================
* if(typeof(arrValores)!= "undefined")
* if(typeof(arrValores[4])=="object")
* document.write(formatear_numero(arrValores[4].valor2));
====================================================

estaba todo listo jaja  >)
no !!!!!!!!!!!!!!
el EURO me daba 1.32 y algo :s  por que ¿? 0_o
por que esa función me daba el valor del EURO pero en dólares
me faltaba otra función seguí buscando la encontré >).

En sintesis lo que tenia que hacer era importar la
ruta http... /Valores.js en el Head de mi Web, tomar las funciones en javascript
del banco y llamar a la posición de arreglo correspondiente para EURO, DÓLAR,
IPC, UF y me kedo algo asi como esto

indicadores

04
Ago.

Hashes en google

Hola, es medio difícil para mí esto pero es algo que debo redactar en mi blog sin duda, difícil porque no quiero que ningún cabron tome esto y se ponga a hacer boludeces pero lo voy a poner lo mas imposible que pueda.

Andaba yo un día por la nube buscando como poder encriptar una contraseña (Md5) pero me empecé a dar cuenta que existían webs que se dedicaban a desencriptar hashes, que existían diccionarios de hashes (si como esos que se ocupan para fuerza bruta) y que existía toda una incesante búsqueda de parte de usuarios de la red en desencriptar haches.

Mi suspicacia me la gano, busque la forma de encriptar mi nombre y di con una web que hacia ese trabajo también di con una web que desencriptaba hashes(Md5). Bueno pase mi nombre a Md5 y lo puse en google para ver si era correcto y miren con lo que me encontré

google1

Juas mi nombre encriptado estaba regado en google segui probando con nombres :-O !!, miren lo que me devolvio google pinche el link y ahunke no lo crean

usuarios

Miren…. Los datos personales de los clientes de una empresa de informatica expuestos a vista de cualkier persona (usuario, contraseña, correo etc.) ovbiamente borre los correos y las pass. Bueno que hago con esto me pregunte, ovbiamente hay que hacer algo aquí, esto es un fallo de suguridad enorme, yo fui a dar aqui solo por accidente me puse a seguir intevestigando  sobre el tema probando con otras palabras encriptadas a Md5 y fue deprimente.

php

Juas !!!  es el administrador de MySql de un site, que brigido !!

mysql

ahora puedo ver la bded de otro  site, hacer Querys y ver las tablas y todo eso… y asi komo con esta me pille con varias mas.

Mi tesis es, ahunque ahun no lo tengo muy claro, que la mayoria de estos sites son templates hechas en pípi (php) que por algun motivo guarda informacion de sus tablas en un archivo, crei en algun momento que podrian aber sido procedimientos almacenados, tbn.  me encontre con que una palabra en md5 me deba directamente a la tabla de mysql :-O !! siendo este ya problema del server.

Y asi con los Hashes en google todo un cuento para invetigar, haber si mando un mail y le aviso al admin por lo menos del site [.cl] y despues a los demases.. lindo hobbie me encontre.

>)


23
Jul.

Unlocker mi Salvación

unlocker

Hola amiguitos  como están espero bien, bueno les quiero contar de una historia que me sucedió un día [X]. Estaba yo un con Visual Studio 2005 express y SqlServer 2005 instalados todo corriendo perfectamente bueno y como todo [joven] curioso me quise instalar la versión 2008 de ambas herramientas. La cosa es que tratando de desinstalar SQL Server 2005 me di cuenta que se me habían generado mas menos 15 carpetas alfanuméricas en C:\\

unloked11

Sumando todas esas carpetas ocupaban nada más y nada menos que 1 GB aproximadamente. Quise eliminar las carpetas pero me aprecia un mensajito eula.txt está siendo utilizado…. y no tan solo ese archivo si no que muchos más por carpeta y ninguno se podía eliminar.

unloked2

Busque muchas formas de eliminar tales carpetas y matar los procesos de cada uno seria una lata hasta que di con Unlocker. Una vez instalado seleccionamos las carpetas fastidiosas con botón derecho y en el menú flotante nos aparecerá la herramienta

unloked31una vez k clikie en Unlocker me aparecio la herramientita

unlocker4

seleccione del combo de opciones el item Eliminar y las carpetiotas se fueron eliminando una tras otra con un rango de tiempo de 1 minuto entre una y otra y junto kon eso mi furia con estas jodidas carpetas

xD.

_uacct = “UA-8865874-2″;
urchinTracker();


04
Jul.

Certamen Numero 3

Enunciado >> Solemne 3

Problema 1 >>Ejercicio1

Problema 2>>Ejercicio2

Problema 3>>Cronometro

Powered by Wordpress 2YI.NET Web Directory