Spring ROO: Ingeniería Inversa de una base de datos

Como comentábamos en este post que la última milestones de Spring ROO ofrecía soporta para ingeniería inversa de base de datos, pues bien, vamos a ver cómo se haría y algunas peculiaridades de las enitdades que genera Spring ROO.

Si no tenéis configurado el Entorno: Spring ROO + Maven + Spring Tool Suite os recomiendo leer antes este post.

En el post de hoy vamos a importar una base de datos MySQL de la herramienta de gestión de incidencias .

Comencemos ya…

1) Creo una carpeta DBRE_Mantis y desde dentro ejecuto setEnvironment_ROO.bat:

2) Lanzo >roo

3) Creo el proyecto con >project –topLevelPackage es.indra.dbre.mantis

4) Establezco la persistencia: Hibernate con MySQL: >persistence setup –provider HIBERNATE –database MYSQL

5) Edito los valores de conexión a la base de datos en el fichero src/main/resources/META-INF/spring/database.properties (se puede hacer por comandos roo pero creo que es más sencillo editar directamente el fichero):

6) Desde roo reviso si están bien introducidos con: >database properties list

7) Y por fin el comando clave: >database reverse engineer –package ~.dominio –schema mantis este comando me hará ingeniería inversa de la base de datos configurada en database.properties y el esquema indicado a las clases del paquete dominio (dentro del paquete raíz del proyecto):

8) Genero el proyecto Eclipse con >perform eclipse

9) Import el proyecto en STS::

10) Si vamos a cualquier Entidad generado veremos que en la entidad no aparece ningún atributo, sólo una nueva anotación @RooDbManaged:

Spring ROO genera las entidades importadas de BD de forma diferente a las generadas manualmente, y en lugar de crear los atributos en la clase lo hace en el Aspecto

.

De este modo Spring ROO puede hacer reingeniería de forma incremental.

11) Si abro el aspecto veo que contiene los atributos de la Entidad:

Respuestas

  1. […] instalar y configurar un Entorno de Desarrollo Conferencia de OutOfMemoryErrors en SpringOne Spring ROO: Ingeniería Inversa de una base de datos Google Drawings: Prototipado rápido Google recomienda cambiar tu nombre en la red […]

  2. Muy bueno el resumen 🙂

    Mi duda es, que si los atributos están en el fichero *DbManaged.aj correspondiente y el STS sólo me muestra la clase «vacia», ¿Cómo trabajamos con ella?

    ¿Podrias dar un ejemplo de como rellenar los datos de los atributos?

    Igual es una duda de novato, pero no lo acabo de ver 🙂

    1. Si generas el proyecto de Eclipse con perform eclipse (o con mvn eclipse:eclipse) y lo abres verás que los atributos están disponibles aunque estén en el aspecto. Esto es porque los aspectos se «postcompilan» modificando el .class.

      1. Gracias por tus comentarios. Como el proyecto lo había generado desde el STS y aún no se había ejecutado la compilación de aspectos, aún no veia nada al completar el código …

        Muchas gracias!!! 😉

  3. Pregunta, se puede ligar Spring Roo con una BD Firebird?, he estado buscando poder hacerlo sin conseguir nada, tendrá alguien información de cómo hacerlo?.
    saludos.

    1. Has metido el jar del driver en %ROO_HOME%/bin? puedes copiar el error…

      1. Si de entrada pensé que era el driver, descargue el archivo jaybird-2.1.1.jar y lo puse así como comentas pero tenía el mismo problema. Luego buscando un poco en la red encontré que podía meter en el archivo POM.xml la dependencia para que automáticamente MAVEN descargara el archivo y efectivamente lo hiso y lo dejo en la siguiente carpeta:

        C:\Users\pEpE\.m2\repository\net\sf\squirrel-sql\thirdparty-non-maven\jaybird

        La modificación al archivo POM.xml consiste básicamente en poner lo siguiente:
        ———————————

        net.sf.squirrel-sql.thirdparty-non-maven
        jaybird
        2.1.1

        ———————————

        También ya modifique los archivos persistence.xml y database.properties que se encuentran en \src\main\resources\META-INF del proyecto que son los que he modificado cuando hago la conexión a mano de MySQL.
        ———————————–
        código agregado a persistence.xml

        ———————————-

        ——————————————-
        Código agregado al archivo database.properties

        database.password=masterkey
        database.url=jdbc:firebirdsql:localhost/3050:C:\\Users\\pEpE\\Downloads\\pizza\\pizza.fdb
        database.username=sysdba
        database.driverClassName=org.firebirdsql.jdbc.FBDriver
        ——————————————-

        El error básicamente es que no conecta con el archivo de BD para crear las tablas y campos y así establecer el mapeo correcto de las clases con las tablas, eso pienso ya que cuando tenía el mismo error al tratar de hacerlo con MySQL me marcaba exactamente los mismos errores, en MySQL mi error era que no había creado la BD y por lo tanto no podía conectar pero pues como BD para mi gusto es mucho mas completa Firebird y por eso quiero hacer un proyecto utilizándola pero si de plano no puedo tendré que quedarme con MySQL 😦

        Nuevamente gracias por tus comentarios que podrías ayudarme.

      2. Vaya!, yo con Oracle tampoco he podido hacer la ingeniería inversa ni siguiendo los comentarios que aparecen en el Wiki de Spring ROO. Creo que es porque los drivers de Oracle (y Firebird en tu caso) no son OSGi. Si te fijas en el driver de MySQL que viene con la distribución es OSGi (mira el archivo manifest.mf).
        El otro día descargué los fuentes del addon que se encarga de conectar con el driver y empecé a jugar para ver si conseguía solucionarlo temporalmente pero no he podido dedicarle todo el tiempo necesario.
        Te mantendré informado si avanzo…espero que en la release esto esté solucionado 🙂

  4. Buen Día, estoy haciendo un ejemplo sencillo sobre Spring roo (http://abaddon-gtz.blogspot.com/2010/01/primeros-pasos-con-spring-roo-en-spring.html), y todo funciona perfectamente, pero a la hora de ir a la opción de «Nueva Persona», me da el siguiente mensaje «Recurso Solicitado No Encontrado», les escribo por aquí, para ver si me pueden ayudar.

    Muchas Gracias!!!!

  5. Hola, mi principal problema es que me gustaría renombrar las entidades creadas al estilo de Java. Haciéndolo con Refactor de STS, los aspectos no se recrean, y fallan muchas cosas…

    Hay alguna manera de hacer este renombre y que se recreen los aspectos con los nuevos nombres?

  6. Touche. Outstanding arguments. Keep up the good effort.

  7. I do not know whether it’s just me or if perhaps everybody else encountering issues with your site. It looks like some of the written text in your content are running off the screen. Can someone else please comment and let me know if this is happening to them as well? This might be a problem with my web browser because I’ve had this happen before.
    Thanks

  8. I’m really enjoying the design and layout of your website. It’s
    a very easy on the eyes which makes it much more enjoyable
    for me to come here and visit more often. Did you hire
    out a designer to create your theme? Excellent work!

Deja un comentario