Programación en Java pretende ser una web de referencia en castellano sobre programación en Java. Aquí encontrarás trucos de programación, resolución de dudas comunes, artículos, reseñas de libros y mucho más
A continuación se muestran los títulos de las 5 últimas entradas. Pero en esta misma página puedes encontrar más...
También puedes navegar por los menús de categorías y los archivos por fecha
La gente de Spring Framework acaba de liberar Spring 3.0 release candidate, por lo que se va acercando el momento de que la versión final de esta librerÃa salga a la luz. Esta versión ya tiene todas las caracterÃsticas claves que formarán parte de Spring 3.0 por lo que merece la pena comenzar a investigar las novedades
- Completamente basado en Java 5. Esta la primer versión de Spring que necesita Java 5 o superior para funcionar, y que utiliza la sintáxis de Java 5 en todo el API de Spring, y también en su implementación. Por ejemplo, el API del BeanFactory retorna instancias tipadas con generics cuando es posible, y un ApplicationListener puede declarar tipos de eventos especÃficos con generics. En comparación, Spring 2.5 (la versión actual de Spring) todavÃa es compatible con el JDK 1.4, aunque mucha funcionalidad de alto nivel se construÃa en Java 5.
- Lenguaje de expresiones de Spring (SpEL – Spring Expression Language). Un parser de expresiones para usar en la definición de los beans, que permite referenciar a estructuras anidadas (por ejemplo, propiedades de otros beans), y también a estructuras del sistema (por ejemplo, variables de entorno) usando la sintáxis común #{…} en el valor de las propiedaes de un bean. Esto también sirve como base para otras caracterÃsticas basadas en expresiones en otros proyectos de Spring.
- Soporte extendido para componentes basados en anotaciones. Se incluye el concepto de clases de configuración y métodos de factory anotados – ¡las caracterÃsticas fundamentales del proyecto Spring JavaConfig finalmente están disponibles en Spring!. Sprint también permite inyectar valores de configuración a través de expresiones @Value, y referirse a valores de la configuración usando expresiones dinámicas #{…} o estáticas ${…}.
- Modelo de estereotipos. Permite crear anotaciones «de atajo» a través del uso de meta-anotaciones. Por ejemplo, para determinar scopes predeterminados o caracterÃsticas de transacción predeterminadas en estereotipos propios. Imaginen una anotación propia @MiServicio que indica @Service, @Scope(«request») y @Transactional(readOnly=true) usando una única anotación. Este es el principio de No Repetirse aplicado al uso de anotaciones de componentes.
- Anotaciones de inyección de dependencias estándar. Spring 3.0 provee un soporte inicial para el JSR-330 specification for Dependency Injection in Java- inyección a través de anotaciones usando javax.inject.Inject y sus calificadores asociados y modelo de proveedores, como una forma alternativa a la anotación @Autowired propia de Spring. Tengan en cuenta que el JSR-330 todavÃa no está terminado; el soporte para javax.inject en Spring se irá completando a medida que madure la especificación.
- Modelo de validaciones declarativo basado en anotaciones de restricciones. Configuración al estilo de Spring de un proveedor de JSR-303 Bean Validation (como ser, Hibernate Validator 4.0). Spring 3.0 viene con una opción para hacer validaciones basadas en anotaciones en Spring MVC, exponiendo una vista unificada cuando no se cumplen las restricciones. Tengan en cuenta que el JSR-303 está próximo a terminarse, aunque todavÃa puede tener modificaciones.
- Soporte para REST extendido. Soporte nativo para REST en Spring MVC, como ser mapeos de peticiones REST, extracción de variables URI a través de parámetros @PathVariable, y resolución de vistas guiadas por la negociación del contenido. Imaginen Spring MVC 2.5 con soporte de primera clase para REST – y manteniendo en enfoque de MVC. Hay soporte para el lado del cliente de REST a través de la clase RestTemplate.
- Mapeo Objeto/XML (OXM). Tal como se usaba en Spring Web Services, ahora dentro del núcleo de Spring Framework. Abstracciones para el marshalling y unmarshalling con soporte directo para JAXB 2, Castor, etc. Se provee opciones de integración para soporte de contenidos XML en Spring MVC y Spring JMS.
- Soporte para Portlet 2.0. Spring MVC soporta completamente los entorno de Portlet 2.0 y el nuevo modelo de recursos y eventos de Portlet 2.0. Se incluyen facilidades de mapeo para peticiones de portlet tÃpicas: @ActionMapping, @RenderMapping, @ResourceMapping, @EventMapping
- Nuevo sistema de scheduling. Nuevos mecanismos de TaskScheduler y Trigger con soporte estilo cron, alineados con el mecanismo de Spring TaskExecutor. Spring 3.0 provee un namespace que soporta anotaciones @Async y @Scheduled. Esto se puede ejecutar sobre pooles nativos de hilos o en pooles manejados por Servidores de Aplicaciones, incluyendo soporte para los servidores de aplicaciones Java EE más populares.
- Y por último, soporte inicial para Java EE 6. Spring 3.0 soporte el uso de JSF 2.0 y JPA 2.0 dentro de Spring, junto al soporte de JSR-303 y JSR-330. Se irá incluyendo soporte para otras tecnologÃas de Java EE 6 (como Servlet 3.0) a medida que se vayan concretando los productos.
Tomado del blog de Spring de traducido por dosideas.com
Ya ha salido la nueva versión de la librerÃa de búsquedas para Java Lucene, en su versión 2.9
Esta versión, a pesar de intentar guardar la compatibilidad hacia atrás, se ha visto obligada a romperla en ciertos puntos, por lo que si la vas a utilizar deberÃas leer los cambios que rompen la compatibilidad (en inglés)
Algunos de los cambios son:
- Búsqueda y cacheo por segmento
- Se han añadido capacidades de búsqueda a IndexWriter de casi tiempo real
- Nuevos tipos de Query
- Nuevas queries multitérmino más escalables
- Soporte para Unicode mejorado
- Nuevo vector resaltador para grandes documentos
- Mejor tratamiento para resultados numéricos
Buscando en la web hemos encontrado esta introducción a Log4J, la librerÃa para hacer log en las aplicaciones java de forma sencilla.
Esta librerÃa java es un paso más allá del simple System.out.prinln a la hora de que el código java registre en un archivo, o cualquiera de los adaptadores de salida, información de las operaciones que va realizando

Magnolia ha liberado la versión 4.1 de su CMS basado en Java, la cual simplifica aún más la creación de sitios web empresariales ahora que se le han añadido varÃas plantillas para soluciones personalizadas a sus extensas funcionalidades integradas por defecto. El Standard Templating Kit incluye ademas una sofisticada lógica para exhibir eventos, calendarios, foros, glosarios, preguntas frecuentes (FAQ), anuncios con varias imágenes, nubes de categorÃas, fusión de flujos RSS y más. Magnolia 4.1 también viene con nuevas funcionalidades como el soporte para Contenigo Generado por el Usuario (UGC), un motor de transformación de imágenes, y una gestión de Activos Digitales de tipo pluggin (DAM).
El Standard Templating Kit ha sido mejorado para Magnolia 4.1. Incluye nuevas plantillas listas para ser utilizadas de manera a generar paginas web completas, asà como nuevos párrafos que generan solo partes de las páginas:
Nuevas plantillas
- Plantilla de descripción de Noticias
- Plantilla de descripción de Eventos
- Plantilla de descripción de CategorÃa
- Plantillas de Glossario, Letra y Termino
- Plantilla de preguntas frecuentes (FAQ)
Nuevas plantillas de párrafos
- Elementos destacados & carrusel
- Comentarios
- Foro
- Fusión de RSS
- Nube de Categoria
- Detalles de Contacto del anuario
Desde el pasado dÃa 24, está disponible Galileo, la versión 3.5 de Eclipse con importantes novedades.
La semana pasada el Java Community Process, el organismo que crea y mantiene las especificaciones (JSR) que definen la plataforma Java estrenó una nueva web y, lo que es más importante, una nueva normativa. Se ha actualizado a la versión 2.7, cuyas novedades se resumen aquÃ.
En general, las novedades tratan de incrementar la transparencia en el funcionamiento de este organismo. A partir de esta versión del JCP, los grupos de expertos deben indicar de un modo perfectamente claro los términos de la licencia para la especificación, para la implementación de referencia y para el test de compatibilidad. Se desaconseja los grupos de expertos que manejen documentación «confidencial», o que empleen mecanismos de comunicación internos no públicos, y se les incentiva a responder a cualquier duda o comentario que la comunidad realice acerca de su trabajo.
En esta entrada os mostraremos cómo enviar sms desde una aplicación Java. Seguro que esta funcionalidad os la ha pedido algún cliente que querÃa integrar directamente en vuestra aplicación la posibilidad de enviar un sms en alguna situación como comunicarse con sus propios clientes, enviar una alerta en determinadas ocasiones, etc…
Lo primero es encontrar un proveedor que permita el envÃo de sms mediante una conexión a su servidor. Un proveedor para enviar sms sirve de intermediario entre nuestra aplicación Java y los operadores de telefonÃa móvil. La misión del programa Java será por tanto conectarse de algún modo al proveedor elegido (HTTP, SMTP…) y pasarle los datos del sms en algún formato (con los propios parámetros de HTTP, con un xml…).
Después de buscar entre varios proveedores, nos hemos quedado con la pasarela de envÃo de sms de Altiria. El envÃo de sms se realiza con este proveedor mediante una petición POST a su servidor con los datos del sms que se quiere enviar como parámetros de la propia petición, siendo los más importantes el contenido del sms y los destinatarios. Se puede encontrar el documento de especificaciones de la conexión también en su web.
Queremos resaltar que el para que el ejemplo que ponemos a continuación funcione y envÃe un sms, es necesario ponerse en contacto con Altiria y contratar un bono de envÃo de sms que permita la conexión a su pasarela de envÃo. El ejemplo sirve para ilustrar lo fácil que serÃa el envÃo del sms una vez contratado el bono.
Ya tenemos el proveedor y el mecanismo de envÃo (HTTP). Ya sólo queda implementar esta conexión HTTP en nuestro programa Java. Para ello necesitamos un cliente HTTP para realizar la conexión. Hemos elegido la librerÃa HTTP de Jakarta, (HttpClient) que debe estar presente en el classpath de nuestra aplicación. El siguiente código realiza la conexión enviando los parámetros del sms.
//Se inicia el objeto HTTP
HttpClient client = new HttpClient();
client.setStrictMode(true);
//Se fija el tiempo máximo de espera de la respuesta del servidor
client.setTimeout(60000);
//Se fija el tiempo máximo de espera para conectar con el servidor
client.setConnectionTimeout(5000);
PostMethod post = null;
//Se fija la URL sobre la que enviar la petición POST
//Como ejemplo se supone www.pasarela_push_altiria.com/post/sms
post = new PostMethod("http://www.pasarela_push_altiria.com/post/sms");
//Se fija la codificación de caracteres en la cabecera de la petición
post.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
//Se crea la lista de parámetros a enviar en la petición POST
NameValuePair[] parametersList = new NameValuePair[3];
parametersList[0] = new NameValuePair("dest", "34600111222");
parametersList[1] = new NameValuePair("dest", "34600111333");
parametersList[2] = new NameValuePair("msg", "Mensaje de prueba");
//Se rellena el cuerpo de la petición POST con los parámetros
post.setRequestBody(parametersList);
int httpstatus = 0;
String response = null;
try {
//Se envÃa la petición
httpstatus = client.executeMethod(post);
//Se consigue la respuesta
response = post.getResponseBodyAsString();
}
catch (Exception e) {
//Habrá que prever la captura de excepciones
return;
}
finally {
//En cualquier caso se cierra la conexión
post.releaseConnection();
}
//Habrá que prever posibles errores en la respuesta del servidor
if (httpStatus!=200){
return;
}
else {
//Se procesa la respuesta capturada en la cadena ‘‘response’’
} |
Este código se traduce en el envÃo de un sms con el texto «Mensaje de Prueba» a los móviles 34600111222 y 34600111333.
De manera a poder dirigirse de manera más directa y concreta al mercado hispano, Magnolia International Ltd. ha sacado hoy su sitio web totalmente en castellano (http://www.magnolia-cms.com/es/home.html), en él se pueden encontrar todas las informaciones en cuanto al CMS Java Opensource más intuitivo y fácil de utilizar del mercado, de hecho el lema de Magnolia “Simple is Beautiful†es un lema que los desarrolladores y jefes de producto en Magnolia siempre han tenido en cuenta al momento de desarrollar nuevas funcionalidades dentro de Magnolia, no es suficiente que Magnolia sea capaz de hacer una tarea propia a un CMS, sino que lo hace de manera sencilla y elegante. Al mismo tiempo Magnolia anuncia las dos últimas novedades:
El lanzamiento de Magnolia On Air(http://www.magnolia-cms.com/es/home/products/onair.html) el producto Magnolia que cumple con la necesidad de los medios modernos de comunicación de capturar, readaptar y publicar contenidos rápidamente en la web. La producción continua de flujo de trabajo reduce significativamente los costos, lleva contenido rico en medios a la web primero e invita a la participación de la comunidad.
El lanzamiento de la nueva versión 4.0(http://www.magnolia-cms.com/es/home/4-0.html) la cual cuenta entre otras cosas la integración total de las plantillas de tipo FreeMarker y eso a nivel de repositorio, las plantillas Magnolia no son más que otro contenido dentro del repositorio, se pueden validar, versionar, replicar a varias instancias, exportar e importar. Otra novedad más es la integración del Standard Template Kit STK, el cual es todo un sitio montado con las últimas novedades de Magnolia y que da un ejemplo de las mejores prácticas de desarrollo a seguir al momento de desarrollar con Magnolia 4.0
Las excepciones de tipo NullPointer son las causas de excepción en tiempo de ejecución más comunes.
Todos los valores en Java, excepto las primitivas, son referencias a objetos y todos tienen un valor por defecto, el valor null, que indica que el objeto no tiene asignado ningún valor. A un objeto con valor null, no inicializado, que no referencia ningún objeto, no se le puede aplicar ningún método, siendo el resultado el lanzamiento de una excepción de tipo NullPointerException
Una excepción de tipo NullPointerException lleva asociada la información de la lÃnea de código donde se produjo el error. El mecanismo para detectar y corregir el error es directamente ir a esta lÃnea de código y averiguar cuál de los objetos involucrados en la operación es el que no ha sido inicializado. Una vez detectado, será necesario inicializar el valor del objeto, pero siempre teniendo cuidado de no hacerlo para simplemente eliminar el error, sino que se le debe asignar un valor acorde con la lógica propia del programa.
class Casa{
private long precio;
public Casa (long precio){
this.precio = precio;
}
public long getPrecio(){
return precio;
}
public class Vender {
private Casa casa;
public static void main(String[] args){
Vender vender = new Vender();
System.out.println(vender.casa.getPrecio());
}
} |
Obviamente al ejecutar este ejemplo, se producirá un error indicando la lÃnea concreta del error, y revisando esta lÃnea se puede ver que la casa no está inicializada, y al no tener una referencia de la misma no se puede operar sobre el objeto y se lanzará la excepción NullPointerException.
Por ejemplo, el error se podrÃa corregir inicializando el objeto casa incluido en el objeto Vender.
private Casa casa = new Casa(100000); |
Oracle adquiere Sun. Esta noticia afecta de pleno al mundo Java.
¿cómo afectará el hecho de que una empresa con productos con licencias de pago tome el control de otra, Sun, que habÃa apostado por las licencias Open Source (aunque a su particular modo)?
Desde que saltó la noticia, los comentarios la misma ha inundado en el universo de los bloggers dedicados al desarrollo de Java. La realidad y la profundidad de los cambios los descubriremos en los próximos meses.