Programación, linux y mas...

sábado, 1 de septiembre de 2012

Clases abstractas e interfaces

Clase abstracta: Una clase abstracta es aquella que declara al menos uno de sus metodos como abstracto, este tipo de clase no puede ser instanciada.

public abstract class PersonaAbstract {
    private String nombre;
    private Integer edad;
    private String sexo;

    public void metodo01() {
        System.out.println("Hola!!!");
    }

    public abstract void metodo02();
} 


Interface: Una interface es por definición una clase abstracta, con la diferencia de que todos sus métodos son abstractos.

public interface PersonaInterface {
     public void metodo01();
     public void metodo02();   
}







Publicado por José B. Viera Rebolledo en 17:24 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: Java, Programacion

miércoles, 22 de agosto de 2012

Configuración de un Pool de conexines con BoneCP

Actualmente le doy mantenimiento a un proyecto que se conecta a una BD MySQL, la carga al inicio no era muy grande y por simplicidad use la configuracion por defecto que me ofrece Spring para el DataSource:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="${dataSource.driver}"
    p:url="${dataSource.url}"
    p:username="${dataSource.username}"
    p:password="${dataSource.password}" />

La aplicación fue crecienco en cuanto a usuarios y transacciones, esto le pego al rendimiento y detecte que el problema se debia al pobre o nula administración de las conexiones a la BD, por tal motivo me di a la tarea de investigar como solventar esto y me encontre con BoneCP el cual se define asi mismo como una libreria para administrar el pool de conexiones de facil y libre uso.

Para descargar mediante Maven, colocar en el pom las siguientes dependencias:

<dependency>
        <groupId>com.jolbox</groupId>
    <artifactId>bonecp</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>com.jolbox</groupId>
    <artifactId>bonecp-spring</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>

Finalmente mi DataSource quedo de la siguiente manera:

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
        <property name="driverClass" value="${dataSource.driver}" />
        <property name="jdbcUrl" value="${dataSource.url}" />
        <property name="username" value="${dataSource.username}"/>
        <property name="password" value="${dataSource.password}"/>
        <property name="idleConnectionTestPeriod" value="60"/>
        <property name="idleMaxAge" value="240"/>
        <property name="maxConnectionsPerPartition" value="30"/>
        <property name="minConnectionsPerPartition" value="10"/>
        <property name="partitionCount" value="3"/>
        <property name="acquireIncrement" value="5"/>
        <property name="statementsCacheSize" value="100"/>
        <property name="releaseHelperThreads" value="3"/>
    </bean>

Probado y puesto en producción exitosamente. Saludos!!!
Publicado por José B. Viera Rebolledo en 21:21 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: BD, Java, Rendimiento, Spring

jueves, 2 de agosto de 2012

Invocación de métodos mediante scheduled con Spring

Buenas madrugadas, esta entrada nace por una pregunta que me hizo un amigo ¿Se puede mandar a ejecutar codigo java desde una aplicacion WEB sin necesidad de una interfaz grafica?, una tipica aplicación WEB espera una acción por parte del usuario para ir al servidor a ejecutar algo, pero podemos en nuestro contexto de la aplicación programar que se ejecute un metodo de alguna clase cualquiera de manera automatica, lo podriamos hacer configurando un listener en el web.xml o en este caso configurando una tarea programada en el contexto de Spring.

Para muestra basta un boton una aplicación de ejemplo, la aplicación se genero con NetBeans 7.2 y se creo usando Maven, el pom.xml ya tiene las dependencias necesarias.

Para descargar la aplicación de ejemplo clic aqui


Referencias
Publicado por José B. Viera Rebolledo en 23:45 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: Java, Spring

lunes, 30 de julio de 2012

Manten limpio tu sistema LMDE

Si son como yo que se la pasan instalando y desistanlando software, descargando y borrando archivos, despues de un tiempo es necesario limpiar todo rastro de esas pruebas, borrar archivos inecesarios y en resumen mantener limpio nuestro sistema, existen un programas que uso a menudo Deborphan

Instalar Deborphan:
$ sudo aptitude install deborphan

Eliminar librerias huerfanas:
$ sudo dpkg --purge $(deborphan)

Borrar todo rastro despues de desinstalar un paquete:
$ sudo dpkg --purge $(deborphan --find-config)



Posterior a esto lanzamos el siguiente comando:
$ aptitude update && aptitude safe-upgrade && aptitude full-upgrade && aptitude clean && aptitude autoclean

Listo con esto ya deberiamos tener limpio y actualizo nuestro sistema, hasta la próxima. 
 
 

Publicado por José B. Viera Rebolledo en 21:06 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: LMDE, Rendimiento, Tip

domingo, 15 de julio de 2012

Primefaces

En mis andanzas en el mundo del desarrollo WEB empece con JSP y Servlets, la verdad era un dolor de cabeza trabajar con esta tecnologia sobre todo por la administración de las sesiones, yo venia trabajando con Swing y me sentia muy comodo y pense ¿por que no existe algo parecido en el desarrollo WEB?, Swing esta construido en base a componentes y acciones, el objetivo es que no pierdas tiempo creando estos componentes, solo los usas, de esta manera te enfocas en la programación del negocio. Entonces me entere que existia un framework llamado Java Server Faces (JSF) y que su objetivo era precisamente dar una alternativa a Swing en el mundo WEB, desde entonces vengo trabajando con este framewok, al momento van en la versión 2.x y existen muchas implementaciones que hace aun mas facil su uso, como: RichFaces, IceFaces, PrimeFaces, etc., ahora la pregunta es ¿cual debo de usar?, bueno pues me di a la tarea de investigar y encontre este comparativo, y en conclusión me decidi por PrimeFaces, la verdad me lleve una grata sorpresa ya que esta implementacion es facil de configurar, cuenta con mas de 100 componentes muy bien logrados (cabe señalar que internamente hace uso de jQuery), implementa ajax de manera natural, es muy ligero y tiene una buena y amplia documentación.

En futuras publicaciones explicare como hacer uso de esta implementación en conjunto con otros frameworks como Spring y Hibernate.


Publicado por José B. Viera Rebolledo en 0:57 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: JSF, Primefaces, Programacion

sábado, 14 de julio de 2012

Alta cohesión y bajo acoplamiento.

La alta cohesión y el bajo acoplamiento son dos terminos que escuche por primera vez en un curso del Framework Spring, tratare de definirlo de la manera mas simple:

Cohesion: Trata de explicar que una clase en conjunto con sus atributos y metodos deben cumplir con un objetivo en especifico y concreto para el cual fue pensado en su diseño. Por ejemplo la clase OperacionesAritmeticas debe contener metodos como: suma, resta, multiplicacion y division y cada metodo debe cumplir con su tarea sin desviarse de su objetivo.

Acoplamiento: El acoplamiento es la dependencia que existe entre las clases, entre mas dependencia exista entre las clases que componen nuestro sistema mas complicado se vuelve realizar ajustes o mantenimiento al mismo. Por ejemplo si nuestro diseño del sistema contara con tres mudulos, el primer modulo realiza la tarea de interactuar con el usuario, el segundo publica servicios y el tercero contiene los objetos de dominio y el acceso a datos, si existiera una dependencia muy fuerte entre los tres modulos y sus respectivas clases cuando se nos pidiera realizar un ajuste o remover algun bug tendriamos que modificar el codigo de al menos tres clases en ves de una sola.

Por tal motivo en el diseño de cualquier sistema informatico independientemente del lenguaje de programación que se use es de buena practica tener una alta cohesión y un bajo acoplamiento. En futuras publicaciones explicare como conseguir esto de una manera practica usando Spring Framework.
Publicado por José B. Viera Rebolledo en 23:39 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: Buenas practicas, Programacion

viernes, 6 de julio de 2012

Rendimiento en Linux disminuyendo el SWAPPING

Para todos aquellos que trabajan con sistemas Linux se les debe hacer muy familiar el termino "swap", para los que no, la swap es un area o partición del disco duro que sirve de intercambio o almacenamiento temporal de datos cuando existen procesos muy pesados corriendo y la memoria RAM resulta insuficiente, el proceso en el cual la RAM transfiere datos a la swap se le llama SWAPPING. Es obvio que si nuestra PC realiza constantemente este proceso el rendimiento del sistema se veria afectado y se notario lento, esto se debe por que el acceso al disco duro es mas lento que el acceso a la RAM.

Para las maquinas actuales que cuenten con 4GB de RAM o mas hay una solución, consta en disminuir el acceso a la swap lo mas que se pueda, esto se logra agregando el parametro "swappiness" al sistema, primeramente confirmemos el valor por default:

$ sudo cat /proc/sys/vm/swappiness

por lo general los sistemas vienen configurado con el valor 60 (siempre sera un valor entre el 0 y el 100), esto significa que cuando se llegue a un 40% del uso total de la RAM se haga uso de la swap, mientras nuestro valor tienda mas al cero menos se usara la swap, yo recomiendo actualizar este valor a 20, de esta forma solo si se hace uso de hasta el 80% de nuestra RAM se usara la swap.

Modificamos el valor de la siguiente manera:

$ sudo sysctl vm.swappiness=20

Probamos abriendo varios programas y si notamos mejoria podriamos hacer el cambio permanente modificando el siguiente archivo:

$ sudo gedit /etc/sysctl.conf

y agregamos la siguiente linea al final del archivo: vm.swappiness=20
guardamo y reiniciamos nuestro sistema.
Publicado por José B. Viera Rebolledo en 23:39 No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas: Linux, Rendimiento, Tip
Entradas antiguas Inicio
Suscribirse a: Entradas (Atom)

Etiquetas

  • APIs (1)
  • BD (2)
  • Buenas practicas (1)
  • Java (14)
  • JSF (1)
  • Linux (4)
  • LMDE (4)
  • Primefaces (1)
  • Programacion (13)
  • Rendimiento (3)
  • Seguridad (1)
  • Spring (2)
  • Tip (2)
  • Utilerias (1)

Datos personales

José B. Viera Rebolledo
Soy un desarrollador y analista de sistemas informaticos, apoyo la filosofia del software libre y creo que el conocimiento debe ser de libre acceso para todos.
Ver todo mi perfil

Archivo del blog

  • ▼  2012 (21)
    • ▼  septiembre (1)
      • Clases abstractas e interfaces
    • ►  agosto (2)
    • ►  julio (6)
    • ►  junio (4)
    • ►  mayo (1)
    • ►  abril (7)
Tema Picture Window. Con la tecnología de Blogger.