Mini Virutas de Java
martes, 5 de mayo de 2009
  4 Mayo 2009. Trabajar con los ejemplos del seam.
Trabajar con los ejemplos del seam.

- Nuevo proyecto Java: Nombre: MismaCarpetaDelSeam (resto de opciones por defecto y esperar que importe el proyecto).
- Desplegar ejemplo registration.
- Abrimos la vista de ANT y arrastramos el archivo examples/registration/build/build.xml a la ventana de ANT. (Ojo, hay que buscar la carpeta examples y no el paquete examples).
- En la carpeta build hay un default.build.propierties que accede build.xml para acceder al tomcat. (nota: seam puede lanzar aplicaciones j2ee sólo con un servidor web y no con un servidor de aplicaciones).
- En el archivo default.build.propierties configuramos jboss.home y decimos donde tenemos el jboss.
- Pulsamos en deploy en la ventana del ant (ant puede compilar sin necesidad de eclipse).

[copy] Copying 1 file to C:\Documents and Settings\javaape\Mis documentos\jboss-5.0.1.GA\server\default\deploy
BUILD SUCCESSFUL
Total time: 1 second


- Arrancamos el jboss.
- Introducimos en un navegador: http://localhost:8080/seam-registration
 
  24 Abril 2009
Clientes y pedidos.

Cliente debe llevar id, nombre y pass y la coleccion de pedidos (lista de pedidos).
El pedido ya sabemos lo que lleva pero lleva, id, fecha, lista de lineas y ahora va a tener un cliente.
many pedidos lo realiza un cliente.

Cliente
----------
- Long Id;
- String nombre;
- String pass;
- List pedido;

[N]
|
|
|
[1]

Pedido
----------
- Long Id;
- Calendar fecha;
- List lineas;
- Cliente c;

En seam tenemos el login.xhtml preinstalado con distintos campos.
en credentials se guardan las credenciales de usuario.
Si tenemos un formulario y un input text cuando envie el formulario se inyecta al componente de evento "credentials". Cuando se pinta se destruye el objeto de evento.
Boton login y casilla check "Remember me" hablan con #{identity} otro componente de sesión.

En identity hay un metodo llamado login que es el metodo que llama el botón del formulario del componente preinstalado del seam.

En el paquete session está la clase "authenticator". Cuando se hace click en el botón de login, identity llama a la clase authenticator, al metodo authenticate. Desde el login de identity, se habla con authenticate.

Poniendo en authenticate() un syso(credentials.getUsername()); vemos el nombre de quien está intentando logar.
syso(credentials.getPassword()); vemos el pass.

if(registro es correcto) identity.addRole("clienteRegistrado");

Usuario lleva tres objetos con él. identity (dice si está logado), cliente (contiene datos de cliente si está logado) y pedido (contiene datos de pedido).

En authenticator.java ponemos:

@In Identity identity;
@In Credentials credentials;
@PersistenceContext entityManager entityManager;


public boolean authenticate()
{
Query q = entityManager.createQuery("from cliente c where c.nombre:n and c.password=:p"); //consulta si coincide alguna
q.setParamenter("n", credentials.getUsermane());
q.setParamenter("p", credentials.getPassword());
List resultados = q.getResultList(); // Muestra una lista de clientes coincidentes.

boolean existeCliente=resultados.size()>0;
if(existeCliente){
identity.addRole("cliente"); //Añadimos un rol para dar una serie de permisos.
return true;
}
}

Si queremos comprobar el tipo de rol hay que poner if (identity.hasRole("elquesea")) y así habilitamos o reducimos opciones.

Para que funcione esto, la clase authenticator debe ser un ejb, con lo que debe llevar la anotación @Stateless y estar implementada desde una interfaz con la anotación @Local.
Nos llevamos el método authenticate a la interfaz.
Y ya podemos desplegar la aplicación.

En authenticator ya tenemos el cliente podríamos llevárnoslo a su pedido vivo para inyectarlo allí.

(Authenticator.java)
@In(value="carritoCompra, create=true)
Pedido pedido;
[...]
if (existeCliente){
Cliente c=(cliente) resultados.get(0);
pedido.setCliente(c);

Esta forma es al revés de como debería hacerse, lo normal sería que el authenticator lo lance a pedido con @Out.

"Outyecciones":
ListaDiscosBean lleva un @In Pedido pedido; donde inyectamos el carrito, también nos gustaría tener el cliente inyectado (@In Cliente cliente).

@PersistenceContext
EntityManager em;
String nombre;
List discos;
@In(value="pedido", create=true)
Pedido pedido;
@In(value="cliente", create=true)
Pedido cliente;
@In(value="micomp", create=true)
MiComponente miComponente;

guarda() //nuestro botón de la página guardapedido va a llamar a este método.
pedido.setCliente(cliente)
em.persist(pedido);

Necesito que el cliente salga de authenticator,
@Out(Value="cliente", scopeType.SESSION)
Cliente cliente;
public boolean authenticate() {
[...]
c=resultados.get(0); //al cambiar el valor de "c" la anotación out lanza el objeto.
}

todo authenticator queda así:
package org.domain.tiendadiscos.session;

@Stateless
@Name("authenticator")
public class Authenticator implements AutenticatorLocal
{
@Logger private Log log;

@In Identity identity;
@In Credentials credentials;
@PersistenceContext EntityManager entityManager;

@Out(value="cliente", scope=ScopeType.SESSION)
Cliente cliente;
public boolean authenticate()
{
Query q = entityManager.createQuery("from Cliente c where c.nombre=:n and c.pass=:p"); //consulta si coincide alguna
q.setParameter("n", credentials.getUsername());
q.setParameter("p", credentials.getPassword());
List resultados = q.getResultList(); // Muestra una lista de clientes coincidentes.

boolean existeCliente=resultados.size()>0;
if(existeCliente){
cliente=(Cliente) resultados.get(0);
identity.addRole("cliente"); //Añadimos un rol para dar una serie de permisos.
return true;
} else {
return false;
}
}
}

Registro cliente
Consultar pedidos y lineas de pedido

Registro Admin
Consultar estadísticas de Disco y Cantante (consultas JPQL)
 
jueves, 12 de febrero de 2009
  MVC (Modelo vista Controlador)
Modo de Desarrollo modular.

Servlets, listeners, jsp, tags.

Realización de un proyecto biblioteca en modo MVC.
Usando todo lo anterior explicado, incluyendo TestNG.
 
  JSTL Etiquetas
Usos para JSP, etiquetas que añaden potencia al código.

-Librerías de Etiquetas JSTL.
-Etiquetas JSTL personalizadas.

Ejemplo en repositorio de funciones JSTL (fn:) en
http://code.google.com/p/javacarlos/source/browse/#svn/trunk/jstlFunctions
 
lunes, 9 de febrero de 2009
  Actualizaciones varias
-Entrega del proyecto en común "biblioteca".

-Tests de código testNG (para testear el código sin necesidad de entrar en él).
En primer lugar se instala testNG, después se usan dos carpetas "packets" y se hace en cada paquete una estructura simétrica de clases donde se quiera hacer un test.
Las clases test se nombran como las clases normales, pero añadiendo -Test al final.
Después se ejecuta como testNG.

- Colecciones y testNG
- Diseño en capas de una aplicacion 8aislamiento de la capa de datos).
-JSTL, etiquetas personalizadas para JSP.
TLD es un archivo xml donde define cada etiqueta.
taglib es el import de las etiquetas.
 
lunes, 2 de febrero de 2009
  Proyecto de biblioteca
Continuamos con el proyecto de gestión de biblioteca en Java para web.
 
lunes, 26 de enero de 2009
  Practica tienda
Práctica donde se hace una tienda online por Servlets en Java.
Cuenta con usuarios, catálogo de productos y carrito de la compra.
 
Blog donde se describirá todo lo que se vaya dando en el curso de Java de la CEA.

Nombre:
Archivos
enero 2009 / febrero 2009 / mayo 2009 /


Powered by Blogger

Suscribirse a
Entradas [Atom]