Mostrando entradas con la etiqueta java. Mostrar todas las entradas
Mostrando entradas con la etiqueta java. Mostrar todas las entradas

1 oct 2013

REST en Java

Hoy toca probar REST y como (de bien) se lleva con Java. Para ello vamos a ponernos un poco en situación.

¿Qué es REST?

REST son las siglas de REpresentational State Transfer, es un estilo de arquitectura de aplicaciones software que está basado en estándares web y en protocolos HTTP. En esta arquitectura todo son recursos, y se puede acceder a estos recursos usando métodos estándares de HTTP.

En una arquitectura REST normalmente se dispone de un servidor REST que ofrece acceso a los recursos y un cliente que accede y modifica estos recursos. Cada uno de los recursos debe tener soporte a las operaciones HTTP más comunes, que comentaré más adelante, y se identifican de manera global, normalmente a través de URIs.


La arquitectura REST permite que los recursos tengan distintas representaciones (texto, XML, JSON, RSS,...) por lo que el cliente puede solicitar la representación que más le convenga mediante el protocolo HTTP.


Los métodos HTTP que soporta REST son los habitules de peticiones estándar HTTP, PUT, GET, POST y DELETE. Estas operaciones se podrían explicar de la siguiente manera:

  • PUT: Crea un nuevo recurso, por lo que nunca se podrá realizar una consulta a través de este método.
  • GET: acceso de lectura al recurso, por lo que nunca se puede modificar usando este método.
  • POST: Actualiza un recurso existente o crea uno nuevo.
  • DELETE: Elimina un recurso.
Entonces,

19 feb 2013

Configurar Log4j para trazar en Syslog (Ubuntu 12.04)

Hoy vamos a hablar de Log4j, una vez más (y contando)... en el trabajo he necesitado realizar modificaciones en el proyecto para conseguir algo que antes no era necesario pero ahora es fundamental... seguro que os suena de algo.

El tema es que la aplicación dispone de un mecanismo de auditoría para registrar las acciones de los usuarios (una especie de pilla-pilla), este mecanismo traza a un fichero (audit.log) este fichero tiene un formato para poder ser consultado sin problemas desde un visor de archivos estándar, pero se quiere que sea una aplicación externa y en remoto la que consulte y explote los datos que se trazan, así que ha habido que realizar cambios para que, además de a ese fichero, realice logging en el syslog de sistema, lo cual nos lleva al título de este post...

4 oct 2011

Vaadin Spring Archetype made by me :D

Hace no mucho tiempo me puse a trabajar con Vaadin para ver como podía encajar en alguno de los proyectos que está desarrollando la compañía donde estoy trabajando ahora, comprobé que la arquitectura encajaba perfectamente con lo que estaba buscando para conseguir compatibilidad con diversos navegadores y sus distintas versiones, así que me puse manos a la obra y empecé con el típico tutorial rápido que tiene todo framework.


Tras realizar el tutorial comencé a incluir algo más de complejidad, por decir algo, de hsqldb para persistencia de datos pasé a mysql y posteriormente a Oracle XE, me basé en anotaciones JPA para realizar la persistencia de una manera transparente a la base de datos que se quisiera utilizar, posteriormente pensé en introducir Spring como framework de soporte para el "negocio" y ante la odisea que suponía el tener que andar con tanto jar por ahí suelto, decidí incluir Maven para gestionar las dependencias de manera eficiente, así que me puse a buscar y encontré que la gente de Vaadin tenía un arquetipo para crear proyectos con Maven, así que para que dar más vueltas, lo usé y generó un proyecto que contenía las dependencias necesarias para empezar a trabajar con Vaadin. Pero el problema vino cuando me puse a incluir las dependencias de Spring, que si spring-tx, spring-beans, spring-context, spring-aop, ... y entonces decidí realizar mi aporte a la comunidad.


El aporte es un arquetipo maven que genera un proyecto Vaadin con Spring y que he publicado en googlecode. Toda la información está disponible en la página del proyecto así que para que enrollarme más si puedo pasaros directamente el enlace para que juguéis con el... 


El enlace es http://code.google.com/p/vaadin-spring-archetype/ cualquier opinión para mejora o porque no termináis de ver como tira el arquetipo, será bienvenida.


Un saludo y a disfrutar

Uso de variables de Entorno con Spring


Hoy he tenido que pelearme con la configuración de Spring para poder desplegar una aplicación que ataca a una base de datos en diversos JBoss, con distintos esquemas de base de datos por usuario, así que he echado a volar mi imaginación y en lugar de utilizar diversos archivos de propiedades he decidido usar variables de entorno (que ya están definidas por requisitos de aplicación) esto aparentemente sencillo (al final lo era) se ha convertido en una odisea digna del propio Ulises, bueno no he tardado 20 años con dar con la solución, pero me ha costado un ratillo.

He empezado por lo sencillo (PropertyPlaceHolderConfigurer) y he pensado... "Pues si pongo el nombre de la vairiable de entorno... esto tiene que tirar si o si..." PUES NO!!! Navegando por los interneses he dado con varias páginas que me podían ayudar, pero nada, al final he hecho un "popurrí" y la cosa ha quedado tal que así:
  • Configuración del PropertyPlaceHolderConfigurer de spring:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="searchSystemEnvironment" value="true"/>
<property name="locations">
<list>
<value>classpath:application.properties</value>
<value>classpath:resources.properties</value>
</list>
</property>
</bean>
  • Configuración del DataSource
<bean id="dataSourceConfiguracion" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="oracle.jdbc.OracleDriver" />
<property name="jdbcUrl" value="${DB_URL}" />
<property name="minPoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="initialPoolSize" value="10" />
<property name="idleConnectionTestPeriod" value="30000" />
<property name="testConnectionOnCheckin" value="true" />
<property name="preferredTestQuery" value="SELECT 1 FROM DUAL" />
<property name="user" value="${DB_USR}" />
<property name="password" value="${DB_PWD}" />
</bean>

En esta configuración DB_URL, DB_USR y DB_PWD están definidas como variables de entorno a nivel de usuario.

Espero que os sirva de ayuda.

Un saludo y a disfrutar!


1 abr 2011

Grails - El Santo Grial del Desarrollo rápido (Parte II)

Vamos a continuar con la serie de Grails, si recordáis en la parte I de esta serie empezamos a crear una aplicación que servía para gestionar los contactos. Al final de la entrada anterior se decía que había que hacer click en ContactoController, pero porque no hacer las cosas algo mejor, es decir, porque no introducir una pantalla de login y un menú, y si además ponemos una gestión de usuarios y permitimos dar de alta, modificar y eliminar usuarios, habremos realizado una aplicación que tendrá más aspecto de aplicación.

Esto es justo lo que vamos a hacer en esta parte de la mini-serie.

Vamos a comenzar paso a paso nuestra “nueva” aplicación de Contactos.
  1. Creación de los usuarios, grupos y permisos.
Para este proceso vamos a utilizar un plugin de los diversos plugins que posee grails (http://www.grails.org/Plugins), en concreto uno llamado Stark-Security. Ahora bien, y ¿cómo utilizo un plugin? Pues muy sencillo, simplemente hay que instalarlo, y para instalarlo hay que ejecutar un simple comando de grails.
grails install-plugin stark-security
Al ejecutar este comando tenemos la siguiente salida por consola:
grails install-plugin stark-security
Welcome to Grails 1.2.0 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /Users/javi/java/grails-1.2.0

Base Directory: /Users/javi/proyectos/grails-howto-series/agenda
Resolving dependencies...
Dependencies resolved in 1433ms.
Running script /Users/javi/java/grails-1.2.0/scripts/InstallPlugin.groovy
Environment set to development
Reading remote plugin list …
Plugin list out-of-date, retrieving..
[delete] Deleting: /Users/javi/.grails/1.2.0/plugins-list-core.xml
[get] Getting: http://svn.codehaus.org/grails/trunk/grails-plugins/.plugin-meta/plugins-list.xml
[get] To: /Users/javi/.grails/1.2.0/plugins-list-core.xml
....................................................
[get] last modified = Wed Feb 02 03:16:38 CET 2011
Reading remote plugin list ...
Plugin list out-of-date, retrieving..
[delete] Deleting: /Users/javi/.grails/1.2.0/plugins-list-default.xml
[get] Getting: http://plugins.grails.org/.plugin-meta/plugins-list.xml
[get] To: /Users/javi/.grails/1.2.0/plugins-list-default.xml
......................................................................................
[get] last modified = Thu Feb 10 06:22:21 CET 2011
[copy] Copying 1 file to /Users/javi/.grails/1.2.0/projects/agenda.parte2/plugins
Installing plugin stark-security-0.4.3
[mkdir] Created dir: /Users/javi/.grails/1.2.0/projects/agenda.parte2/plugins/stark-security-0.4.3
[unzip] Expanding: /Users/javi/.grails/1.2.0/plugins/grails-stark-security-0.4.3.zip into /Users/javi/.grails/1.2.0/projects/agenda.parte2/plugins/stark-security-0.4.3
Executing stark-security-0.4.3 plugin post-install script ...
Plugin stark-security-0.4.3 installed
Plug-in provides the following new scripts:
------------------------------------------
grails stark-security-install-full
grails stark-security-install-without-dao
Si os fijáis en las dos últimas líneas de la salida anterior, veréis que este plugin ofrece dos nuevos comandos, el que nos interesa es stark-security-install-full, así que ahora tenemos que ejecutar el nuevo comando que nos ha aportado este plugin.
grails stark-security-install-full


23 mar 2011

Configurar Spring para uso de Datasources JNDI en JBOSS 6.0.0

He comprobado que crear DataSource JNDI para su uso con JBoss en una aplicación basada en Spring tiene tela marinera, en concreto con Spring 3.0.3.RELEASE, si además añadimos un par de frameworks más...


Hoy me he encontrado con la problemática de configurar un DataSource, bueno realmente era alguno más, pero la solución se aplica a uno y luego todos a disfrutar del "Cut&Paste", despues de googlear y goolglear he visto que no hay ningún sitio en el cual te digan de forma clara como hacerlo, así que he decidido intentar ponerlo yo en unas pocas palabras, así que vamos a ello.


Lo primero que hay que hacer es crear un archivo XML en $JBOSS_HOME/server/default/deploy/ que siga la nomenclatura <nombre_datasource>-ds.xml el contenido del archivo debe ser como el siguiente (en esta configuración se ha definido un pool con un mínimo y máximo):

26 ene 2010

Spring ROO - ¿Competencia de GRAILS?

En mi afán de probar nuevos frameworks que surgen en el ámbito del Software Libre, me encontré hace tiempo, no mucho la verdad, con este framework de desarrollo rápido de Spring, si queréis podéis ver la información (en inglés) de Spring Roo en la web oficial de SpringSource.

Lo primero que se me vino a la mente fue... ¿Cómo es posible que Spring, habiendo comprado G2One recientemente, publique un framework que puede hacer la competencia a GRAILS? Y la verdad es que aún me lo sigo preguntando, pero poco a poco veo el motivo, aunque aún lo veo un poquito lejos.

Pero Spring Roo tiene las mismas bonanzas que GRAILS y desde mi punto de vista alguna otra cosa muy interesante, como son por ejemplo:
  1. Usa AOP.
  2. Totalmente integrado con Maven.
  3. Es rápido, muy rápido en ejecución.
 Pero también tiene alguna cosa mala, como por ejemplo:
  1. Solo está la primera versión, por lo que le falta uso por parte de la comunidad.
  2. Hay que hacer prácticamente todo desde la consola de Roo.
En próximas entregas del blog iré poniendo algo más sobre este framework, de hecho, en breve veréis un entradas similares a la serie de GRAILS, así podemos comparar con un ejemplo.

Un saludo y a disfrutar!!!

14 ene 2010

GRAILS - El santo grial del desarrollo rápido (Parte I)

Hoy toca algo tecnológico, bueno hoy y algún que otro día más con esta serie.
Algunos diréis que ya era hora, pero el trabajo es lo que tiene, quita tiempo para hacer estas cosas, así que vamos a hacer un pequeño MINI-HOWTO, para poner en marcha una aplicación con este framework de desarrollo rápido, pero primero...
1. ¿Qué es GRAILS?

Grails es un framework para desarrollo rápido de aplicaciones desarrollado sobre Groovy. Grails pretende ser un framework altamente productivo siguiendo dos paradigmas del desarrollo rápido como son "Convention over Configuration" (CoC) y "Don't Repeat Yourself" (DRY), proporciona un entorno de desarrollo estandarizado y oculta la mayoría de los detalles de configuración al desarrollador.
Grails ha sido impulsado principalmente por la empresa G2One, que fue adquirida por SpringSource en noviembre de 2008.
2. ¿De dónde me descargo GRAILS?

Pues fácil y sencillo de su página grails.org, en su zona de descargas está disponible la versión 1.2 del framework.
En su página hay muchos tutoriales y artículos que os servirán de ayuda para dar los primeros pasos. Pero voy a intentar que os saltéis varios de ellos con esta serie de HOW-TOs.
3. Configurar la herramienta:

Lo primero de todo debéis ir a la dirección que os he dicho en el punto 2 y os descargáis el framework, tras esto hay que descomprimirlo en algún lugar que se, yo soy usuario de Linux y de MacOS por lo que usaré la nomenclatura de estos sistemas operativos para referirme a creación de directorios y temas de variables de entorno.

Después de descomprimirlo lo que tenemos que hacer es establecer la variable de entorno $GRAILS_HOME que apunte a la carpeta que acabamos de descomprimir y añadir $GRAILS_HOME/bin al $PATH.
4. Crear el proyecto
Esto es de las cosas que más me gustan de este entorno de desarrollo. Una vez configurada la herramienta, todo lo que tenemos que hacer es ir a una carpeta en la que queramos crear el proyecto, por ejemplo, una carpeta que crearemos para esta serie "grails-howto-series" y ejecutamos el siguiente comando:

grails create-app agenda