Organizar clases del modelo en openxava

Ernesto
2011-11-03
2013-04-09
  • Ernesto

    Ernesto - 2011-11-03

    Hola:

    En la documentación de OpenXava se menciona que todas las clases deben ir dentro del paquete "model" o "modelo". Sin embargo, si una aplicación crece en número de clases (aprox. 100 clases) se vuelve difícil su control si todo está en un sólo lugar. ¿Existe alguna forma de crear otros paquetes dentro del modelo, para agrupar clases relacionadas en OpenXava? Por ejemplo, tener un paquete org.openxava.aplicacion1.model.subpaquete1 y otro org.openxava.aplicacion1.model.subpaquete2?

     
  • Javier Paniza

    Javier Paniza - 2011-11-04

    Hola Ernesto,

    desde OpenXava 4m6 puedes poner las entidades en el paquete que te plazca, ni siquiera han de estar dentro de model o modelo. Dígamos que ahora poner las entidades dentro de modelo es una cuestión de estilo y no un requerimiento técnico de OX. Así que puedes hacer los subpaquetes que quieras sin problemas.


    ¿Quieres una respuesta mejor?Prueba el soporte profesional de OpenXava

     
    • José Ferro

      José Ferro - 2013-04-06

      Hola Javier:
      soy nuevo en OX y he organizado mi paquete así:
      org.openxava.octopussource.model.ahorro

      y creo la clase Ahorro.java

      http://localhost:8888/OctopusSource/modules/ahorro/Ahorro

      Arroja el Siguiente Error:

      org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /xava/module.jsp en línea 66

      63: manager.setSession(session);
      64: manager.setApplicationName(request.getParameter("application"));
      65:
      66: manager.setModuleName(module); // In order to show the correct description in head
      67:
      68: if (manager.isFormUpload()) {
      69: new Module().requestMultipart(request, response, app, module);

      causa raíz

      org.openxava.util.XavaException: Parece ser que ahorro no es una entidad EJB3 ni una clase transitoria del modelo

      Sin embargo cuando la clase, la creo a nivel del paquete "model", funciona correctamente
      esta es mi clase:

      package org.openxava.octopussource.model.ahorro;
      import java.io.;
      import javax.persistence.
      ;
      import org.openxava.annotations.*;
      @Entity
      public class Ahorronew implements Serializable {
      private static final long serialVersionUID = 1L;

      @Id
      @Column(name = "idAhorro", nullable = false)
      @GeneratedValue(strategy=GenerationType.IDENTITY)  @Hidden
      private int idahorro;
      
      @Column(name = "Descripcion", length=50)
      @Required
      private String descripcion;
      
      @Hidden
      @Column(name = "EstadoRegistro", nullable = true) 
           private boolean  estadoregistro;
      
           public int getIdahorro() {
          return idahorro;
      }
      public void setIdahorro(int idahorro) {
          this.idahorro = idahorro;
      }
      public String getDescripcion() {
          return descripcion;
      }
      public void setDescripcion(String descripcion) {
          this.descripcion = descripcion;
      }
      public boolean isEstadoregistro() {
          return estadoregistro;
      }
      public void setEstadoregistro(boolean estadoregistro) {
          this.estadoregistro = estadoregistro;
      }
      

      }

       
      • Javier Paniza

        Javier Paniza - 2013-04-09

        Hola José,

        el problema está en la URL. Deberías usar esta URL:

        http://localhost:8888/OctopusSource/modules/Ahorro
        

        Es decir, con el nombre de la entidad sin el paquete. De hecho, en este caso Ahorro no es el nombre de la entidad sino del modulo (los modulos se definen en aplicacion.xml), lo ocurre es que OX genera un módulo por defecto por cada entidad JPA, para evitar que tengas que escribir XML innecesario en aplicacion.xml


        Ayuda a otros en este foro como yo te ayudo a ti.
        ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

         
  • Federico Alcantara

    Saludos Ernesto:

    org.openxava.aplicacion1.model.subpaquete2

    Eso es enteramente valido. Aún más, en eclipse, puedes crear multiples carpetas de fuentes, de manera que podrías tener org.openxava.application1.model como paquete pero en diferentes carpetas de fuentes.

    Una nota importante, las entidades transient deben estar en paquetes que contengan al menos una entidad concreta, de lo contrario, no son reconocidas por OX.

    En nuestro proyecto tenemos cerca de 25 carpetas de fuentes y sólo en .model y sub paquetes de model cerca de 350 entidades, y aparentan estar bien organizadas. Las ventajas que vemos con multiples carpetas es que cada carpeta representa un area de desarrollo especifico que puede ser asignado a un desarrollador, esto nos evita los tipicos conflictos  entre equipos de desarrollo.

    Espero te sea util,

    Federico

     
  • Ernesto

    Ernesto - 2011-11-04

    Gracias, Javier y Federico. Acabo de reorganizar todas las clases de mi aplicación y todo funciona sin problemas, además de verse mucho más ordenadas :D

    Saludos,

    Ernesto

     

Log in to post a comment.