java + compiz fusion en ubuntu

Hace tiempo que que en mi trabajo he probado una aplicación con Swing/JNLP, pero por alguna razon al abrir la aplicación no se veia nada dentro de la ventana :S…. investigando un poco parece que hay un problemilla con las animaciones de compiz fusión y java.

Y por si fuera poco me pasaba lo mismo con todas mis aplicaciones java y en algunos casos se perdian los efectos de escritorio completamente, pero bueno el mejor camino que pude encontrar para arreglarlo fue el desactivar las animaciones de compiz para java, en especial en los popups y en los menus que es donde creo yo que esta la causa del conflicto.

Para corregirlo hay que hacer lo siguiente:

1. Abres la ventana de preferencias de compiz y selecciona Animaciones

2. En la pestaña Abrir animación hay un boton que dice «Nuevo«, al darle clic se abre un cuadro de diaolo donde podemos especificar el tipo de ventana que vamos a configurar.

3. Dejamos los valores por defecto («Ninguno») y en la opcion que dice Coincidir efecto escribimos lo siguiente:

(name=sun-awt-X11-XFramePeer | name=sun-awt-X11-XDialogPeer |-swing_JDialog)

4. Le das clic en cerrar y repetimos lo mismo en la pestaña de Animación de cerrado, pero con el siguiente texto:

( name=sun-awt-X11-XFramePeer | name=sun-awt-X11-XDialogPeer)

5. Cierras las preferencias y reinicias tu sesion, y listo las ventanas con java ya ejecutan correctamente n_n.

Se ven un poco feas sin los efectos pero prefiero eso a estar recargando el compiz fusion =P.

Espero que sirva, Saludos

Firmar JARs Java Web Sart

Últimamente he investigado sobre applets, swing y JNLP y ha resultado un tema muy interesante, ya que abarca conceptos de seguridad, diseño, arquitectura de cliente servidor, etc…

Como dato cultural: Java Web Start es un mecanismo desarrollado por SUN para ejecutar aplicaciones de contenido rico (swing y applets) a través del navegador web, esto se realiza por medio del JNLP que es un protocolo de comunicación que permite lanzar nuestras applicaciones desde un lugar remoto, anteriormente esto se podia manejar mediante applets pero.. por razones de seguridad se les negaba acceso a los recursos de la maquina, como carpetas de sistema, archivos, etc… ya que alguién puede manipularlo de forma incorrecta y robar información de los que ejecuten el código.

Sobre todo en la seguridad, encontre este enlace donde explican màs a detalle cuales son las restricciones de las aplicaciones (swing/applets):

http://www.chuidiang.com/chuwiki/index.php?title=Firmar_Applets

Pero bueno al grano, para poder hacer que nuestras aplicaciones ejecuten con toda su funcionalidad y sin restricciones debemos firmarlas, y claro!! que el usuario que lo ejecute, acepte esa firma, podemos hacerlo de la siguiente manera:

1. Generar la llave: Es el identificador que va a validar nuestra aplicación, yo encontre estas dos formas de hacerlo,  la primera genera la llave por un tiempo determinado y la segunda la genera con vigencia de un año, puedes utilizar cualquiera. Abrimos una terminal y escribrimos:

#Comando para generar la llave con vigencia de un año
keytool -genkey -alias NOMBRE_LLAVE -validity 360 -v

#Genera la llave "MyKey" con la vigencia por un año (es el valor por defecto) y determina el algoritmo con RSA
keytool -genkey -alias MyKey -keyalg rssa

Nota: Para comprobar que el certificado se ha generado correctamente se puede comprobar con el siguiente comando, que listará todos los certificados que tenemos en nuestro keystore:

#Listar certificados en resumen
keytool --list
#Listar certificados a detalle
keytool –list -v

2. Exportar el certificado (OPCIONAL): Esto es se utiliza cuando tienes que proporcionar el certificado de seguridad ,  establece un contrato, un contrato con el navegador para asegurar el contenido que se esta descargando proviene de una fuente segura, si quieres que tu aplicación sea validada tienes que darle una copia del certificado al usuario que lo va a utilizar.

keytool -export -alias Mykey -file MyCert.crt

3. Comprimir tu applicación (OPCIONAL): Esto es para crear el archivo jar solamente si tienes tus classes en carpetas, pero como hoy todo mundo utiliza algún IDE no creo que sea necesario que hagas esto, solo busca donde se genero tu archivo y te pasas al siguiente punto para firmarlo

jar cvf file.jar main/

4. Firmar el jar: Aqui esta lo chido!!, en una terminal buscas tu jar y lo firmas con la llave que generaste:

jarsigner file.jar Mykey

5. Verificar la firma: Solo es para ver si realmente ya esta firmada nuestra aplicación.

jarsigner -verify -verbose -certs file.jar

Con esto nuestras applicaciones ya tienen permisos hasta para crear y modificar archivos en el cliente, claro solo si el usuario acepta ejecutarlos jaja :p.

Si deseas más información YO recomiendo que visites la documentación de java, realmente todo viene muy bien explicado ahí.

De JavaWebStart

Saludos