Entradas

Mostrando entradas de junio, 2012

CRON , procesos en segundo plano con Spring (SchedulerFactoryBean)

Spring nos aporta muchas utilidades , entre ellas utilidades para correr procesos en segundo plano (demonios). Estos permite configurarlos de manera flexible, indicando cuando deben arrancar, cada cuanto tiempo realizar determinada tarea, etc.... Para ello es necesario meter en el contexto un bean del tipo org.springframework.scheduling.quartz.SchedulerFactoryBean Este bean tiene una propiedad "triggers" en la cual le especificamos que Triggers va a manejar Vamos por partes: Esto es tan sencillo como meter en nuestro ApplicationContext.xml la definicion del bean especificar un trigger :      <!-- Spring Bean para control de crons -->     <bean id="kuyiSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" > <property name="triggers" > <list> <ref bean="accionBatchTrigger" /> <!--REf al bean que sera Trigger--> <!--mete aqui todos

Serializar y Deserializar customizado con Jackson ( bajo Jax-Rs)

Pongamos que tenemos un servicio web con Jax-Rs que acepta como parametro un objeto. Algo asi:       @POST       @Path("persona")       @Consumes(MediaType.APPLICATION_JSON)       @Produces(MediaType.APPLICATION_JSON)       public Response createPersona (Persona per){                     System.out.println("aqui estoy" + per);           //HAgo mi rollo en BBDD, etc..            Persona personaGuardada = bbdd.save(persona);           return Response.ok( personaGuardada ).build();       }  Vemos que acepta un json que intentara parsear a un objeto Persona. Para ello es necesario que tengamos definido el pojo Persona con anotaciones Jaxb: *Nota: en la configuracion de Jaxb le hemos indicado que integre con Jackson el que se encargue de los formatos json. @XmlRootElement(name="persona") @XmlAccessorType(XmlAccessType.FIELD) public class Persona {         @XmlAttribute     private Integer id;     @XmlAttribute           private String name;     @Xm

Split , problemas con pipes "|" y StringTokenizer

Bueno,  pues no se si seran chanchullos, pero el caso es que el otro dia haciendo unas movidas para separar cadenas con pipes "|" y demas y vi algunas cosas curiosas..... SPLIT Y LOS PIPES "|" Por lo visto, el caracter "|" es un caracter especial que no funciona bien con el metodo split. Este metodo lo identifica como separador de letras, asi que lo encuentra despues de cada caracter en un string. Asi por ejemplo si ejecutamos esto:         String cadena = "hola|amigo";         //Probamos con split (no lo hara bien         String []tokenes = cadena.split("|");         System.out.println("Tokens encontrados :"+tokenes.length);         for(int i =0; i<tokenes.length;i++){             System.out.println("tokenes "+i+" -> "+tokenes[i]);         } El resultado es este: Tokens encontrados :11 tokenes 0 -> tokenes 1 -> h tokenes 2 -> o tokenes 3 -> l tokenes 4 -> a tokenes 5 -&g

Cargar ficheros Properties en Spring

Hay  veces que nos gustaria tener la aplicacion configurada para que cogiera ciertos valores al arrancar de un fichero properties  o de un xml, etc... vamos, de algun archivo externo, de forma que si queremos cambiar algun parametro de la aplicacion no haya que volver a compilarla. Por ejemplo, si nuestra aplicacion conecta con una bbbdd mediante hibernate o Jpa, pues sabemos que nuestro fichero persistence.xml estara dentro del war y si queremos cambiar la conexion de la bbdd, debemos cambiarlo en el persistence y volver a generar el war....vamos un rollo.... Spring nos permite expecificar ficheros properties o xml que tomara en cuenta cuando arranque y las cargara en el classpath, de forma que podamos referenciarlas en cualquier archivo interno de la aplicacion. La libreria de Spring ofrece un bean preparado para estas cosas, asi que lo unico que tenemos es que expecificar en nuestro fichero de configuracion de Spring (applicationContext.xml) un nuevo bean del tipo "org.sp

Subir campos Blob a BBDD (Oracle) con Java

Hay veces que queremos subir un archivo a un campo blob de una tabla.... (mas recomendable es dejar el archivo en un servidor y solo almacenar la ruta, pero hay veces que por narices hay que hacerlo asi....asi que voy a explicar como hacerlo. Vamos a hacer un programa que lea un archivo , lo pase a un array de bytes y luego lo inserte en la tabla. Este programa lo que hace es UPDATE del campo Blob en un registro de una tabla que ya existe. Asi que es necesario que exista el row en la tabla, con el campo blob (ya sea vacio o no). Importante: necesitas la libreria con el driver jdbc para oracle ( ojdbc6.jar ) 1 . Lo primero necesitamos un metodo que lea un archivo y lo pase a array de Bytes: import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import oracle.jdbc.Ora

Capitalizar Strings en Java

Capitalizar una palabra, significa poner la palabra con la primera letra en mayusculas y el resto en minusculas . (Vamos las reglas basicas del colegio para nombres propios y cosas asi....). Por ejemplo, este texto: "antonio belmonte" , capitalizado seria "Antonio Belmonte". Aqui os pongo una clase, con metodos estaticos para capitalizar Strings: Para capitalizar cualquier frase entera o texto entero basta con llamar a la funcion capitalize (String text) a secas y esta utilizara los otros metodos para montar la frase. Espero os sea de ayuda: import org.apache.commons.lang.StringUtils; public class FormatUtils {     public static String capitalize (String text){         if(!StringUtils.isEmpty(text)){             StringBuffer sbt= new StringBuffer();             String[] partialText = text.split(" ");             for(int i=0;i< partialText.length;i++){                 if(partialText[i].contains("-")){ //composite words