http://xyzdev.blogspot.com/2009/01/ordenar-listas-en-java.html
http://groups.google.com/group/eticom-master-java/web/colecciones-de-objetos
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Comparator.html
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html
viernes, 30 de enero de 2009
martes, 27 de enero de 2009
lunes, 26 de enero de 2009
Proyecto Final Servlet elaboracion en equipo
se utilizará Google code y subversion (SVN y subclipse: plugin de eclipse para SVN)
Proyecto Final Servlet elaboracion en equipo
Cada grupo realizará un proyecto (fecha limite: 3 febrero - 12 Horas) y entregará una memoria (fecha limite: viernes 6 febrero ) en el que se explicará las decisiones adoptadas en el diseño de clases y rol elegido. Se valorará la puesta en practica de los diferentes recursos disponibles. En el desarrollo del proyecto puede intervenir el profesor como tester-cliente y redefinición de usabilidad.
*** La aplicación debe estar preparada en los casos que el usuario intente hacer algo mal a proposito: pedir un libro que no existe, realizar un prestamo sin permiso, modificar un autor sin ser administrador ...
Servicio Préstamo de Biblioteca:
Programa de gestión de servicio de préstamo de una biblioteca.
EXTRAS OPCIONALES:
Proyecto Final Servlet elaboracion en equipo
Cada grupo realizará un proyecto (fecha limite: 3 febrero - 12 Horas) y entregará una memoria (fecha limite: viernes 6 febrero ) en el que se explicará las decisiones adoptadas en el diseño de clases y rol elegido. Se valorará la puesta en practica de los diferentes recursos disponibles. En el desarrollo del proyecto puede intervenir el profesor como tester-cliente y redefinición de usabilidad.
*** La aplicación debe estar preparada en los casos que el usuario intente hacer algo mal a proposito: pedir un libro que no existe, realizar un prestamo sin permiso, modificar un autor sin ser administrador ...
Servicio Préstamo de Biblioteca:
Programa de gestión de servicio de préstamo de una biblioteca.
- El usuario anónimo podrá consultar el catálogo de la biblioteca el cual podrá estar ordenado/clasificado en géneros (ensayo, policíaco, aventuras...) y/o autores.
- Cada libro tiene: referencia, autor, fecha publicación, genero, titulo.
- Cada autor tiene: nombre y una lista de libros.
- Cada genero tiene: nombre y una lista de libros. Cada usuario de la biblioteca tiene: nombre, clave, mail y lista de libros en prestamo.
- La aplicacion/biblioteca tiene: lista de libros, lista de generos, lista de autores y lista de usuarios y un administrador (usuario especial que al registrarse tiene permisos especiales)
- El usuario podrá ver los detalles de libro y proceder a su préstamo.
- Para realizar un préstamo el usuario tiene que estar registrado.
- Para registrarse el usuario debe antes existir en la lista de usuarios de la aplicación. El registro consiste en un formulario donde el usuario inserta su mail y clave y estos deben coincidir con un usuario de la lista de usuarios de la aplicacion.
- Un usuario podrá tener un máximo de 3 libros en préstamo.
- Un usuario no podrá tener dos libros iguales en prestamo
- Un usuario registrado puede consultar los libros que tiene en prestamo.
- Para realizar un préstamo de libro el usuario indica el dia de inicio y fin de prestamo que no puede ser superior a 5 dias.
- Un usuario que no existe en la biblioteca puede solicitar a el administrador mediante un formulario el ingreso en la aplicacion para posteriormente poder registrarse
- El administrador del programa se registra con usuario: admin, clave:admin.
- El administrador no puede realizar prestamos pero hace tareas de administacion.
- El administrador del programa puede aceptar las solicitudes de usuarios pendientes y convertirlos en usuarios que pueden realizar prestamos
- El administrador del programa puede crear/modificar/borrar libros, autores y generos
- El administrador del programa puede consultar todos los libros reservados (fecha inicio y fin y usuario que realizó el préstamo) desde que se inicio la aplicación.
- El administrador del programa puede prohibir a un usuario el préstamo
EXTRAS OPCIONALES:
- aplicar estilos CSS
- separar la capa de datos (DAO) y conectar con MYSQL
Aplicacion carrito de la compra
aplicacion carrito de la compra paso a paso en:
http://groups.google.com/group/curso-j2ee/web/aplicacion-tienda-con-servlets
http://groups.google.com/group/curso-j2ee/web/aplicacion-tienda-con-servlets
Etiquetas:
carritoCompra,
listener,
servlets
miércoles, 21 de enero de 2009
Ejercicios: contador visitas, cronometro, chat
Proyecto contador:
pdf: filtros en la practica
filtros project
damos de alta un servlet para el registro de usuario (formulario de registro)
activacion de seguridad con filtro de registro de usuario
algunos ejemplos sobre filtros...
- El Contador contabilizara todas las peticiones de todos los usuarios!
- ContadorUsuarios contabilizará los usuarios que se han conectado a la aplicación desde que se inicia la app
- ContadorUsuriosConectados contabilizará los usuarios conectados en el momento actual a la aplicación.
pdf: filtros en la practica
filtros project
damos de alta un servlet para el registro de usuario (formulario de registro)
activacion de seguridad con filtro de registro de usuario
algunos ejemplos sobre filtros...
martes, 20 de enero de 2009
Listeners en el api de servlet y colecciones en java.util
Listeners en servlets
Ejemplos de creacion de listeners y activacion en web.xml
¿para qué sirve escuchar (y hacer algo en ese momento) cuando arranca la aplicacion o cuando se conecta por primera vez un usuario nuevo a la aplicación ?
Cuando arranca la aplicación es el momento oportuno para iniciar los recursos comunes a los componentes de la aplicación o situar en un estado concreto la información. Ejemplos de esto pueden ser: conectar con la base de datos, comenzar con una información especifica (zoo con algunos animales dentro...)...
Igualmente es interesante poder limpiar o cambiar recursos al parar o desactivar la aplicación, por ejemplo: desconectar de la base de datos, escribir mail de desactivación, escribir un registro en un fichero ...
Cuando se conecta un usuario es muy util saberlo para inicializar aquellos objetos que el usuario puede utilizar, por ejemplo: el carrito de la compra, servicios, colecciones de objetos ...
Igualmente cuando se desconecta el usuario es util para limpiar recursos asociados con su uso (session)
Ejercicio continuacion de zoo: implementacion de listener de session y de aplicacion
Iniciar la session de usuario con las colecciones iniciadas.
Finalizar la session de usuario añadiendo sus colecciones a un atributo de aplicacion que se llamara "todosLosAnimales" y que será una coleccion de animales de todos los usuarios
session
al iniciar la aplicacion...
arg0.getSession().getServletContext().setAttribute("todosLosAnimales", coleccion);
al finalizar la aplicacion...
List coleccion=arg0.getSession().getServletContext().getAttribute("todosLosAnimales");
coleccion.addAll(arg0.getSession().getAttribute("animales"));
- application - ServletContext
- javax.servlet.ServletContextListener
- javax.servlet.ServletContextAttributeListener
- session
- javax.servlet.http.HttpSessionListener
- javax.servlet.http.HttpSessionAttributeListener
- javax.servlet.http.HttpSessionActivationListener
- javax.servlet.http.HttpSessionBindingListener
- request - event
- javax.servlet.ServletRequestListener
- javax.servlet.ServletRequestAtributeListener
Ejemplos de creacion de listeners y activacion en web.xml
¿para qué sirve escuchar (y hacer algo en ese momento) cuando arranca la aplicacion o cuando se conecta por primera vez un usuario nuevo a la aplicación ?
Cuando arranca la aplicación es el momento oportuno para iniciar los recursos comunes a los componentes de la aplicación o situar en un estado concreto la información. Ejemplos de esto pueden ser: conectar con la base de datos, comenzar con una información especifica (zoo con algunos animales dentro...)...
Igualmente es interesante poder limpiar o cambiar recursos al parar o desactivar la aplicación, por ejemplo: desconectar de la base de datos, escribir mail de desactivación, escribir un registro en un fichero ...
Cuando se conecta un usuario es muy util saberlo para inicializar aquellos objetos que el usuario puede utilizar, por ejemplo: el carrito de la compra, servicios, colecciones de objetos ...
Igualmente cuando se desconecta el usuario es util para limpiar recursos asociados con su uso (session)
Ejercicio continuacion de zoo: implementacion de listener de session y de aplicacion
Iniciar la session de usuario con las colecciones iniciadas.
Finalizar la session de usuario añadiendo sus colecciones a un atributo de aplicacion que se llamara "todosLosAnimales" y que será una coleccion de animales de todos los usuarios
session
al iniciar la aplicacion...
arg0.getSession().getServletContext().setAttribute("todosLosAnimales", coleccion);
al finalizar la aplicacion...
List coleccion=arg0.getSession().getServletContext().getAttribute("todosLosAnimales");
coleccion.addAll(arg0.getSession().getAttribute("animales"));
lunes, 19 de enero de 2009
viernes, 16 de enero de 2009
Entender la sobreescritura de metodos 2: sobreescribir equals()
Cómo mantener información de usuario utilizando el objeto session
(y con ello Demostración de llamadas a métodos de la clase java.lang.Object: equals y hascode en relación al uso de colecciones)
Para la siguiente demostración vamos a crear una discoteca: programa para coleccionar discos.
La funcionalidad va a consistir en 2 paginas web o URLs. Una pagina o peticion(/discoteca) para mostrar el contenido de los discos almacenados en la coleccion del usuario (para almacenar objetos de tipo disco vamos a utilizar la clase java.util.List). Otra pagina o solicitud para (/disco) para mostrar formulario de incluir nuevo disco.
Comenzamos definiendo la clase Disco con las propiedades: titulo, cantante y referencia.
Seguimos con el formulario de nuevo disco que se enviara a la discoteca...
Es decir creamos un nuevo servlet que pintará el formulario y lo damos de alta en el web.xml para que escuche las peticiones en /disco
Creamos el servlet discoteca y lo damos de alta en el web.xml.
El servlet discoteca en esta primera fase de desarrollo, lo unico que hace es comprobar que la discoteca (List ) esta en la session y en caso contrario la crea. Posteriormente la pinta en pantalla (aunque por ahora siempre estará vacía)
En dicho servlet accedemos al objeto session (HttpSession) a través del objeto request.getSession(), obteniendo con este objeto la capacidad de acceder a atributos session.getAttribute("clave") o incluir atributos session.setAttribute("clave", objeto).
Una vez que esto funciona, modificamos el codigo para que: si recibimos el formulario de /disco entonces creamos un nuevo Disco y lo metemos en la coleccion.
Sobreescribimos el metodo toString() de la clase Disco para que imprima el nombre y autor del disco
Limitamos los discos duplicados (implementamos metodo equals y hascode en la clase Disco) para poder utilizar el metodo de la clase List contains: boolean existe=coleccion.contains(object)
Ejercicio: zoo.
Paquete es.cea.zoo
Para practicar los conceptos anteriores: atributos de session, servlets, sobreescritura de metodos (equals y tostring) vamos a realizar un programa para la gestion de un zoologico...
más sobre la clase Object
En java todo es un objeto! (excepto los tipos primitivos)
Java es un lenguaje orientado a objetos porque existe una herencia "invisible" (sin declarar de forma especifica) de la clase java.lang.Object . Esto quiere decir que todas nuestras clases heredan de la clase java.lang.Object, y con ella 5 de los metodos que declara:
Ya hemos visto como sobreescribir el comportamiento del metodo toString() en la entrada anterior, y ahora vamos a cambiar el comportamiento del metodo equals(Object).
Este metodo esta diseñado para saber si un objeto es igual a otro objeto. Un ejemplo de esto sería con cadenas de texto:
String una="ejemplo";
String dos="ejemplo2";
String unaBis="ejemplo";
una.equals(dos)==false
una.equals(unaBis)==true
Este comportamiento sería el esperado, pero si lo probamos en objetos que no son de tipo String entonces comprobaremos que el metodo equals no responde a nuestras expectativas...
http://code.google.com/p/cursoj2ee/source/detail?r=15
En el ejemplo anterior se pone de manifiesto que dos alumnos con el mismo nombre e igual DNI no son iguales como objeto. Es decir al compararlos con equals nos devuelve false.
La razón de ello es que la comparación de objetos no se realiza por sus propiedades sino por la implementación del metodo equals en la clase correspondiente. Si no sobreescribimos el metodo equals dos objetos (obtenidos con new ClaseDeObjeto()) nunca son iguales aunque sus propiedades sean iguales.
Diferencias entre igualdad e identidad
boolean iguales=a.equals(b);
boolean identicos=(a == b);
5dia
(y con ello Demostración de llamadas a métodos de la clase java.lang.Object: equals y hascode en relación al uso de colecciones)
Para la siguiente demostración vamos a crear una discoteca: programa para coleccionar discos.
La funcionalidad va a consistir en 2 paginas web o URLs. Una pagina o peticion(/discoteca) para mostrar el contenido de los discos almacenados en la coleccion del usuario (para almacenar objetos de tipo disco vamos a utilizar la clase java.util.List). Otra pagina o solicitud para (/disco) para mostrar formulario de incluir nuevo disco.
Comenzamos definiendo la clase Disco con las propiedades: titulo, cantante y referencia.
Seguimos con el formulario de nuevo disco que se enviara a la discoteca...
Es decir creamos un nuevo servlet que pintará el formulario y lo damos de alta en el web.xml para que escuche las peticiones en /disco
Creamos el servlet discoteca y lo damos de alta en el web.xml.
El servlet discoteca en esta primera fase de desarrollo, lo unico que hace es comprobar que la discoteca (List ) esta en la session y en caso contrario la crea. Posteriormente la pinta en pantalla (aunque por ahora siempre estará vacía)
En dicho servlet accedemos al objeto session (HttpSession) a través del objeto request.getSession(), obteniendo con este objeto la capacidad de acceder a atributos session.getAttribute("clave") o incluir atributos session.setAttribute("clave", objeto).
Una vez que esto funciona, modificamos el codigo para que: si recibimos el formulario de /disco entonces creamos un nuevo Disco y lo metemos en la coleccion.
Sobreescribimos el metodo toString() de la clase Disco para que imprima el nombre y autor del disco
Limitamos los discos duplicados (implementamos metodo equals y hascode en la clase Disco) para poder utilizar el metodo de la clase List contains: boolean existe=coleccion.contains(object)
Ejercicio: zoo.
Paquete es.cea.zoo
Para practicar los conceptos anteriores: atributos de session, servlets, sobreescritura de metodos (equals y tostring) vamos a realizar un programa para la gestion de un zoologico...
- Creamos en eclipse un nuevo proyecto web dinamico. Como nombre le indicamos "zoo"
- seleccionamos la pestañita de "servers" dentro de eclipse y boton derecho ->add and remove projects... y le añadimos el recien creado
- Los animales que tendremos que gestionar en el zoo serán: leones, jirafas, panteras. Cada animal tendra un nombre y una edad
- Creamos un servlet que responda a la peticion "/visita" y nos pinte en pantalla la coleccion de leones, de jirafas y de panteras (en tres lineas, una debajo de la otra)
- Creamos un servlet que pinte un formulario para introducir una nueva jirafa en la URL: '/jirafa', con los datos: nombre y edad. Dicho formulario se enviará a '/visita'
- Creamos un servlet que pinte un formulario para introducir una nueva pantera en la URL: '/pantera', con los datos: nombre y edad. Dicho formulario se enviará a '/visita'
- Creamos un servlet que pinte un formulario para introducir un nuevo leon en la URL: '/leon', con los datos: nombre y edad. Dicho formulario se enviará a '/visita'
- Cuando el servlet encargado del URL: '/visita' reciba los parametros del formulario '/jirafa', entonces creará una nueva jirafa y la incluira a la coleccion de jirafas existentes
- Cuando el servlet encargado del URL: '/visita' reciba los parametros del formulario '/pantera', entonces creará una nueva pantera y la incluira a la coleccion de panteras existentes
- Cuando el servlet encargado del URL: '/visita' reciba los parametros del formulario '/leon', entonces creará un nuevo leon y lo incluira a la coleccion de leones existentes
- Modificar el metodo equals de las clases correspondientes (Leon, Jirafa, Pantera) para que al incluirlas a la coleccion no existan duplicados [dos animales se consideran iguales si su nombre y edad es igual*]
- aplicar herencia entre las diferentes clases de animales para eliminar el codigo redundante
más sobre la clase Object
En java todo es un objeto! (excepto los tipos primitivos)
Java es un lenguaje orientado a objetos porque existe una herencia "invisible" (sin declarar de forma especifica) de la clase java.lang.Object . Esto quiere decir que todas nuestras clases heredan de la clase java.lang.Object, y con ella 5 de los metodos que declara:
- clone()
- equals(Object)
- finalize()
- hascode()
- toString()
Ya hemos visto como sobreescribir el comportamiento del metodo toString() en la entrada anterior, y ahora vamos a cambiar el comportamiento del metodo equals(Object).
Este metodo esta diseñado para saber si un objeto es igual a otro objeto. Un ejemplo de esto sería con cadenas de texto:
String una="ejemplo";
String dos="ejemplo2";
String unaBis="ejemplo";
una.equals(dos)==false
una.equals(unaBis)==true
Este comportamiento sería el esperado, pero si lo probamos en objetos que no son de tipo String entonces comprobaremos que el metodo equals no responde a nuestras expectativas...
http://code.google.com/p/cursoj2ee/source/detail?r=15
En el ejemplo anterior se pone de manifiesto que dos alumnos con el mismo nombre e igual DNI no son iguales como objeto. Es decir al compararlos con equals nos devuelve false.
La razón de ello es que la comparación de objetos no se realiza por sus propiedades sino por la implementación del metodo equals en la clase correspondiente. Si no sobreescribimos el metodo equals dos objetos (obtenidos con new ClaseDeObjeto()) nunca son iguales aunque sus propiedades sean iguales.
Diferencias entre igualdad e identidad
boolean iguales=a.equals(b);
boolean identicos=(a == b);
5dia
Ejercicio: Sobreescribir metodo tostring
4 dia
Entender la Sobreescritura de metodos (Override methods ...)
rediseñamos la herencia al comprobar puntos comunes entre diferentes clases
Entender la Sobreescritura de metodos (Override methods ...)
- En el siguiente Servlet (Clase java que extiende de HttpServlet) se imprimen dos objetos que se crean en el mismo Servlet. En concreto se crea un objeto de tipo Alumno y otro de tipo Profe, ambos reciben al construirse un parametro de tipo String con el nombre de cada uno...
- Para imprimir un objeto (de cualquier tipo) se hace de la misma forma que un String, es decir pw.println(objeto+"comentario"+objeto2)
- Cuando se imprime un objeto en realidad se llama al metodo toString() que comparten todos los objetos, y que nos permite imprimir la dirección del objeto y su clase, pero no valores inteligibles para el usuario
- Al sobreescribir este metodo cambiaremos la forma de imprimirse un objeto...
- si intentamos pintar colecciones de objetos (List, Set ...) se imprimiran los objetos contenidos segun la implementacion de toString de cada uno de ellos
rediseñamos la herencia al comprobar puntos comunes entre diferentes clases
Nomenclatura
- Nombres de clases comienzan con mayuscula y continuan con sintaxis de camello
- Nombres de clases de prueba con mayuscula y continuan con sintaxis de camello y acaban en Test
- Nombres de propiedades/objetos/variables comienzan con misnúscula y continuan con sintaxis de camello
- Nombres de métodos comienzan con misnúscula y continuan con sintaxis de camello
- Nombres de paquetes: todas las letras en minúscula
Ejercicios Servlets
¿Qué es una aplicación web y que archivos y configuración son necesarios?
aplicacion/
_______/archivo.html
_______/archivo.jsp
_______/imgs/...
_______/css/...
_______/masjsps/archivo.jsp
_______/mashtmls/archivo.jsp
_______/WEB-INF/web.xml
_______/WEB-INF/classes/es.cea...
_______/WEB-INF/lib/librerias.jar
Ejemplos
¿Cómo crear un servlet?
¿cómo imprimimos los resultados del servlet en la pagina web?
Ejercicios
¿cómo recuperamos los parametros que el usuario nos envia a traves de URLs?
aplicacion/
_______/archivo.html
_______/archivo.jsp
_______/imgs/...
_______/css/...
_______/masjsps/archivo.jsp
_______/mashtmls/archivo.jsp
_______/WEB-INF/web.xml
_______/WEB-INF/classes/es.cea...
_______/WEB-INF/lib/librerias.jar
Ejemplos
¿Cómo crear un servlet?
- Se crea una clase java que herede (extienda) de HttpServlet (javax.servlet.http.HttpServlet)
- se sobreescriben los dos metodos encargados de procesar las solicitudes via GET y via POST
- public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
- public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
- Se reenvia todo lo que pase por doPost a doGet incluyendo en la implementacion del metodo doPost la siguiente linea: doGet(req,res);
- Se escribe la respuesta en el metodo doGet utilizando el objeto Writer a traves del objeto response: res.getWriter()
- Se da de alta el servlet en el archivo de configuración de la aplicación web: web.xml
- Se despliega la aplicación
- Consultamos el servlet en la dirección http://localhost:8090/nombreAplicacion/bienvenida
¿cómo imprimimos los resultados del servlet en la pagina web?
- Accedemos al objeto PrintWriter para imprimir los resultados: PrintWriter pw = res.getWriter();
- Imprimimos lineas con el metodo println("mensaje"): pw.println("
HOLA SOY UN SERVLET
"); - Cerramos el objeto de impresion pw.close();
Ejercicios
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/ciudad y que imprima la palabra SEVILLA
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/academia y que imprima la palabra CEA
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/enlaces y que imprima los enlaces del blog del curso
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/formulario y que imprima este formulario
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/calculadora y que imprima este otro formulario
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/registro y que imprima un formulario con los campos usuario y clave y se envie(atributo action) a la direcion /registrar
¿cómo recuperamos los parametros que el usuario nos envia a traves de URLs?
- Accedemos al objeto request y utilizamos su metodo getParameter("nombreParametroEsperado")
- El valor que retorna se lo asignamos a una variable
- si la variable es diferente de null entonces lo imprimios en el resultado
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/envioFormulario y que imprima los valores nombre y apellidos
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/calcular y que imprima el resultado de los parametros sumando1 y sumando2
- crear otro servlet que responda a la peticion http://localhost:8090/nombreAplicacion/registro y que imprima el resultado de los parametros usuario y clave.
jueves, 15 de enero de 2009
Servlet: objetos implicitos. Application, Session, Request
estilo de desarrollo en java
estandares-de-desarrollo
instalar firebug: complemento para firefox relacionado con comprobaciones y cambios dinamicos del HTML de la respuesta de nuestro programa java j2ee
comienzo de servlets... http://eticom-master-java.blogspot.com/2008/06/viernes-13-junio.html
ejercicio creacion de proyectos y prueba equals
http://eticom-master-java.blogspot.com/2008/05/jueves-15-mayo.html
ejercicio de generacion de proyectos y refactorizacion respaldado por clases
Introducción a MAVEN
descarga de jboss as
instalat subversion
instalar testng
instalar mysql
firefox
f-delicious
f-firebug
http://ceac-j2ee.blogspot.com/2007/11/intalacin-de-herramientas.html
http://groups.google.com/group/eticom-master-java/web/eclipse-ide
http://eticom-master-java.blogspot.com/2008_05_08_archive.html
http://eticom-master-java.blogspot.com/2008_05_11_archive.html
http://groups.google.com/group/eticom-master-java/web?display=list&showdetails=1&sort=rcdate
estandares-de-desarrollo
instalar firebug: complemento para firefox relacionado con comprobaciones y cambios dinamicos del HTML de la respuesta de nuestro programa java j2ee
comienzo de servlets... http://eticom-master-java.blogspot.com/2008/06/viernes-13-junio.html
ejercicio creacion de proyectos y prueba equals
http://eticom-master-java.blogspot.com/2008/05/jueves-15-mayo.html
ejercicio de generacion de proyectos y refactorizacion respaldado por clases
Introducción a MAVEN
descarga de jboss as
instalat subversion
instalar testng
instalar mysql
firefox
f-delicious
f-firebug
http://ceac-j2ee.blogspot.com/2007/11/intalacin-de-herramientas.html
http://groups.google.com/group/eticom-master-java/web/eclipse-ide
http://eticom-master-java.blogspot.com/2008_05_08_archive.html
http://eticom-master-java.blogspot.com/2008_05_11_archive.html
http://groups.google.com/group/eticom-master-java/web?display=list&showdetails=1&sort=rcdate
miércoles, 14 de enero de 2009
Instalacion de herramientas
Suscribirse a:
Entradas (Atom)