LiveConnect y Linux (2)
Después de unos días, me comenta Jaime Hablutzel que existe una forma de que funcione con las últimas versiones de Java. La solución es ir al Java Control Panel y en Java Runtime Environment Settings añadir el parámetro:
-Djnlp.nativeMixedCodeDialog=false
Aquí una captura de pantalla:
LiveConnect y Linux
Resulta que el problema del LiveConnect ocurre sólo en Linux. Consiste en que no se puede hacer una llamada desde Javascript a un método del Applet. Afecta, por ejemplo, al LiveEdit de OpenKM. Para que funcione desde Linux, o instalas el OpenJDK y el plugin para el navegador IcedTea o tienes que usar el JDK de Oracle 1.7u67. A partir de esa versión ya no funciona.
Instrucciones de instalación:
- Descargar jdk-7u67-linux-x64.tar.gz .
- Desinstalar JDK previos:
$ sudo apt-get purge openjdk* icedtea* oracle-java*
- Crear directorio de instalación:
$ sudo mkdir /usr/local/java
- Descomprimir el JDK:
$ sudo tar xzvf Descargas/jdk-7u67-linux-x64.tar.gz -C /usr/local/java/
- Poner los comandos del JDK en el PATH; añade al final del fichero /etc/profile esto:
export PATH=$PATH:/usr/local/java/jdk1.7.0_67/bin
- Instalar plugin en Firefox (y Chrome):
$ cd /usr/lib/mozilla/plugins $ sudo ln -s /usr/local/java/jdk1.7.0_67/jre/lib/amd64/libnpjp2.so .
A partir de ahora funcionará sin problemas. A la espera de una solución definitiva por parte de Oracle.
Cambio en caliente de clases en Tomcat con IntelliJ
De acuerdo con su página, la DCEVM (Dynamic Code Evolution Virtual Machine – Máquina Virtual de Evolución de Código Dinámico) es una modificación de máquina virtual de Java HotSpot (TM) que permite cambios de las clases cargadas en tiempo de ejecución. Las máquina virtual que solemos usar permite cambios en el cuerpo de los métodos, pero no añadir nuevos métodos o cambiar la definición de los mismos.
Cuando estás desarrollando es bastante habitual que tengas que cambiar la implementación de una clase, y muchas veces ese cambio hace que debas parar el servidor de aplicaciones y arrancarlo de nuevo para que los cambios surtan efectos. Dependiendo de la complejidad de la aplicación, estos tiempos de parada e inicio pueden ser relativamente largos y aburridos. Gracias a DCEVM el esperar se va a acabar 🙂
Sé que existe otros métodos para conseguir este mismo objetivo, como JRebel que funciona bastante bien. De hecho se publicita argumentando que estos tiempos de reinicio cuestan dinero a la empresa que mediante su solución ahorra dinero. No tengo nada en contra de JRebel, pero DCEVM funciona realmente bien y además es gratis 😛
Desde hace unos meses uso IntelliJ, de modo que explicaré cómo configurarlo para usar esta máquina virtual alternativa. Vamos a File > Settings > Plugins, clickamos en Browse repositories y buscamos «DCEVM integration». Una vez instalado debemos reiniciar el IDE. Al iniciar IntelliJ nos mostrará un mensaje «DCEVM is avaiblable fro your environment: Would you like to download it?» para decirnos que existe una versión disponible de DCEVM y si la queremos bajar. Obviamente, si que queremos.
Una vez bajada, vamos a la configuración de Tomcat (Edit Configuration…) y en la solapa Startup/Connection seleccionados Debug y añadimos la variable JAVA_HOME con la ubicación local de DCEVM. En la solapa Server seleccionamos Update classes and resources para la opción On frame deactivation.
Ahora cuando arranques Tomcat en modo debug podrás hacer las modificaciones que quieras sin tener que reinciarlo.
Crear un repositorio de Maven
Desde que uso Maven evito, siempre que puedo, incluir los jar de las dependencias en el proyecto. Un buen sitio donde localizar estas dependencias es http://mvnrepository.com/. A veces un proyecto mantiene su propio repositorio de Maven, como es el caso de JBoss, y tienes que registrarlo en el pom.xml:
<repository> <id>jboss.com</id> <name>JBoss Maven Repository</name> <url>http://repository.jboss.com/maven2</url> </repository>
Pero no siempre pueden encontrar las librerías que necesitas en un repositorio de Maven. En en ese caso puede optar por incluirlas en el fuente de la aplicación y registrarlas manualmente:
$ mvn install:install-file -DgroupId=entagged.audioformats -DartifactId=audioformats -Dversion=0.15 -Dpackaging=jar -Dfile=entagged-audioformats-0.15.jar
O puedes crear tu propio repositorio. En este caso hay distintas herramientas que te ayudarán en la tarea, como Nexus. Pero si eres amante de las cosas sencillas te gustará saber que con un simple servidor web también puedes hacerlo.
Para empezar creamos un usuario al que llamaremos «maven» y en su $HOME también vamos a crear los directorio «repository» y «repository/maven2». Le tendremos que dar los permisos de lectura pertienentes a Apache porque se encargará de servir las librerías. Por tanto daremos de alta un VirtualHost para tener acceso al repositorio:
<VirtualHost *> DocumentRoot /home/maven/repository ServerName repository.monkiki.org </VirtualHost>
Mientra, en nuestro ordenador local hay que editar el fichero ~/.m2/settings.xml para establecer las credenciales que nos permitirán registrar librerías en el repositorio que acabamos de crear.
<?xml version="1.0" encoding="UTF-8"?> <settings> <localRepository>/home/monkiki/.m2/repository</localRepository> <servers> <server> <id>monkiki.org</id> <username>maven</username> <password>s3cr3t0</password> </server> </servers> </settings>
Podemos ir incluyendo librerías así:
$ mvn deploy:deploy-file -DgroupId=entagged.audioformats -DartifactId=audioformats -Dversion=0.15 -Dpackaging=jar -Dfile=entagged-audioformats-0.15.jar -Durl=scp://repository.monkiki.org/home/maven/repository/maven2 -DrepositoryId=org.monkiki
En caso de que la librería tenga dependencias, es buena praxis indicar en el registro el pom de dicha librería para que Maven gestione correctamente estas dependencias transitivas, en lugar de tener que incluirlas artificialmente en el pom.xml de nuestro proyecto. Para ello se utiliza el parámetro:
-DpomFile=/path/to/pom.xml
En los pom.xml de nuestros proyectos, hemos de registrar repositorio de esta manera:
<repositories> <repository> <id>monkiki.org</id> <name>Mi repositorio de maven particular</name> <url>http://repository.monkiki.org/maven2</url> </repository> </repositories>
Y esto es todo, amigo!
Ver también:
Personalización de campos en Mantis
Mantis es un gestor de bugs (bugtracking system) escrito en PHP que llevo usando desde hace años. Visualmente no es gran cosa pero funciona realmente bien y es lo bastante flexible como para adaptarse a las necesidades que he ido teniendo. Últimamente lo he configurado para añadir un nuevo campo a los bugs que se van reportando en el gestor documental OpenKM.
Vamos a Manage > Manage Custom Fields. En el input escribimos el nombre del nuevo campo que en este caso sería Browser. Saltará a una nueva página en la que podemos describir los parámetros del este campo, como el tipo, posibles valores, etc. Elegimos el tipo Enumeration porque queremos que sea un desplegable desde donde el usuario podrá seleccionar el nombre del navegador. Así agilizamos la entrada de datos y eliminamos posibles errores de escritura. Y dentro de posibles valores escribe:
|Firefox|Explorer|Chrome|Safari|Opera
Como ves, los distintos valores se separan por el carácter pipe. El primero al no haber nada representa el valor vacío. El resto de opciones las podemos dejar tal y como están.
Un poco más abajo hay otro formulario que permite ligar este campo a un proyecto. De esta forma cada proyecto puede tener sus propios campos personalizados. Este campo aparecerá por defecto al final. Si nos va bien así ya hemos acabado, pero si eres un poco quisquilloso y quieres que aparezca esta nueva columna en el listado de bugs tendrás que sequir leyendo.
Vamos a Manage > Manage Configuration. Como quiero que esta personalización esté para todo el mundo, el parámetro Username lo pongo a «All Users». En Project Name puedo elegir que se aplique a un sólo proyecto o a todos. Esto ya depende de cómo te lo quieras montar.
Por defecto los valores son:
array ( selection, edit, priority, id, sponsorship_total, bugnotes_count, attachment, category_id, severity, status, last_updated, summary )
Y como quiero que haya una nueva columna con el tipo de navegador, en Configuration Option pones «view_issues_page_columns» y en Value esto:
array ( selection, edit, priority, id, sponsorship_total, bugnotes_count, attachment, category_id, custom_Browser, severity, status, last_updated, summary )
Puedes encontrar más información sobre configuración de Mantis en su manual online.
El blog and.roid.es cumple un año
Estamos de cumpleaños. El blog and.roid.es que tantas noticias sobre Android nos trae a los mortales celebra su primer años de existencia. Para festejarlo regala un HTC Magic Negro.
No te lo puedes perder!
Dependencias en maven
Es malo incluir la libraría log4j.jar en una aplicación deployada en JBoss por ya la trae él y hay temas de classpath. Vamos, que se hace un follón con las dos versiones.
Especial cuidado hay que tener por las dependencias transitivas de maven: tu no la incluyes a posta en el pom.xml de tu projecto pero se cuela en el war porque forma parte de una dependencia de otra librería que necesitas.
Te puedes volver loco buscando qué dependencia es es culpable de que se incluya esa librería. Pero hay una solución perfecta para ello:
$ mvn dependency:tree
Esto muestra todo el árbol de dependencias y podrás ver de dónde cuelga. Luego simplemente tienes que añadir la exclusión de dicha librería en la dependencia maligna:
<exclusions> <!-- JBoss already have its own log4j.jar --> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions>
Documentación de Jackrabbit
Puedes encontrar unos cuentos links a documentación y tutoriales en este wiki: http://wiki.apache.org/jackrabbit/JcrLinks
Una vez que te hayas familiarizado con JCR te recomiendo que vayas directamente a los documentos de las especificaciones: