miércoles, 23 de julio de 2014

Backbone (Model)

En esta entrada voy hablar de backbone una libreria MVC para JavaScript, desde la gran separacíon entre el FrontEnd y Backend, estan surguiendo una monton de librerias de para FrontEnd (Backbone, AngularJs, Ember, ...). En esta ocasión voy hablar de Backbone.

Backbone es una librería que nos permite construir apliaciones web en javascript siguiendo el patron MVC. Como bien dice el nombre de la librería nos proporciona la columna vertebral de nuestra aplicación web. De tal modo que la libreria esta formada por 4 clases:


  • Model
  • Collection
  • View
  • Route

Model


Los modelos son los encargados de almacenar los datos de tu aplicación. como simepre vamos a ver un ejemplo que es la mejor manera de verlo.


Usuario = Backbone.Model.extend({
 initialize: function(){
       console.info('Creado un usuario');
 }
});


Con esto ya tenemos una clase del modelo de backbone y ademas se ha hecho una extensión del metodo initialize que escribera por la consola "Creado una usuario",cuando hagamos una instacia de la clase Usuario saldra por consola el mensage del metodo initialize.


var usuario = new Usuario({nombre : 'Pepe', apellidos : 'Perez Lopez'});


Con esto ya tenemos un objecto usuario con unos datos a vamos a ver algunos metodos de la clase Model de backbone:

  • get
  • set
  • change
  • save
  • destroy
   
Los dos primero (get, set) métodos nos permite obtener o modificar el valor de un atributo.


console.log(usuario.get('nombre'));

usuario.set({edad : 19});

console.log(usuario.get('edad'));


El metodo change no permite escuchar cuando se produce un cambio en el modelo


usuario.bind('change:nombre', function(target, valor, options){
   //Podemos acceder a la variable interna
   var old = this.previousAttributes().nombre;
   console.log('Modificado nombre a ' + valor + '. Antiguo valor:' + old);
});

usuario.set({nombre : 'Jose'});


Los últimos métodos (save, destroy) son los encargados de sincronizar el modelo con el servidor, para sincronicar con el servidor hay que rellenar el atributo urlRoot del modelo para saber la direccion donde tiene que hacer la petición backbone.

Una cosa que tenemos que tener muy en cuenta es que backbone nos dice que cada modelo tiene que ser único es decir que tiene que tener una campo identificador 'id', en caso que nuestro modelo no tiene una campo id, podemos indicar a la clase Model de backbone cual es el campo identificador, para eso tenemosq que modificar el valor idAttribute del modelo.

Todo esto es para cuando un modelo tiene el campo identificador (id o idAttribute ) a null, el método save va hacer una llama POST al servidor, en caso de esta relleno se hace un PUT, cuando llamamos al metodo destroy se hace DELETE

Con esto tenemos la base para crear modelos de backbone, os envito a ver todos los métodos que tiene la clase Model de Backbone.

martes, 17 de junio de 2014

RestGenerator (Generador de servicios rest)

Hola

En esta entrada voy hablar sobre el generador que he creado para crear servicios rest desde una tabla de base de datos. RestGenerator es una herramienta de RAD (rapid application development). La idea principal de RestGenerator es la siguiente:







Lo que hace rest generador es leer la tablas de la base de datos y crear un proyecto de servicio rest con las operacion CRUD de cada una de la tablas.

El proyecto que generar utiliza la siguiente tecnologías:
  1. Jersey
  2. Spring
  3. Mybatis
RestGenerator es un proyecto que esta basado en Maven, las únicas restinciónespara poder usar el generador son la siguientes:
  1. Java (1.6 o superior)
  2. Maven 3
El proyecto esta formado por un plugin y un arquetipo de maven y la mejor forma de entender Restgenerator es hacer un prueba, como simpre el proyecto lo tengo github enlace además en Readme.md tiene la explicación de la instalación y uso.

Cualquier duda sobre el generador preguntarme.




jueves, 5 de junio de 2014

Jersey 2 con Jboss 6.1

Hola

En esta entrada voy hablar como configurar Jboss 6.1 para funcionar con Jersey 2, Jboss tiene como implementación de JAX-RS RestEasy que pertenece a Jboss (lógico que use esta implementación), lo que hay que hacer es desactivar el módulo de JAX-RS para eso tenemos que ir al fichero module.xml:

${JBOSS_HOME}/modules/system/layers/base/javax/ws/rs/api/main

Y comentar la siguientes lineas:

 <resources>
        <!-- Disable the next line Para coger la version JSX-RS 2.0-->
        <!-- <resource-root path="jboss-jaxrs-api_1.1_spec-1.0.1.Final-redhat-2.jar"/> -->
        <!-- Insert resources here -->
    </resources>


Ahora vamos a comentar standalone.xml
${JBOSS_HOME}/standalone/configuration

Y comentar la siguientes lineas:

 
<!--<extension module="org.jboss.as.jaxrs"//>-->
<!--<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>-->

Lo único malo de esto es que estamos desactivado JAX-RS para todos los proyectos web.


miércoles, 4 de junio de 2014

Spring MVC (Servicios Rest)

Hola

En esta entrada voy hablar como hacer servicios rest con Spring MVC, como bien sabéis anteriormente había publicado como hacer servicios rest con Jersey y RestEasy. Spring para poder adaptarse a elegido a Spring MVC dar mas funcionalidad en vez de crear una nuevo modulo para los servicios rest. Si habeis programdor aplicaciones web con Spring MVC el aprendizaje va ser casi instantaneo y si veneis de Jersey o RestEasy su aprendizaje tambie va ser rápido.

Las Capas de Servicios y Dao son iguales que en los ejemplos que tenemos en Jersey y RestEasy por eso voy a explicar el controlador y la configuración.

Controlador

Es la clase que se encarga de recibir la peticion, procesar y dar una respuesta. el codigo es el siguiente:

@Controller
@RequestMapping(value = "/cursos")
public class CursoWS {

        @Autowired
 private CursoService service;

        @RequestMapping(value = "/all", method = RequestMethod.GET, produces = "application/json")
 @ResponseBody
 @ResponseStatus(value = HttpStatus.OK)
 public List getCursos() {  
  CursoExample example = new CursoExample();
  example.createCriteria().andActivoEqualTo(true);
  return service.getAll(example);
 }
}

Como veis es parecido a Jersey y RestEasy, lo que cambia es el Path por RequestMapping para indicar la url de nuestro servicio rest. Por lo demas es casi igual que Jersey y RestEasy.
Con esto ya tenemos el servicio rest lo único falta es la configuración para que funcione es activar la configuración de mvc en nuestro applicationContext


Con esto ya tenemos activada la configuración spring mvc y por último creamos un fichero en WEB-INF con el nombre spring-dispatcher-servlet.xml con la siguiente códgio
 

Por último el web.xml

  SpringMVCRest
  org.springframework.web.servlet.DispatcherServlet
  
            contextConfigLocation
            /WEB-INF/spring-dispatcher-servlet.xml
        
        1
 
 
 
  SpringMVCRest
  /rest/*
 
Con esto ya tenemos todo, como simepre el ejemplo completo en github

jueves, 22 de mayo de 2014

Eclipse aumentando su rendimiento (Performance)

Hola

En esta entrada voy a hablar sobre eclipse el IDE más usado por la gente (eso creo) , en esta ocasion voy a explicar como aumentar el rendimiento de nuestro ide favorito para programar en Java. Como mucho de vosotros ya sabeis que eclipse esta hecho con Java con la libreria SWT. Al ser una aplicación java pues logicamente esta funciona sobre una JVM, como ya habréis imaginado para aumentar la velocidad de eclipse tenemos que poner o tocar parametros de configuración de la JVM.

Lo ideal seria tener memoria RAM infinita entonces podriamos a nuestro eclipse uan burrada de memoria, pero por desgracia eso no es asi la memoria RAM es finita. Actualmente todo los PC o Portatiles tiene 4 o más de GB de RAM(en caso contrario intenta aumentar tu memoria ram). Yo voy a poner una configuración para un ordenador con 4 GB de RAM. Para tocar los paramentros de ejecución de eclipse para JVM tenemos que abrir el fichero eclipse.ini que se encuentra en la carpeta donde tengamos eclipse instalado.

${HOME_ECLIPSE}/eclipse.ini

-vmargs
-server
-Xmn128m
-Xms1024m
-Xmx2048m
-Xss2m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+UseParallelGC
-Xverify:none

Algunos parametros estaran y otros no, como veis lo que hago es reservar la mitad de la memoria ram para eclipse este valor podemos bajarlo a un 1,5GB para dejar 2,5GB al sistema operativo y otros programas. (Yo con esto funciono bien). Con esto ya tenemos configurado el eclipse para que no de problemas con la falta de memoria.

Ahora vamos a tocar configuraciones propias del eclipse, seguramente cuando arrancamos el eclipse trada bastante en arranca, eso es debido a la gran cantidad de plugin que tenemos instalado en nuestro IDE. ¿Cómo podemos hacer que el arranque sea más rápido?

Solo tenemos que ir a la ventada:

windows-->Preferences

Una vez pinchamos en:

General-->Startup and Shutdown

Como podemos ver en esta caso yo tengo desactivados todos, pero cada uno puede elegir la configuración  que mas le interese.


Otra cosa que nos molesta es que cuando tenemos mucho proyectos abiertos esta todo el rato validando o compilando(si son proyectos pequeños no se nota, pero si son grande si se nota y mucho).
En la misma pantalla de Preferences, en arbol buscamos Validation, hay activamos o desactivamos las opciones que nos interese.


Esta es la configuración general pero luego para cada proyecto podemos sobreescribir la configuraciones:

Botón derecho sobre raiz del proyecto y Validation.

Puesta a punto

Por ultimo esta tarea hay que hacer cada cierto tiempo, es una puesta punto al eclipse. Cuando estamos trabajando con nuestro eclipse solemos utilizar atajos sobre todo:

CRTL+SHIFT+R, CRTL+SHIFT+T, CRTL+SHIFT+O

Para buscar un fichero en nuestros proyectos, esto lo que hace es que eclipse escriba en el carpeta de .metadata de nuestro workspace:

${WORKSPACE}/.metadata/.plugins/org.eclipse.jdt.core

Hay mucho ficheros los eliminamos y ya esta. Otra cosa que hay que eliminar el historia local que tiene eclipse con los ficheros que trabajamos (no es cvs, svn y git), es que eclipse te guardar las modificaiones que has hecho en un fichero durante un cierto tiempo, para borrar esos fichero tenemos que ir a:

${WORKSPACE}/.metadata/.plugins/org.eclipse.core.resources/.history

Hay eliminamos todos los ficheros y carpetas.

Con esto ya tenemos mas que tuneado nuestro eclipse para trabajar máximo rendimiento.

Saludos

martes, 13 de mayo de 2014

Paginacion Mysql, Oracle y SQLServer

Hola

En esta entrada voy ha explicar como hacer paginación en la tres bases de datos más usadas en el mundo, es decir las que he usado yo hasta hoy, lo primero es decir que es paginación.

Paginación



La paginación consistente en traerse una cantidad de registros y de ser necesarios más saltar a una página posterior.

Cuando usamos ORM, Hibernate, Mybatis, etc..., Lo mejor es hacer sql nativas que van a ir muy rápidas. Lo malo es que cada base de datos tiene un forma distintas de hacerlo, no hay una query común que sirva para todas las bases de datos.

Mysql

Mysql tiene la clasula limit y offset, limit le indica el número máximo de registro y offset indica la posición del registro que se va empezar.

   
select columna_1, columna_2 
from tabla 
where columna_3 = 'algo' 
order by columna_1 
limit 10  
offset 0


Oracle

Oracle tiene la clasula rownum, rownum es una seudo columna que devuelme para cada registro del resultado de la consulta una poscion numerica.

SELECT * FROM ( 
SELECT a.*, rownum minimun FROM ( 
select columna_1, columna_2 from tabla
 where columna_3 = 'algo'
 order by columna_1
 ) a
 WHERE rownum <= 10
)WHERE minimun > 0

SQLServer

SQLServer tiene la clasula top, top se emplea para obtener sólo  una cantidad limitada de registros, los primeros n registros de una consulta.

select TOP 10 b.*
 FROM
 (
 SELECT ROW_NUMBER() OVER 
 (
 order by columna_1
 ) as row_number, *
 FROM
 (
 select columna_1, columna_2
 from tabla
 ) AS a
 where columna_3 = 'algo'
) AS b
 where b.row_number > 0

Autenticación http-basic spring y weblogic

Hola

En esta entrada voy hablar sobre como usar spring security con http-basic y weblogic.

Cuando usamos spring-security como método de autenticación http-basic y desplegamos en weblogic, sucede algo rar, que es que nos pregunta dos veces el usuario y password. ¿Porque sucede esto?

Lo que pasa es que cuando se lanza una petticion a nuestro servidor, salta primero el filtro de  spring pidendo el usario y password. Cuando aceptamos weblogic detecta que en la cabecera de la petición va una petición con autenticación http-basic entonces como no se encuentra ese usuario en su sistema de usarios. nos saca otra vez la peticion de usuario y password.¿Como solucionar este problema?

Fácil desactivando a weblogicla validación forzosa de http-basic. Lo que hay que hacer es tocar un fichero de weblogic. que se encuentra el la siguiente ruta:

MW_HOME/user_projects/domain/DOMAIN_NAME/config/config.xml

Buscar la linea y poner el valor false.

<enforce-valid-basic-auth-credentials>false</enforce-valid-basic-auth-credentials>