Buscar
Social
Ofertas laborales ES
domingo
jun152008

Lookup Java, una recopilación de documentación sobre Java

Lookup Java es un portal dedicado a recopilar documentación sobre Java. La documentación está organizada según distintos tópicos (core Java, Ajax, EJB, Hibernate...) y dentro de cada tópico la documentación se clasifica en artículos, tutoriales, videos, blogs, descargas.... Los autores del portal afirman que sólo añaden documentación que merece la pena, que no se dedican a recopilar cualquier cosa.

Se trata de un portal bastante nuevo y todavía no tiene una cantidad inmensa de documentación, aunque ya tiene bastante. En cualquier caso, es un enlace que no está de más añadir a nuestros favoritos.

viernes
jun132008

SpringOne 08 Day 1 Report

Un año más, ha empezado SpringOne en la ciudad de Amberes, Bélgica, con un total de 400 asistentes de 25 países diferentes.

La keynote ha estado presentada por Stephan Janssen (fundador de JavaPolis [JaVoxx a partir de ahora] y fundador de BeJUG) que ha aprovechado para presentar nuevamente su criatura RIA (www.parleys.com) y sus nuevas funcionalidades.
Seguidamente ha dado paso a Rod Johnson (CEO de SpringSource) para empezar propiamente la keynote. No ha dudado en empezar comentando que en diciembre del 2007, las ofertas de trabajo en Spring superaron aquellas que pedían EJB (en el mercado americano, según www.indeed.com). Básicamente ha pasado toda la keynote comentando las nuevas virtudes de Spring 2.5; virtudes que ha acabado de alabar Juergen Hoeller en su siguiente presentación.

Novedades en Spring 2.5:

        - Soporte explícito para JDK 1.6 (JDBC 4.0, JMX MXBeans) y se deja de dar soporte a JDK 1.3
        - Soporte para AspectJ-LTW (load time weaving), funcionalidad muy interesante; hasta ahora la AOP creaba Proxies para hacer su funcionalidad, ahora modifica directamente el bytecode
        - Soporte para JavaEE 5

                · Soporte para JPA 1.0 (fucionalidades como soporte para savepoints en OpenJPA) y EJB 3.0  
                · Soporte para Servlet 2.5, JSP 2.1 y JSF 1.2
                · Soporte para JTA 1.1

Pero si embargo, las novedades vienen marcadas por las annotations:

Soporte para DI con anotaciones
        - @Autowired, aplicable en métodos y atributos. Sencilla forma de inyectar las dependencias (autowiring by type)
        - @Qualifier: se utiliza para la desambiguar la resolución de dependencias (autowiring by name)
        - También se podemos tener una resolución de dependencias por anotaciones; se crea una asociación entre una anotación y lo que tiene que ser resuelto (autowiring by annotation).

Anotaciones JSR-250:

        - @Resource, es una anotación estándar con la misma funcionalidad que @Autowired, pero menos flexible.
        - @PostConstruct @PreConstruct 

- También nos encontramos con la muy interesante meta-anotación @Component, que tiene definido como estereotipos @Service, @Repository, @Aspect y @Controller, pudiendo crear nuestros propios estereotipos. Si utilizamos estas meta-anotaciones, no no hará falta declarar nuestro beans en ningún XML, así que podemos dejar toda la configuración XML y utilizar simples anotaciones (a gusto del consumidor), sólo tendremos que especificar

- Otra anotación interesante es la de @Configurable, que nos permite utilizar el constructor new aprovechándonos de la DI, gracias a AspectJ. Esto quiere decir que si anotamos un bean con @Configurable y tiene propiedades que tienen que ser inyectadas (anotadas por ejemplo con @Autowired), al inicializar el objecto con un simple new, Spring se encargará de sus dependencias

- Las transacciones también se pueden realizar con annotations @Transactional

- Siguiendo con las anotaciones, Spring Security ya tiene soporte para seguridad declarativa, una gran simplificación.

- Y para tests de integración, presentan soporte para testing sin necesidad de desplegar en un servidor de aplicaciones y basado en anotaciones (como no). Soporte para JUnit 4.4, TestNG así como JUnit 3.8

En la parte web nos encontramos diferentes novedades:

- En Spring MVC Toda la declaración de controladores se puede realizar con annotations (@Controller) sin la necesidad de extender de ninguna clase, pudiendo hacer los mappings también con anotaciones en los métodos (@RequestMapping) y pasar atributos directamente del request (@RequestParam)

- Spring Web Flow 2.0 es mucho más simple, soportando transacciones multipaso y soportando eventos asíncronos (Ajax). Automáticamente detecta si el cliente tiene habilitado JS, en caso positivo, solo refresca la parte deseada, en caso negativo refresca toda la página.

- Nuevo proyecto Spring JavaScript, una nueva API para Ajax con una librería en la parte del cliente en JavaScript. De momento solo funciona con Dojo y tiles, pero hablando con los creadores, están trabajando para soportar otras tecnologías como Freemarker, Velocity...

- Otro nuevo proyecto es Spring Faces, que integra el modelo de componentes JSF en un entorno Spring.

Presentación de Spring Tool Suite (IDE), su IDE basada en Eclipse . Muy recomendable que le deis un vistazo

Que nos espera Spring 3.0?
Por lo pronto han anunciado que en agosto saldrá Spring 3.0 M1 (pero como han dicho...no os toméis la fecha muy en serio ^^). Novedades: soporte total para REST, soporte para lenguaje de expresiones.

La versión 3.0 GA se espera a finales de año (Q4), que se hará modificación del core utilizando generics i varargs, tendrá lenguage de expresiones (Unified EL++), soporte para Portlet 2.0 y preparación para Servlet 3.0, soporte REST, annotated wizard form controller...

Hay planeada pasar alguna API a deprecated, como es el caso de la jerarquía de clases de los controladores MVC (así que toca usar controladores anotados a partir de ahora!)

Rod Johnson acabó la keynote con una diapositiva que decía: EJB will die.


OSGi Programming Model por Adrian Colyer

Uno de los acrónimos que empieza a sonar fuerte, perdón acrónimo antes, ahora ya es una palabra. OSGi es el sistema de módulos dinámicos de de Java. Se explicó todo el funcionamiento de los módulos (bundles), básicamente todas las reglas de visibilidad, el proceso de resolución de dependencias (mediante Importers y Exporters) y como se conseguía el versionado de módulos (OSGi permite tener diferentes versiones del mismo módulo conviviendo conjuntamente y ser utilizado por otros módulos)

Los módulos se pueden: instalar, arrancar, parar, desinstalar y actualizar....en tiempo de ejecución! Estos módulos pueden publicar servicios, que gracias al ServiceRegistry se pueden buscar y usar.

Los beneficios claves que nos proporcionará OSGi son la modularidad, el control operacional y el versionado.

Implementaciones open source que podemos encontrar: Eclipse Equinox (utilizado por el SpringSource Application Platform), Apache Felix, Knopflerfish.

Los tests de integración con OSGi son difíciles, pero esa desventaja no es la única que nos encontraremos, el uso de librerías existentes no diseñadas para OSGi nos pueden llevar quebraderos de cabeza; pero los chicos de SpringSource ya se han preparado para esto, han adaptado más de 350 librerías open source para ser utilizadas en entornos OSGi. El repositorio es público y se puede encontrar aquí: http://www.springsource.com/repository/app/bundle

Using Spring Security 2.0 por Mike Wiesner (pensaba que la impartiría Ben Alex, creador de Acegi Security)

Spring Security ha dado un gran salto (antes Acegi Security), a parte de cambiar de nombre (básicamente porque todo el mundo preguntaba que quería decir...premio para el que lo sepa :P), ahora ya contamos con seguridad declarativa mediante anotaciones. Acegi realmente era difícil de configurar, toda la configuración se hacia en un lenguaje de infraestructura, ahora ya lo podemos hacer en lenguaje de usuario (Spring Security nos crea una configuración básica, con lo que una configuración típica de Acegi que ocupaba 130 lineas de XML ahora solo ocupa 10!).

Otra mejora viene de la mano de el namespace para seguridad, así como la mejora del soporte para LDAP y para Single Sign-On. Spring Security proporciona múltiples métodos para la autenticación (autenticación básica, JDBC, LDAP, NTLM, JAAS, OpenID...), permitiéndonos hacer un mix de estos (usar OpenID para la autenticación [usuari y contraseña] y JDBC para sacar los roles o permisos del usuario). Mike hizo una pequeña demo mostrando la facilidad de añadir seguridad a una aplicación.

Algunas buenas prácticas comentadas: securizar URLs para autorización de gran granularidad; securizar métodos para autorización de granularidad fina.

Otra buena práctica es no securizar los métodos a nivel de roles (@Secured("ROLE_ADMIN")), sino extender el modelo y utilizar permisos @Secured("PERM_DELETE_USER").

Importante testear la seguridad (seguro que hay muchos que no lo hacéis!). Con JUnit acabaremos teniendo infinidad de tests, así que recomiendan FIT para el testeo de la seguridad.

Spring Transaction Choices for Performance por Juergen Hoeller

El manejo de transacciones es bastante frecuente en aplicaciones JEE, Juergen nos mostró las diferentes estrategias de transacciones que tenemos en Spring y lo que supone utilizar cada una. A modo de resumen, se comentó:

  • Transaction manager nativos (JDBC [DataSourceTransactionManager] y los de los ORM que se respaldan por el de JDBC por debajo). El problema de estos es que sólo permiten un recurso o base de datos, no respaldando así transacciones a múltiples bases de datos, pero nos garantizan el máximo rendimiento.
  • Transacciones JTA (abstracción para XA): necesitan un transaction coordinator, por lo que añaden bastante overhead, pero por otro lado tiene fuertes garantías transaccionales a través de múltiples recursos.

Y como consejos, en caso de tener un solo recurso utilizar siempre transaction managers nativos. En caso de tener múltiples recursos, mirar la posibilidad de utilizar una combinación de transaction managers nativos, a menos que no podamos soportar la mínima posibilidad de algún rollback por alguna inconsistencia.

Para transacciones JMS, es preferible evitar XA, intentar utilizar transaction manager nativos, pero en este caso tenemos el peligro de recibir el mensaje dos veces en caso de que algo fallara entre el commit de la base de datos y el aknowledge del mensage, así que tendremos que gestionar el doble envio de mensajes (más rápido comprobar el doble envio que el overhead añadido por XA).

Enterprise Integration Patterns with Spring por Mark Fischer

Mark nos presentó el proyecto Spring Integration. Spring proporciona integración para JMS, remoting, scheduling, email y JMX. Spring Integration intenta crear una capa de abstracción para los patrones de integración empresarial, con la filosofía de separar los componentes de negocio del sistema de mensajeria utilizado. Se mostraron ejemplos de algunos patrones como: MessageChannel, Messagen EndPoint, Message Translator, Message Router.

Todo, como no, utilizando annotations.

 


I para terminar, una patatas fritas y unas cervezas para hacer un poco de contactos y hablar con la gente de SpringSource.

Si habéis llegado hasta aquí...vaya paciencia! Nos vemos en Madrid en el Hands-on-Spring!

viernes
jun132008

15 herramientas para desarrollar webs más rápidas

El blog Six Revisions ha recopilado 15 herramientas (la mayoría en forma de plugins para Firefox) que te ayudan a mejorar el desempeño de tus sitios web. Sin duda una lista bastante útil:

1. YSlow para Firebug. YSlow es un plugin construido por Yahoo basado en su ya famoso artículo "Las mejores prácticas para acelerar tu web". IBM ha publicado un artículo sobre la mejor forma de sacarle provecho a este plugin. 

2. Firebug. En esta web ya hemos hablado antes de ese imprescindible plugin para Firefox que te permite hacer debug, inspeccionar y probar páginas web. Entre sus características está una bonita consola para interactuar con la página web mediante javascript.

3. Fiddler 2. Una aplicación standalone y gratuita hecha con el lenguaje .NET. Monitoriza todo el tráfico HTTP entre tu ordenador y la web . En MSDN han  publicado un artículo sobre como sacarle provecho a esta herramienta.En lo personal para este tipo de monitorización suelo usar el plugin para Firefox de TamperData.

4. Cuzillion. Es una aplicación web que te permite construir diferentes layouts de una página por ejemplo poner un script dentro del head o dentro del body. Una vez que tienes el layout puedes simular la forma en que dicha página se descargaría a un navegador y saber cuanto tiempo toma. La idea es que jugando a poner diferentes elementos en diferente orden, puedes encontrar la combinación que más rápido se descarga a un navegador. Esta herramienta fue creada por Steve Souders, el ex jefe de Desempeño de Yahoo!. 

5. Mon.itor.us. Una aplicación web gratuita que te permite monitorizar un sitio web por métricas como tiempo de respuesta, disponibilidad, etc. Incluso te permite establecer alarmas para ciertos parámetros, por ejemplo si tu sitio está caído o si el tiempo de respuesta es demasiado largo. Curiosamente a la hora de escribir este post monitorus esta caído. 

6. IBM Page Detailer. Una aplicación standalone que detecta cuando estas descargando un sitio web con tu navegador y te despliega de forma gráfica la forma en que los componentes del sitio están siendo descargados al browser.  De esta forma puedes analizar el comportamiento de tus sitios y optimizar sus componentes.

7. Httperf. Aplicación standalone para Linux hecha por HP. Te permite simular una carga de trabajo a determinado sitio web y obtener métricas sobre su rendimiento.  Esta herramienta no la conocía, yo suelo usar JMeter para este tipo de pruebas de stress.

8. Pylot. Herramienta opensource en python para realizar pruebas de stress a servidores web y analizar los resultados. Se puede controlar desde un GUI y desde una consola. Lo que no me gusta es que requiere tener instalado phyton en el servidor para que funcione, de todas formas parece una buena opción para este tipo de pruebas. 

9. PushToTest. Otra herramienta gratuita para realizar pruebas de desempeño a servidores web. Además de las típicas métricas de tiempo de respuesta, te guarda el uso del CPU y el uso de la red.  

10. WBox. Una pequeña herramienta opensource multiplataforma que se controla desde consola y realiza pruebas de stress a tus aplicaciones. Lo interesante de WBox es que es muy simple y sencilla de usar.  

11. WebLoad. Herramienta opensourcecon un aspecto muy profesional para realizar pruebas de stress y de carga. A diferencia de las otras, esta herramienta es toda una suite muy completa para realizar este tipo de pruebas. Tiene soporte out-of-the-box para stresar y analizar aplicaciones .NET y JEE y también es fácilmente extensible mediante .NET o Java.

12. DBMonster. Herramienta opensource escrita en Java que analiza la estructura de tu base de datos y su desempeño, básicamente llena tus tablas con datos y realiza queries para generar informes de desempeño.

13. OctaGate SiteTimer. Es una aplicación web que analiza el tiempo que tarda en descargarse una página web, componente a componente. 

14. Web Page Analyzer. Otra aplicación web creada esta vez por los autores del libro WebSite Optimization. Le das la url o directamente pegas el html de tu sitio web y te analiza cosas como el tamaño, el número de imágenes, etc. Al final te da recomendaciones para mejorar el desempeño. 

15. Site-Perf .com Es otra aplicación web que analiza el sitio web que tu le indiques (esta vez lo analiza desde cualquiera de sus tres hosts: 2 en Estados Unidos y uno en Amsterdam). A pesar de que este sitio no te da consejos para mejorar el desempeño, la forma en que te presenta los resultados es muy visual y te permite ver cual es el cuello de botella de tu sitio web de forma simple. En nuestro caso es el banner del openjavaday :P .

Este tipo de listas siempre sirven para conocer herramientas y probarlas, ¿cuáles son las que tú usas? 

viernes
jun132008

Resultados de la encuesta sobre javaHispano.net

Hace un par de semanas hicimos una encuesta para conocer mejor el perfil de los usuarios de javaHispano.net. Todavía no hemos estudiado en detalle los resultados (por tanto, tampoco hemos extraído conclusiones) pero, como prometimos, los hemos hecho públicos:

 

Resultados de la encuesta para desarrolladores

 

Resultados de la encuesta sobre los proyectos

 

Por si a quien que no la cubrió se anima a cubrirla hora, la encuesta todavía permanece activa. Si se cubre una nueva encuesta los resultados se actualizaran automáticamente. Aquí os dejo los enlaces desde donde se pueden cubrir las encuestas:



Encuesta para desarrolladores

 

Encuesta sobre los proyectos (sólo debería cubrirse una por proyecto)

 

Gracias a todos los que habéis participado en la encuesta.

 

jueves
jun122008

Resultados de las elecciones al Netbeans board

Ayer se publicaron los resultados de las elecciones alNetbeans Board, el organismo responsable de la evolución de este entorno de desarrollo. De entre nueve candidatos se elegían dos; un tercer candidato es elegido directamente por Sun Microsystems. Los dos candidatos elegidos son Wade Chandler y Tom Wheeler; los dos participaban ya en el organismo y ha sido reelegidos.

Desde el punto de vista hispano, lo más interesante de esta elección es que uno de los candidatos era uno de los miembros hispanos del Dream Team de Netbeans: Aristides Villarreal. Enhorabuena por haber estado entre los candidatos, y que haya más suerte para la próxima vez, Aristides.