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>