Vacations over, Jasig CAS and Django

September 7, 2012

This is my first week after a whole month on vacations, so I’m feeling plenty of energy to work in my two principal projects at work:

  • Jasig CAS
  • A Django app to manage digital identity

On the Jasig CAS side, I have some upgrades to do, and also some challenges to face. Jasig CAS has a problem with the documentation. It symply doesn’t exists. The documentation is maintained separated from source, and they don’t have any QA process on it. I manage a custom deployment with a custom theme, and custom authentication handlers and repositories, to support spanish DNIe. To do this I need a custom login-webflow, so every new versión I need to figure out what changed to incorporated it into our login-webflow. With the source in Github the best  way to do this is using “history” on the login-webflow of the project.

I often need to expose user data through Web Services to other apps. Depending on the nature of the user data exposed this has some security concerns. My challenge regarding Jasig CAS is to include in the attributes some ones gathered throw web services. Doing this way I ensure the user data are exposed when the user is logged, so I have a point, a crazy developer won’t be able to poll the entire user database.

On the other hand the Django project has tons of things to do. The upgrade work is a continuous task, because I use so many libraries, that they are always getting security upgrades. This project is being developed in an internal svn repository. I want to move the project to git, mainly because I want to use feature branches to avoid hot fixes issues. I’m using jenkins to tests the test, although our test coverage is not that high now. I would like to publish this project in github too,  my boss used to agreed me, but he always said we need to improve the project to publish it “finished”. I convinced him that developing in github is a good idea, because if no one gets involve then I won’t be slower, but if some one gets involve I’ll expend some time in managing his/her collaborations, but also won’t expend time actually doing what he/she commited.

Advertisements

Sun/Oracle Java y OpenJDK con apache y mod_jk

March 3, 2012

Esta semana he estado trabajando en la configuración de dos servidores iguales. En ambos casos los servidores tendrán un Apache que pasarás las peticiones a un Tomcat 6. Siendo los servidores (casi) idénticos con las mismas configuraciones en Apache y Tomcat me encontré con que uno de ellos, después de diez minutos de haber arrancado el servicio tomcat comenzaba a consumir el 100% de la CPU y se quedaba en un estado en el que no devolvía ninguna petición. Pensé que se debía a las tareas de arranque, pero el comportamiento no cambiaba en el tiempo. Por contra el otro no presentaba este comportamiento.

Tras dar muchas vueltas, mirar en muchos sitios de Internet, vi que las versiones de Java eran distintas. Uno de los servidores usaba la versión oficial de Sun/Oracle mientras que el otro estaba usando la versión abierta OpenJDK. Lo curioso del caso es que el que funciona como se esperaba es el que utiliza OpenJDK. El servicio en producción utilizará OpenJDK y esto es algo que nunca antes había hecho. Esperemos que salga bien.


Maven

January 17, 2012

Desde que entre en mi nuevo puesto he tenido que enfrentarme a tecnologías con las que no me había topado antes. Hoy quiero hablar de maven. En mi experiencia como desarrollador he trabajado principalmente con dos lenguajes de programación, por un lado php y por otro y por encima del anterior con python. Cuando los proyectos se hacen relativamente grandes el proceso de configuración del proyecto en sí para poder comenzar a trabajar es a veces excesivamente costoso, en python esto se resuelve con virtualenv, pip y pypi. En java esto se puede resolver con maven.

maven es más que un sistema de repositorios, ya que tambien permite construir los proyectos,  compilándolos y generando los artefactos necesarios en cada caso. Esto puede resultar extraño para alguien que viene de un mundo en el que los lenguajes no tienen que ser compilados,  en python todos los requerimientos son de tiempo de ejecución, sin embargo, en un lenguaje compilado, pueden existir distintos tipos de dependencias, lo que hace casi una necesidad que el mismo software que se usa para gestionar las librerías sea usado para construir el proyecto.

Una de las cosas que más me gusta de maven es el famoso “maven war overlay”. Básicamente es un mecanismo que permite construir proyectos y despliegues de una manera similar al paradigma de la herencia. En el proyecto en el que estoy trabajando actualmente usamos este mecanismo para modificar por partes los distintos aspectos que deseamos personalizar, como el aspecto, algunas extensiones o los parametros necesarios para ejecutarlo en producción o pre-poducción.

Se puede usar maven desde eclipse via un plugin. Esto es realmente deseable para gestionar el pom.xml, ya que cuenta con un editor hecho para humanos en lugar de tener que trabajar con un larguísimo fichero xml. Me parece particularmente útil el mecanismo para añadir dependencias ya que se encarga de buscar el groupid por ti lo cual es altamente cómodo.