Cómo crear el schema de la base datos con Anotaciones de Hibernate y Spring

A veces es necesario hacer cambios a nuestra base de datos, y siempre estaremos lidiando con las herramientas gráficas o desde la consola, con los cambios en la base de datos, pero existen formas de hacer este trabajo “sucio” mucho más rapido y ahorrando tiempo.

En nuestro caso, usaremos Spring 2.5 y Hibernate 3.3 y MySQL, donde es necesario ya tengas armado los beans de conexión a la base de datos. El siguiente código es un array de cadenas, si en nuestro caso tenemos segmentado los xml de spring, los añadiremos de la siguiente manera.

// array de string para agregar todos tus archivos de configuración de spring
private static final String[] SPRING_CONFIG_FILES =
new String[]{"source/spring/config/xxxxxx-db-context.xml", "source/spring/config/xxxxxxx-param-context.xml"};

A continuación, el código necesario para generar nuestra base de datos, el FileSystemXmlApplicationContext carga el Contexto de la Aplicación, y una vez teniendo el contexto obtenemos el SessionFactory, que en nuestro caso usamos Anotaciones, creamos el bean en base a la clase AnnotationSessionFactoryBean , esto es importante pues en base a esta clase usaremos los metodos dropDatabaseSchema(); para borrar el actual schema (tablas, relaciones , etc) y luego ejecutamos createDatabaseSchema(); para crear el nuevo schema.

// carga el application context de Spring
 FileSystemXmlApplicationContext appContext = new FileSystemXmlApplicationContext(SPRING_CONFIG_FILES);
// Obtiene el bean del session factory
 AnnotationSessionFactoryBean annotationSF = (AnnotationSessionFactoryBean)  appContext.getBean("&sessionFactory");
// si quieres eliminar el schema de la base de datos
 annotationSF.dropDatabaseSchema();
// para crear nuevamente el schema de la base de datos
 annotationSF.createDatabaseSchema();

Los archivos de configuración de Spring, deben lucir de la siguiente manera, hay que destacar el hibernate.dialect donde indicamos el dialecto que usaremos para crear el schema, en el caso de MySQL puede ser MySAM o InnoDB, luego el parametro hibernate.hbm2ddl.delimiter que también indicamos el tipo de tablas que usaremos en mi caso usaré type=InnoDB.

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${datasource.classname}" />
        <property name="url" value="${datasource.urldb}" />
        <property name="username" value="${datasource.userbd}" />
        <property name="password" value="${datasource.pass}" />
    </bean>
 
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
          <list>
              <value>Clase1</value>
              <value>Clase2</value>
          </list>
        </property>
        <property name="hibernateProperties">
           <props>
                <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
                <prop key="hibernate.dialect">${datasource.dialect}
                </prop>
                <prop key="hibernate.show_sql">${datasource.showsql}</prop>
                <prop key="hibernate.hbm2ddl.delimiter">${datasource.delimited}</prop>
            </props>
        </property>
      </bean>

JavaFX sepulta Swing en Java 7

javafx_logo_color_1

Me quedado algo sorprendido  de la noticia que encontramos en JavaHispano y InfoQ, donde nos cuentan Sun eliminó completamente de Java 7 el conocido Swing, para aplicaciones de escritorio desarrolladas en Java.

Se comenta que también “han surgido dos fork diferentes basados en el código del proyecto original (Beter Swing Application FrameworkSwing application framework fork) , donde la intención es seguir un “Swing Application Framework” al margen del JDK 7 y sin la intervención de Sun”.

http://www.infoq.com/news/2009/09/java7_m5

Entrevista a Jay Balunas lider del proyecto RichFaces

Dzone estubo reunido con Jay Balunas, desarrollador core de Jboss y lider del proyecto Richfaces, el componente AJAX para Java Server Faces (JSF). Jay tambien es co-autor del reciente lanzamiento DZone RichFaces Refcard . En esta entrevista, Jay habla sobre los recientes cambios en el proyecto de RichFaces, asi como una nueva serie de caracteristicas de JSF 2.0 que se apoya en el reciente lanzamiento de RichFaces 4.0.

Algunos aspectos interesantes de la entrevista, habla sobre el nuevo logo de RichFaces, del cual ya hablamos en este blog meses atras, también toca el tema sobre que va pasar con las versiones anteriores a RichFaces 4, donde dijo que a partir de septiembre empieza el modo mantenimiento en el branch 3.3.x, asi obligando, a la mayoria a mudarse a RichFaces 4.0

Nos da unos tips a los que desean colaborar con el desarrollo en RichFaces, empezando por ayudar en los foros, probando las Alfas y aportando nuevas ideas.

Entrevista completa

Lo Nuevo de Spring 3.0 RC1

springsource

Hace poco el equipo de Spring Source liberó Spring 3.0 RC1 y viene con muchas nuevas características interesantes, para mi una de las mas interesantes es que ya viene con soporte para Java 6 y completamente basado en Java 5, ya era hora !. Me tomado el permiso de pegar la traducción que hizo Dos Ideas.

  • Completamente basado en Java 5. Esta la primer versión de Spring que necesita Java 5 o superior para funcionar, y que utiliza la sintáxis de Java 5 en todo el API de Spring, y también en su implementación. Por ejemplo, el API del BeanFactory retorna instancias tipadas con generics cuando es posible, y un ApplicationListener puede declarar tipos de eventos específicos con generics. En comparación, Spring 2.5 (la versión actual de Spring) todavía es compatible con el JDK 1.4, aunque mucha funcionalidad de alto nivel se construía en Java 5.
  • Lenguaje de expresiones de Spring (SpEL – Spring Expression Language). Un parser de expresiones para usar en la definición de los beans, que permite referenciar a estructuras anidadas (por ejemplo, propiedades de otros beans), y también a estructuras del sistema (por ejemplo, variables de entorno) usando la sintáxis común #{…} en el valor de las propiedaes de un bean. Esto también sirve como base para otras características basadas en expresiones en otros proyectos de Spring.
  • Soporte extendido para componentes basados en anotaciones. Se incluye el concepto de clases de configuración y métodos de factory anotados – ¡las características fundamentales del proyecto Spring JavaConfig finalmente están disponibles en Spring!. Sprint también permite inyectar valores de configuración a través de expresiones @Value, y referirse a valores de la configuración usando expresiones dinámicas #{…} o estáticas ${…}.
  • Modelo de estereotipos. Permite crear anotaciones “de atajo” a través del uso de meta-anotaciones. Por ejemplo, para determinar scopes predeterminados o características de transacción predeterminadas en estereotipos propios. Imaginen una anotación propia @MiServicio que indica @Service, @Scope(“request”) y @Transactional(readOnly=true) usando una única anotación. Este es el principio de No Repetirse aplicado al uso de anotaciones de componentes.
  • Anotaciones de inyección de dependencias estándar. Spring 3.0 provee un soporte inicial para el JSR-330 specification for Dependency Injection in Java- inyección a través de anotaciones usando javax.inject.Inject y sus calificadores asociados y modelo de proveedores, como una forma alternativa a la anotación @Autowired propia de Spring. Tengan en cuenta que el JSR-330 todavía no está terminado; el soporte para javax.inject en Spring se irá completando a medida que madure la especificación.
  • Modelo de validaciones declarativo basado en anotaciones de restricciones. Configuración al estilo de Spring de un proveedor de JSR-303 Bean Validation (como ser, Hibernate Validator 4.0). Spring 3.0 viene con una opción para hacer validaciones basadas en anotaciones en Spring MVC, exponiendo una vista unificada cuando no se cumplen las restricciones. Tengan en cuenta que el JSR-303 está próximo a terminarse, aunque todavía puede tener modificaciones.
  • Soporte para REST extendido. Soporte nativo para REST en Spring MVC, como ser mapeos de peticiones REST, extracción de variables URI a través de parámetros @PathVariable, y resolución de vistas guiadas por la negociación del contenido. Imaginen Spring MVC 2.5 con soporte de primera clase para REST – y manteniendo en enfoque de MVC. Hay soporte para el lado del cliente de REST a través de la clase RestTemplate.
  • Mapeo Objeto/XML (OXM). Tal como se usaba en Spring Web Services, ahora dentro del núcleo de Spring Framework. Abstracciones para el marshalling y unmarshalling con soporte directo para JAXB 2, Castor, etc. Se provee opciones de integración para soporte de contenidos XML en Spring MVC y Spring JMS.
  • Soporte para Portlet 2.0. Spring MVC soporta completamente los entorno de Portlet 2.0 y el nuevo modelo de recursos y eventos de Portlet 2.0. Se incluyen facilidades de mapeo para peticiones de portlet típicas: @ActionMapping, @RenderMapping, @ResourceMapping, @EventMapping.
  • Nuevo sistema de scheduling. Nuevos mecanismos de TaskScheduler y Trigger con soporte estilo cron, alineados con el mecanismo de Spring TaskExecutor. Spring 3.0 provee un namespace que soporta anotaciones @Async y @Scheduled. Esto se puede ejecutar sobre pooles nativos de hilos o en pooles manejados por Servidores de Aplicaciones, incluyendo soporte para los servidores de aplicaciones Java EE más populares.
  • Y por último, soporte inicial para Java EE 6. Spring 3.0 soporte el uso de JSF 2.0 y JPA 2.0 dentro de Spring, junto al soporte de JSR-303 y JSR-330. Se irá incluyendo soporte para otras tecnologías de Java EE 6 (como Servlet 3.0) a medida que se vayan concretando los productos.

Bridge en VirtualBox para tus máquinas virtuales

virtualbox-logoSi no conoces que es  Virtual Box es la versión libre para virtualizar máquinas (Virtualización GPL).

Pero que es Virtualizar?

Virtualizar básicamente es eliminar el hardware de una máquina o servidor y substituirlo por un software que lo emule, de forma que un sistema operativo pueda “hablar” con este hardware simulado o emulado como habla con el hardware real.

Para que me sirve a mi?

Si eres un estudiante o un profesional, las respuestas son muchas, te las resumo aquí.

  • Para probar sistemas operativos, sea Linux o Windows
  • Para emular ambientes bajo control y testeo ( o pruebas)
  • A nivel educativo, si quieres enseñar a alguien a instalar algun SO
  • Solo tienes un Equipo (o Servidor) y necesitas a la fuerza várias máquinas
  • En tu empresa, escasez de equipos y tus usuarios necesitan 2 o más máquinas para su trabajo.

Configurando un Puente

A veces ocurre que queremos tener varias máquinas virtuales en nuestra computadora, sea para emular una pequeña red o porque solo tenemos una tarjeta de red, entonces Virtualbox por defecto nos crea una red privada (NAT), donde tus máquinas virtuales pueden comunicarse entre ellas y acceder a Internet si la maquina que aloja las máquias virtuales tiene acceso a Internet, pero si queremos utilizar nuestra máquina para comunicarnos con todas nuestras máquinas virtuales o conectarnos por SSH en el caso de Linux tendremos que tener una configuración especial, un Bridge o Adaptador PuenteInterface Anfitrión (Simulación de una red real, el Host puede enviar datos al invitado y viceversa, se puede conectar a la red. Se tiene que crear una interface de red virtual en el Host anfitrión por cada tarjeta (interface) de red que use(n) la(s) maquina(s) virtual(es)). Puedes ver una explicación más extensa aquí.

La configuración en VirtualBox instalado en Ubuntu es así …

virtualLinux

Y Para la configuración de VirtualBox en  Windows, es similar la siguiente.

virtualWindows

Meld para comparar Archivos en Linux

Estoy segura que en mas de una ocasion te has encontrado en la situacion en la que tienes que comparar ya sea un archivo o directorio para identificar cuales cambios ha sufrido. Pues en Windows contamos con varias herramientas de este tipo que te ayudan en un 2 por 3, y linux tampoco se queda atras, existe Meld que te va a resolver en estos casos, pero no solo eso, lo que me ha gustado de esta herramienta es que te permite hacer los diff y merge hasta con 3 recursos!! simplemente genial.

Si quieres tener mas informacion y empezar a probarlo, puedes descargarlo de aqui

Visualizar Varios Logs en una sola terminal

Seguramente alguna vez tenido la necesidad de dar seguimiento a los logs o actividad de una que otra aplicacion en tu pc y por lo general lo que hacemos y acostumbramos es abrir varias pestañas o solapas o varias terminal para poder ver los registros…

 $ tail -f /usr/local/jboss/server/boot.log
 $ tail -f /var/log/auth.log

Ahora podemos hacer uso de multitail, que es una mejora de nuestro ya usado comando tail, esta se comporta de la misma manera que un tail -f,este nos permite visualizar en una sola ventana multiples logs, nos hara la vida mas facil

Multitail

Multitail

Para que puedas hacer uso de ella primero tienes que instalarlo

 apt-get install multitail

.
Una vez hayas ejecutado este primer paso, es hora de trabajar con el , en tu terminal solo tienes que escribir lo siguiente

 multitail /usr/local/jboss/server/boot.log /var/log/auth.log

y asi puedes ir agregado las ubicaciones de los ficheros que deseas visualizar. Posteriormente veremos otros usos de este genial comando

Herramientas para el control de calidad de tu código

Con los años uno va dándose cuenta lo importante que es la calidad del código que uno escribe, para “todos” los lenguajes de programación existen herramientas  de control de calidad, la calidad del código habla por nosotros, si realmente conocemos la sintaxis del lenguaje o cual es nuestra percepción del POO.

Pero a los que a veces, tenemos malos hábitos de programación (me incluyo) , existen herramientas interesantes, para diferentes metodologias de desarrollo que siempre nos son útiles y completamente integrables como con Maven2, Ant y Eclipse.

Es importante que nuestro código sea de buena calidad, o lo mas cercano posible, eso va hacer que la mantenibilidad del código y ponerle los cámbios más fáciles a otros futuros programadores que les toque lidiar con nuestro código. Estoy consciente que existen más, si puedes aportar para mejorar este post, se agradece.

Cobertura

cobertura-report-main

Cobertura (http://cobertura.sourceforge.net/) es una herramienta libre (GPL) escrita en Java, que nos permite comprobar el porcentaje de código al que accedemos desde los test. Es decir, Cobertura nos permite saber cuanto código estamos realmente probando con nuestros test.

De esta forma Cobertura se convierte en una potente herramienta de trabajo, ya que lo podemos usar como medida de calidad (mientras más código tengamos probado, más garantías tenemos de que podemos hacer refactorizaciones sin peligro).

Además Cobertura también nos indica la complejidad ciclomática de McCabe (http://en.wikipedia.org/wiki/Cyclomatic_complexity). Esto nos dice como de “complejo” es un método. Esto nos puede servir para orientar nuestros test y probar primero las piezas más complejas, o incluso nos puede hacer plantearnos una refactorización para bajar la complejidad del código.

FindBugs

FindBugs es una herramienta opensource desarrollada por la Universidad de Maryland. Desarrollada en Java, tiene una interfaz simple pero efectiva. Gracias a esta herramienta se puede incrementar el rendimiento de una aplicación además de eliminar bugs potenciales.

FindBugsSummary

http://findbugs.sourceforge.net/

Checkstyle

Esta herramienta que inicialmente fue desarrollada para  validar que nuestro código Java se ajustaba a unas conveciones de códificación, se ha ido ampliando con nuevas funcionalidades que la convierten en una estupenda herramienta para realizar el analisis estático de nuestro código Java. Una de las principales aportaciones de esta nueva versión es que añade soporte para Java 1.5.

checkstyle1-fig1

http://checkstyle.sourceforge.net/

Fuentes

FindBugs, Cobertura, Checkstyle

Las 10 habilidades más importantes para los programadores del futuro

logo

Uno de mis blog’s/wikis favoritos, donde he aprendido mucho, y tal vez el artículo que más me gusta, cito la introducción.

En la siguiente lista veremos las 10 habilidades que deberíamos aprender para que nuestro currículum sea relevante por los siguientes 5 años. Esta lista no es completa ni cubre algunos nichos de mercado (como ser los mainframes). Sin embargo, si aprendés al menos siete elementos de esta lista no te vas a equivocar.

http://www.dosideas.com/actualidad/503-las-10-habilidades-mas-importantes-para-los-programadores-del-futuro.html

Integración Mylyn con Trac

Trac_Logo_512x512Mylyn es la herramienta perfecta para los trabajos de colaboración, es la pieza que cierra el circulo. Mylyn es un plug-in de Eclipse que permite manejo de tareas e integra las tareas de cualquiera de los “trackers” más famososo del mercado por medio de conectores, donde integramos a la perfección con eclipse.

En este caso vamos a integrar TRAC, es mi favorito, lo bueno de trac es que es multi proyecto, no estoy seguro si Bugzilla lo es.

Lo primero que debemos instalar es Mylyn, Eclipse 3.5 Ganimede ya lo trae integrado, creo que desde la versión 3.4, luego debemos instalar el conector TRAC y por supuesto, tener ya instalado y configurado un TRAC en tu máquina.

Tambíen debemos tener instalado el plug-in para xml-rpc en TRAC.

Instalación de Herramientas

Primero debemos instalar lo necesario.

Pasos de Instalación

Después de la instalación de todas las herramientas, creamos el repositorio, una vez nos pida los datos para conexión, en la pestaña de Configuración Adicional, deberiamos seleccionar XML-RPC, pues esto permite una mejor integración que la conexión web.

part1-repository

(more…)