Ejemplo JavaEE. Tienda Online

por Abr 5, 202010 Comentarios

Este es un proyecto que llevé a cabo en la universidad y que he publicaco con intención didáctica. Es un ejemplo de una aplicación cercana a la realidad en JavaEE, una tienda online.

El proyecto comenzó siendo una asignatura de la universidad, pero conforme fue avanzando me fui involucrando más en ello y fue adquiriendo unas dimensiones que fácilmente acercarían a la aplicación a algo cada vez más orientado a algo real. Al acabar el curso el profesor de la asignatura, Abraham Otero Quintana me propuso perfeccionar el proyecto con la intención de que fuera útil a mucha más gente, conseguir un ejemplo algo más avanzado de lo que se suele encontrar en los manuales.

Funcionalidad de la tienda online en JavaEE

El proyecto consiste en una aplicación web Java EE que cumple con las funciones de una tienda online.

  • Los usuarios pueden adquirir productos y realizar el pago (sin pasarela de pago).
  • Compras con registro o sin registro para evitar tener que hacerse una cuenta.
  • Dejar comentarios sobre los productos.
  • Zona de administración solo para los usuarios con derechos de administración.
    • Gestión de productos a la venta.
    • Gestión de usuarios registrados
    • Consultar historial y estadísticas gráficas de ventas.
    • Gestión de comentarios de los productos.

Las características están más detalladas en la documentación.

Detalles del desarrollo en JavaEE

La aplicación basa su persistencia en el patrón DAO, por lo que es posible implementar varios métodos de persistencia. Por defecto se ha implementado la persistencia contra bases de datos (MySQL) y persistencia contra ficheros serializados en disco.

Durante el desarrollo de la aplicación se ha prestado especial atención a varios aspectos: la seguridad, la concurrencia y finalmente un especial cuidado en la detección de fallos y errores en el funcionamiento del sistema.

En el aspecto de la seguridad nos encontraremos con que toda información enviada por el usuario es validada mediante una librería de seguridad (ESAPI). Por otra parte, todo el sistema de URLs está preparado para que solo sea posible acceder a las páginas de la manera que se espera y no de otra manera. Encontraremos más información sobre las medidas tomadas en la documentación del proyecto.

En lo referente a la concurrencia se han hecho las clases encargadas de la persistencia siguiendo el patrón de diseño Singleton para que no sea posible tener más de una instancia de esa clase. Para la persistencia contra ficheros se han tomado las medidas necesarias para asegurar que los archivos no sean corrompidos realizando escrituras simultáneas.

En la persistencia contra bases de datos se ha usado un nivel de aislamiento adecuado para evitar la lectura de datos confirmados (READ COMMITED). Es de especial interés en lo que a concurrencia se refiere la manera en la que se hace la compra de un carrito y se disminuyen las unidades en el almacén.

Vídeo y documentación de la tienda online en JavaEE

He decidido publicar el código fuente completo en un repositorio de google code GitHub, también dejo las sentencias SQL necesarias para crear la base de datos. He realizado también un escrito como documentación en el que se puede observar el funcionamiento más en detalle de la aplicación. Por último he realizado un videotutorial en el que se explica desde cero como montar la aplicación y todo lo necesario para que esta funcione.

A continuación he dejado disponible toda la documentación necesaria para poder ver el proyecto en detalle.

Descarga del Proyecto desde GitHub

El proyecto inicialmente se dejó disponible en un repositorio de Google Code. Con el cierre de Google Code se ha migrado el proyecto a GitHub. Aunque el tutorial en vídeo que se ha publicado esté hecho para Google Code se puede usar igualmente para obtener el proyecto desde GitHub.

La principal diferencia es que la URL del repositorio es distinta y que el proyecto ya no está dentro de una subcarpeta trunk sino que está en la raíz del repositorio. A continuación se indica la nueva URL del repositorio del proyecto.

https://github.com/JuanDYB/tiendaonlinelpijdyb
Directorio de Checkout: /OnlineShop

Espero que os haya gustado y os haya ayudado este ejemplo de programación con Java EE. La publicación es totalmente desinteresada y con fines didácticos. Si alguien estuviese interesado en utilizarlo para algún otro fin o seguir trabajando en ello me gustaría que me lo comunicase y se podrían publicar las mejoras.

Estoy abierto a cualquier duda al respecto ya sea con un comentario, contactando conmigo mediante el formulario de contacto.

Actualización: El artículo ha sido publicado en JavaHispano por Abraham Otero. Creo que es interesante ver los comentarios que se han publicado allí, entre otras cosas por anotaciones interesantes que se han hecho y que se hagan.

10 Comentarios

  1. José

    En primer lugar, felicitarte por el proyecto. Me estoy introduciendo en este mundo y tu proyecto me está ayudando mucho.

    Sin embargo, a la hora de descargarme los scripts de configuración de la Bd da error y no se puede descargar desde ningún repositorio.

    Me podrías hacer el favor de enviarmelos en un zip o de volverlos a colgar en tu sitio o en GitHub.

    Atentamente.

    Responder
    • Juan DYB

      Hola,
      Muchas gracias por el comentario, he añadido el fichero de modelo de BBDD en formato SQL al repositorio en GitHub.
      Un saludo

      Responder
  2. Luis

    Buenos días, Felicitaciones por este Proyecto, te agradezco poder contar con él, pues estoy aprendiendo de la Programación Web con Java y me está ayudando mucho. Querría pedirte si puedes «subir» el video de configuración de los archivos «xml» de la aplicación, pero sin «tapar» los campos, obviamente que no sean datos de tus «ambientes» de desarrollo, pero con un ejm escrito de lo que realmente iría allí, para poder desplegar la aplicación en Netbeans, en «localhost:8080», a algún dropbox o googledrive ó youtube de manera de poder «bajarlo» sin usar programas de «captura de pantalla mientras corre el video».
    Atentamente. Luis.

    Responder
    • Juan DYB

      Hola Luís,

      En el vídeo se tapan los campos precisamente porque son datos propios de mis configuraciones. Si tienes alguna duda con algún campo concreto te lo puedo aclarar. No obstante has de tener en cuenta que esta app es de hace tiempo y las interfaces de glassfish pueden haber cambiado. Por ello lo importante es comprender todo.
      Un saludo

      Responder
  3. Luis

    Hola, Felicitaciones !!! por el proyecto. Podrías subir un video de la configuración del proyecto, en la parte del pool de conexiones de glassfish, y en los archivos de la configuración web en Netbeans, sin «tapar» lo que va concretamente como ejemplo en cada lugar ?. Me interesa aprender a desarrollar Sistemas de este tipo, y me ayudas a estudiar. Si lo deseas, por alguna aclaración respecto de estos temas, no dudes en enviarme un correo elctrónico. Desde ya muchas gracias, saludos.

    Responder
    • Juan DYB

      Hola,
      Como te he respondido en el comentario anterior si me dices las dudas que tienes al respecto de la configuración te las puedo aclarar.
      Un saludo,

      Responder
      • Luis

        Gracias por tu respuesta:

        Las dudas que tengo respecto a la configuración son las sgtes.:

        Serían:

        -En el web.xml:

        -archivoHistoriales, qué póngo como parameters-value, que
        nombre
        mailPass, idem.
        mailUser
        authMail, creo que va true.-
        mailFrom
        mailPass
        adminMail: va por ejm. la cuenta gmail del admin cierto.
        ([email protected])
        adminPass: va la contraseña de la cuenta del renglón de arriba
        entre paréntesis, correcto ?
        index.jsp
        404
        500
        hostMail
        TSLMail
        hostMail
        Y en gral, todos los items de web.xml si se pudiera con ejemplos,
        no los reales.-

        – Run y Deploy son lo mismo ?

        – En la configuración de Glassfish, cuando creas el pool de
        conexiones:

        En las Propiedades adicionales, borras todas y creas nuevas:

        portNumber: 3306 se entiende bien que es el de mysql.
        databaseName: se entiende que es q447
        Url, se entiende hasta jdbc.mysql// después que va ?
        serverName: va localhost ?
        password: es la passaword de root o del usuario de la bd mysql

        Un saludo, desde ya quedo muy agradecido.

        Responder
        • Juan DYB

          Hola,

          En la documentación del proyecto en PDF pudes encontrar más información al respecto pero básicamente la aplicación está preparada para usar BBDD o almacenamiento en ficheros. Por ello hay varias variables de configuración que según sea BBDD o ficheros se usan para una cosa.
          La configuración de email te la da el servidor SMTP que uses (si se usa TLS o no, nombre, email, contraseña …)
          Lo mismo pasa con la BBDD si la tienes instalada en localhost si que tendrías que poner localhost y el puerto, sino seía una configuración diferente.
          Run y deploy no es lo mismo. Run ese ejecutar la aplicación y deploy es desplegar la aplicación en el servidor de aplicaciones, no es lo mismo una aplicación web que una aplicación de escritorio, una aplicación web es ejecutada por el servidor de aplicaciones
          Un saludo,

          Responder
  4. Elkin

    Buenas tardes.
    Éste proyecto no se puede desarrollar con la versión SE de Java?

    Responder
    • Juan DYB

      Hola buenas,
      La versión de Java SE no incluye los componentes de tipo Servlet y componentes de servidor de aplicaciones.
      Mira bien las diferencias entre las dos versiones. Para aplicaciones de servidor se ha de usar Java EE (J2EE)

      Un saludo,

      Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *