1. Tutorial de la Aplicación

1.1. Creacion de un Nuevo Proyecto en Eclipse


Indicaciones:

  • Project Name: AppDataStoreJDO. Puedes cambiar el nombre del proyecto por el que más te guste.
  • Package: com.gae.app. Puedes cambiar el nombre del paquete si deseas.
  • Quitar el "check" en la opción que dice "Use Google Web Toolkit"
  • Click en "Finish"
La estructura de la aplicación por defecto debe ser la siguiente:

1.2. Creando la Clase Empleado

La clase "Empleado" que va a ser la clase encargada de manejar la persistencia de datos.

Indicaciones:

  • Crear un nuevo paquete con el siguiente nombre: com.gae.app.bean
  • Dentro del paquete "com.gae.app.bean" crear una clase con el siguiente nombre: Empleado
Ingresar el siguiente código dentro de la clase Empleado:
package com.gae.app.bean;

import java.util.Date;
import javax.jdo.annotations.*;
import com.google.appengine.api.users.User;

//Especifica que la clase es Persistente
@PersistenceCapable(identityType=IdentityType.APPLICATION)
public class Empleado {
 //Va a ser la clave primaria de la clase Empleado
 @PrimaryKey
 //Para que genere el codigo de forma automatica
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Long id;
 @Persistent
 private User user;
 @Persistent
 private String userid;  
 @Persistent
 private String nombres;
 @Persistent
 private String apellidos;
 @Persistent
 private String dni;
 @Persistent
 private String sexo;
 @Persistent
 private Date fechanac;
 @Persistent
 private Date fechareg;
 
 //Constructor de la Clase
 public Empleado
 (User user, String userid, String nombres, String apellidos,
  String dni, String sexo, Date fechanac, Date fechareg)
 {
  this.user=user;
  this.userid=userid;
  this.nombres=nombres;
  this.apellidos=apellidos;
  this.dni=dni;
  this.sexo=sexo;
  this.fechanac=fechanac;
  this.fechareg=fechareg;
 }
 
 //Metodos get y set
 public Long getId() {
  return id;
 }
 public void setId(Long id) {
  this.id = id;
 }
 public User getUser() {
  return user;
 }
 public void setUser(User user) {
  this.user = user;
 }
 public String getUserid() {
  return userid;
 }
 public void setUserid(String userid) {
  this.userid = userid;
 }
 public String getNombres() {
  return nombres;
 }
 public void setNombres(String nombres) {
  this.nombres = nombres;
 }
 public String getApellidos() {
  return apellidos;
 }
 public void setApellidos(String apellidos) {
  this.apellidos = apellidos;
 }
 public String getDni() {
  return dni;
 }
 public void setDni(String dni) {
  this.dni = dni;
 }
 public String getSexo() {
  return sexo;
 }
 public void setSexo(String sexo) {
  this.sexo = sexo;
 }
 public Date getFechanac() {
  return fechanac;
 }
 public void setFechanac(Date fechanac) {
  this.fechanac = fechanac;
 }
 public Date getFechareg() {
  return fechareg;
 }
 public void setFechareg(Date fechareg) {
  this.fechareg = fechareg;
 }
}

1.3. Creando la Clase PMF

La clase "PMF" va a tener la variable encargada de controlar las peticiones de registros y búsqueda de la información almacenada.

Indicaciones:
  • Crear un nuevo paquete con el siguiente nombre: com.gae.app.dao
  • Dentro del paquete "com.gae.app.dao" crear una clase con el siguiente nombre: PMF
Ingresar el siguiente código dentro de la clase PMF :
package com.gae.app.dao;

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;

public final class PMF {
 //Variable encargada de controlar las peticiones
 private static final PersistenceManagerFactory
 pmfInstancia=JDOHelper.getPersistenceManagerFactory("transactions-optional");
 
//Para que no puedan instanciar la clase
 private PMF(){}
 
//Retorna la instancia encargada de controlar las peticiones
 public static PersistenceManagerFactory get(){
  return pmfInstancia;
 }  
}

1.4. Creando la Clase EmpleadoDao

La clase "EmpleadoDao" va a tener los métodos para insertar, actualizar, eliminar y/o consultar datos persistentes utilizando JDO(Java Data Objects) y como Query Language a JDOQL .
 
Indicaciones:
  • Dentro del paquete "com.gae.app.dao" crear una clase con el siguiente nombre: EmpleadoDao
Ingresar el siguiente código dentro de la clase EmpleadoDao :
package com.gae.app.dao;

import javax.jdo.PersistenceManager;

import com.gae.app.bean.Empleado;
import java.util.*;
import com.google.appengine.api.users.*;
import javax.jdo.Query;

public class EmpleadoDao { 
 //Metodo para Insertar un Nuevo Registro
 public static void insertarEmpleado
 (User user,String userid,String nombres,String apellidos,String dni, String sexo,
  Date fechanac, Date fechareg) {
  //LLamamos a la clase que tendra la persistencia
  PersistenceManager pm = PMF.get().getPersistenceManager();
  // Nueva variable empleado
  Empleado empleado=new Empleado(user,userid,nombres,apellidos,dni,sexo,
          fechanac,fechareg);
  //Haciendo la persistencia de datos
  pm.makePersistent(empleado);  
 }
 
 @SuppressWarnings("unchecked")
 //Metodo para Listar Empleados
 public static List<Empleado> listarEmpleados(){
  PersistenceManager pm = PMF.get().getPersistenceManager();
  Query query = pm.newQuery("select from "+Empleado.class.getName()+"");  
  return (List<Empleado>) query.execute();
 }
}

1.5. Clase AppDataStoreJDOServlet

Después de realizar los pasos anteriores, proseguiremos a configurar el servlet para procesar las solicitudes y respuestas.
Ingresar el siguiente código fuente dentro del servlet:
package com.gae.app;

import com.gae.app.dao.*;
import com.gae.app.bean.*;
import java.util.*;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.*;
import javax.servlet.http.*;
import com.google.appengine.api.users.*;

@SuppressWarnings("serial")
public class AppDataStoreJDOServlet extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, IOException
 { 
 if(req.getParameter("action").equals("registrar")){
 UserService userService= UserServiceFactory.getUserService();
    User user=userService.getCurrentUser(); 
    String userid=user.getUserId();
    Date fechareg = new Date();
    Date fechanac = new Date();
    String nombres=req.getParameter("nombres");
    String apellidos=req.getParameter("apellidos");
    String dni=req.getParameter("dni");
 String sexo=req.getParameter("sexo");
   
 try {
  SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  fechanac = sdf.parse(req.getParameter("fechanac"));  
  
 } catch (ParseException e) {
  
  System.out.println("Excepcion:" + e);
 }
   
 EmpleadoDao.insertarEmpleado(user,userid,nombres,apellidos,dni,sexo,fechanac,fechareg);
 
 List<Empleado> empleados = EmpleadoDao.listarEmpleados();
    req.setAttribute("empleados", empleados);
    RequestDispatcher rd =  getServletContext().getRequestDispatcher("/ListarEmpleados.jsp");
    rd.forward(req, resp);
 } 
    }


public void doGet(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException  
  {
 if(req.getParameter("action").equals("listarEmpleados")){
  List<Empleado> empleados=EmpleadoDao.listarEmpleados();
  req.setAttribute("empleados", empleados);
     RequestDispatcher rd =  getServletContext().getRequestDispatcher("/ListarEmpleados.jsp");
     rd.forward(req, resp);
 } 
  } 
} 



1.6. Creando la Páginas JSP

1.6.1. index.jsp

Esta página contendrá el formulario de registro de un nuevo empleado previamente a un login de acceso(Cuenta en Gmail).
Ingresar el siguiente código en la página index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="com.google.appengine.api.users.User" %>
<%@ page import="com.google.appengine.api.users.UserService" %>
<%@ page import="com.google.appengine.api.users.UserServiceFactory" %>

<html>
<head>
<title>Mantenimiento de Empleados</title>
<link rel="stylesheet" type="text/css" href="css/estilos.css" />
</head>
<body>
<%
    UserService userService = UserServiceFactory.getUserService();
 //Capturamos al Usuario Actual
    User user = userService.getCurrentUser();
    if (user != null) {
%>
<p align="center">&lt;&lt;Bienvenido, <%= user.getNickname() %>&gt;&gt; <a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">Cerrar Sesion</a>
<a href="/empleado?action=listarEmpleados">Listar Empleados</a>
</p>
<form action="/empleado" method="post">
  <div align="center">
  <table border="0" cellspacing="1" cellpadding="5">
      <tr bgcolor="#4B4B5A" style="color: white;" ><td colspan="2" align="center"><h3><u>Mantenimiento de Empleados</u></h3></td></tr>
      <tr>
       <td>Nombres:</td>
       <td><input type="text" name="nombres" /></td>
      </tr>
      <tr>
       <td>Apellidos:</td>
       <td><input type="text" name="apellidos" /></td>
      </tr>
      <tr>
       <td>DNI:</td>
       <td><input type="text" name="dni" /> </td>
      </tr>
      <tr>
      <td>Sexo:</td>
      <td><select name="sexo">
    <option value="-" selected> -- Seleccionar --</option>        
    <option value="M" >Masculino</option>
    <option value="F">Femenino</option>
     </select>
   </td>
      </tr>
      <tr>
       <td>Fecha de Nacimiento:</td>
       <td><input type="text" name="fechanac" />(dia/mes/anio) </td>
      </tr>
      <tr>
       <td colspan="2" align="center">
       <input type="hidden" name="action" value="registrar"/>
       <input type="submit" value="Registrar" class="boton" >
       </td>
      </tr>
   </table>
   </div>
   </form>
<%
    } else {
%>
<p>DEBE INICIAR SESION ... click
<a href="<%= userService.createLoginURL(request.getRequestURI()) %>">AQUI</a>
para loguearse.</p>
<%
    }
%> 
</body>
</html>

1.6.2. ListarEmpleados.jsp

Esta página contendrá un listado de todos los registros de los empleado que hagan los usuarios(logueados).
Ingresar el siguiente código en la página ListarEmpleados.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@page import="com.gae.app.*"%>
<%@page import="com.gae.app.bean.*"%>
<%@page import="com.gae.app.dao.*"%>
<%@page import="java.util.*"%>
<%@page import="java.text.SimpleDateFormat" %>

<%
List<Empleado> empleados =(List<Empleado>)request.getAttribute("empleados");

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
%>
<html>
<head>
<title>Listar Empleados</title>
<link rel="stylesheet" type="text/css" href="css/estilos.css" />
</head>
<body>
<% if (empleados.size() > 0) { %>
  <div align="center">
  <table border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC">
        <tr><td colspan="6" align="center" ><%= empleados.size() %> resultados encontrados ::::: </td></tr>
  <tr align="center" class="cabeceraTable">
   <td><b>#</b></td>
   <td><b>Nombres</b></td>
   <td><b>Apellidos</b></td>
   <td><b>DNI</b></td>
   <td><b>Sexo</b></td>
   <td><b>Fecha de Nacimiento</b></td>   
        
  </tr>
  <% int n=1; %>
  <% for (int i = 0;i<empleados.size();i++) { %>
   <% Empleado e = (Empleado)empleados.get(i); %>
   <tr style="background:#ffffff" onMouseOver="this.style.background='#eeeeee';" onMouseOut="this.style.background='#ffffff';">
    <td><%= n++%></td>     
    <td><%= e.getNombres() %></td>
    <td><%= e.getApellidos()%></td>
    <td align="center"><%= e.getDni() %></td>
    <td align="center"><%= e.getSexo() %></td>
    <td align="center"><%= sdf.format(e.getFechanac())%></td>          
   </tr>
  <% } %>
  </table>
  <% } else { %>
    <table>
    <tr><td>Ningun resultado. </td></tr>
    </table></div>
   <% } %> 
</body>
</html>

estilos.css

body {
  font:12px "Lucida Grande", "Lucida Sans", "Trebuchet MS",verdana, sans-serif;
  color:#4B4B5A;
}
table {
  font:12px "Lucida Grande", "Lucida Sans", "Trebuchet MS",verdana, sans-serif;
  border:1px solid #4B4B5A;
  color: #4B4B5A; 
  font-weight: bold;
}
.boton{
 background-color:#4B4B5A;
 font:11px "Lucida Grande", "Lucida Sans", "Trebuchet MS",verdana, sans-serif;
 color:white;
}
.cabeceraTable{
 background-color:#4B4B5A;
 font:11px "Lucida Grande", "Lucida Sans", "Trebuchet MS",verdana, sans-serif;
 color:white;
}

1.7. Archivo web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 <servlet>
  <servlet-name>empleado</servlet-name>
  <servlet-class>com.gae.app.AppDataStoreJDOServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>empleado</servlet-name>
  <url-pattern>/empleado</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

1.8. Archivo jdoconfig.xml

Dejar el archivo por defecto tal y como se muestra a continuación:
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

   <persistence-manager-factory name="transactions-optional">
       <property name="javax.jdo.PersistenceManagerFactoryClass"
           value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
       <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
       <property name="javax.jdo.option.NontransactionalRead" value="true"/>
       <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
       <property name="javax.jdo.option.RetainValues" value="true"/>
       <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
   </persistence-manager-factory>
</jdoconfig>

2. Corriendo la Aplicación de Manera Local: localhost:8888


A los usuarios no logueados les aparecerá este mensaje.



Login.


Formulario de Registro de Empleado.



Ingresando Datos de un Nuevo Empleado.


Listando los Registros de todos los Empleados.
Copyright © 2021 TRUJILLOSOFT