viernes, septiembre 30, 2011

Review del libro La calidad del software y su medida

El libro hace un repaso sobre cómo fueron los primeros intentos de medir la calidad en los productos, y se va introduciendo en cómo se comenzó a aplicar los conocimientos adquiridos en los procesos de fabricación tradicionales en el desarrollo del software.

Aunque me parece bien estructurado, no creo que me aporte ningún conocimiento sobre cómo mejorar la calidad de mis desarrollos. Más bien me ha servido para reafirmarme en mis "teorías" sobre cómo cuidar los desarrollos que hago y procurar que estos lleguen a buen puerto en las mejores condiciones posibles.

Me ha reafirmado en que las metodologías ágiles posiblemente no sean ninguna panacea, pero hoy por hoy, son las únicas que mediante su aplicación pueden ofrecer resultados más que satisfactorios.

Se trata mucho en el libro de fórmulas y aplicaciones matemáticas sobre procesos de construcción del software, pero en ningún momento se tiene en cuenta al "engranaje" principal en un desarrollo... el programador.

Resulta que el programador es una persona, y como tal, no se la puede medir ni aplicar fórmulas a base de constantes y número de miles de líneas que, teóricamente, tendrá la aplicación a desarrollar. Las metodologías ágiles saben muy bien que es la persona la que importa realmente en un desarrollo y por eso hacen girar todo en torno a ellas.

En definitiva, creo que está bien para tener un conocimiento histórico sobre la calidad y cómo a lo largo del tiempo se ha intentado medir, pero no creo que, actualmente, aporte soluciones para aplicar.

Módulo de login personalizado para Tomcat (II)

Hola de nuevo a todos.

En una de nuestras entradas del año 2009 (Módulo de login personalizado para Tomcat), comentábamos cómo modificar el modo de autenticar y autorizar a nuestros usuarios en aplicaciones para Tomcat, para adaptarlo a nuestras necesidades concretas.

Si leéis dicha entrada, veréis que lo último que teníamos que hacer es crear un archivo de configuración (jaas.config) e indicar la ubicación de dicho archivo, pasándola como parámetro a la máquina virtual
(por ejemplo: -Djava.security.auth.login.config=C:"/jaas.config").

Este parámetro se incluiría en el archivo catalina.bat o catalina.sh, dependiendo del sistema operativo.

El problema es que a veces es complicado manejar este archivo de configuración, sobre todo en sistemas en producción, ya que se requieren permisos, reiniciar el servidor, etc...

Bien, pues existe un modo de saltarse estos problemas con el archivo de configuración. Básicamente, lo que tenemos que hacer es:


  • Añadir un context listener (o usar uno que ya exista).
  • Incluir el archivo "jaas.config" en el mismo paquete que el context listener.
  • Obtener la ruta física del archivo en el despliegue de la aplicación. Esto se hace recuperando el archivo empaquetado como un recurso de la clase, y pasando el URI del recurso al constructor de un objecto File. Finalmente, la ruta física del archivo se obtiene mediante el método getAbsolutePath() del objeto File.
  • Pasar la ruta física del archivo como propiedad del sistema. La propiedad en concreto es "java.security.auth.login.config".
Puedo asegurar que lo he probado y funciona. Os pongo un ejemplo sencillo:

Supongamos que creamos un context listener (MyContextListener) el el paquete "com.test.listeners".
Creamos o copiamos el archivo "jaas.config" también en el paquete "com.test.listeners".

La clase MyContextListener quedaría de esta forma:


package com.test.listeners;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
 * Web application lifecycle listener.
 * @author pedrop
 */
public class MyContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        File jaasConfigFile = null;
        try {
            jaasConfigFile = new File(getClass().getResource("jaas.config").toURI());
            System.setProperty("java.security.auth.login.config", jaasConfigFile.getAbsolutePath());
        } catch (Exception e) {
            Logger.getLogger(MyContextListener.class.getName()).log(Level.SEVERE, null, e);
        }
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
}

Por si a alguien le interesa, existe otra solución en la que no es necesario usar un archivo "jaas.config". Para dar alguna pista, os diré que requiere extender el objeto LoginContext.

Saludos