Y el sueño se hizo realidad... ¡¡¡Somos campeones del mundo!!! España se ha ganado un hueco en el olimpo del fútbol gracias a un gol de Iniesta en la segunda parte de la prórroga (115′) de la final del Mundial de Sudáfrica ante una Holanda que repartió de lo lindo y a pesar del pésimo arbitraje de Howard Webb. Tuvimos que sufrir pero mereció la pena y el sueño, dejó de ser tal, para convertirse en realidad. ¡¡¡Enhorabuena campeones!!!
- Autor: admin
- Publicado: Jul 9th, 2010
- Categoria: Articulos, Programación, Software Libre
- Comentarios: None
Crea tus Feed con RSS o Atom con Spring 3.0 y REST
Hola Gente, regreso a las andadas varios meses después con una serie de artículos sobre Spring 3.0. El primero de ellos sera de unas clases nuevas que nos ofrece Spring MVC 3.0 para crear nuestros propios Feed con 2 formatos diferentes, RSS 2.0 o Atom.
Primero vamos a conocer las 2 clases abstractas disponibles desde Spring 3.0 que vamos a usar
AbstractRssFeedView
AbstractFeedView es la clase para crear nuestra vista principal de RSS y esta a su vez se extiende de AbstractView nos ofrece metodos para crear los encabezados de nuestro RSS.
AbstractAtomFeedView
Esta clase abstracta extiende de AbstractAtomFeedView y esta tambien se extiende de AbstractView.
No es posible crear una sola clase para manejar los dos formatos, asi que trabajaremos solamente con RSS, el proceso para ATOM es practicamente el mismo.
Extendemos AbstractRssFeedView y creamos la siguiente vista. Se deben implementar 2 metodos obligatoriamente, el primero es para crear el encabezado del RSS (ojo, si no lo llenas bien recibiras una bonita excepcion) y el otro metodo es para setear todo el cuerpo del RSS.
public final class MyViewFeedRssView extends AbstractRssFeedView { /** * En el caso de los RSS debemos crear el Channel, parece la gente de Spring se olvido de hacerlo por nosotros, ojo * con llenar bien el Channel. */ @Override protected Channel newFeed() { final Channel channel = new Channel("rss_2.0"); channel.setPubDate(new Date()); channel.setDescription("RSS Description"); channel.setTitle("TITLE"); channel.setLink("link"); channel.setCopyright("2010"); channel.setPubDate(new Date()); return channel; } /** * Build Feed Entries. */ @SuppressWarnings("unchecked") @Override protected List buildFeedEntries(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { // Obtenemos las entradas que vienen en el modelo desde el Controller List contentList = (List) model.get("entries"); // Creamos una lista de clase de Item, el objeto de ROME que refleja cada elemento del RSS List entries = new ArrayList(contentList.size()); // Iteramos nuestras entradas del blog for (EntriesBlog content : contentList) { final Item item = new Item(); String date = String.format("%1$tY-%1$tm-%1$td", content.getPublicationDateTweet()); item.setTitle(String.format("On %s, %s publish", date, content.getQuestionBean().getQuestionName())); item.setPubDate(content.getPublicationDateTweet()); item.setLink("http://www.encuestame.org"); entries.add(entry); } return entries; } }
Para que esta vista pueda ser interpretada por el MVC de Spring, debemos definir un RESOLVER para que pueda encontrar nuestra vista de RSS, yo siempre le doy un orden prioritario, por si tuvieramos otros RESOLVERS definidos en nuestro MVC.
Tambien agregamos como un Bean nuestra nueva vista y recordemos el ID que pronto lo usaremos.
Ahora vamos con el Controller, que es el encargado de recibir la peticion del Dispacher Servlet , usaremos Anotaciones y mapeo con REST porque somos muuuuu modernos
. Yo extendi de una clase abstracta, que no tiene nada pero no es necesario para nuestro ejemplo.
@Controller public class RSSFeedController extends AbstractFeedController { /** * Build Feed Body. */ private void buildTweetPollFeedBody(String username, Model model, HttpServletRequest request, User user){ model.addAttribute("username", username); model.addAttribute("feedTitle", String.format(TWEET_POLL_FEED_TITLE, username)); model.addAttribute("url", buildDomainWithRequest(request)); //buscamos nuestras entradas de nuestro blog, por poner un ejemplo final List entries = getEntries(user.getUsername()); // las guardamos en el modelo que pasaremos a la vista y usaremos mas adelante. model.addAttribute("entries", entries); } /** * Display RSS Feed. */ // Utilizar REST es sencillo, solo debemos definir la variable entre llaves y llamarla con la anotacion @PathVariable @RequestMapping(value = "/feed/{username}/entries.rss", method = RequestMethod.GET) public String tweetPollRss(@PathVariable String username, Model model, HttpServletRequest request) { // Como queremos utilizar el mismo RSS para diferentes usuarios, buscamos nuestro usuario. final User user = getByUsername(username); if(user == null){ //TODO: if null do something. } else{ // Como somos muy ordenados creamos otro metodo. this.buildTweetPollFeedBody(username, model, request, user); } // Aqui regresaremos una cadena, que no es mas que el ID de nuestra VISTA del Bean RSS. return "rssFeedView"; } }
Una vez creada toda esta estructura, lo siguiente es pan comido, simplemente cargar en el url la direccion de la siguiente manera, sustituyendo la variable {username} por el usuario virtual para que nos regrese los RSS de ese usuario.
http://localhost/feed/bonachon/entries.rss
Preguntas?
- Autor: admin
- Publicado: Jun 26th, 2010
- Categoria: Programación, Software Libre
- Comentarios: 1
Java 4 Ever
Con un toque made in Hollywood, excelente trailer de una historia de amor por Java, no tiene desperdicio. Lo que mas me gusta es el reparto de actores y atrices. Scala Johansson
- Autor: admin
- Publicado: Abr 6th, 2010
- Categoria: Articulos, Programación
- Comentarios: 1
Analíza la calidad de tu código Java con Sonar 2.0
Sonar es un proyecto OpenSource de codehaus.org para analizar la calidad tu código en Java con diferentes tipos de métricas, solo funciona con proyectos construidos con Maven2.
Para descargar el proyecto http://sonar.codehaus.org/downloads/
La Instalación es bien sencilla, primero debes descomprimir el ZIP que descargaste y modificar el archivo sonar.properties:
#--------------------------------------------------------- # WEB # THESE SETTINGS ARE USED ONLY IN STANDALONE MODE. IGNORED WHEN THE WAR IS DEPLOYED ON A JEE SERVER. #--------------------------------------------------------- # Listen host/port and context path (for example / or /sonar). Default values are 0.0.0.0:9000/ #sonar.web.host: 0.0.0.0 sonar.web.port: 8080 #sonar.web.context: /
La primera propiedad se refiere al IP donde tienes instalado el sonar, el segundo el puerto y la tercera propiedad el contexto en tomcat o jboss, si estamos trabajando con virtualhost no creo que haga falta que pongas un contexto.
#----- MySQL 5.x/6.x # Comment the embedded database and uncomment the following lines to use MySQL sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8 sonar.jdbc.driverClassName: com.mysql.jdbc.Driver sonar.jdbc.validationQuery: select 1 #----- Global database settings sonar.jdbc.username: sonar sonar.jdbc.password: sonar sonar.jdbc.maxActive: 10 sonar.jdbc.maxIdle: 5 sonar.jdbc.minIdle: 2 sonar.jdbc.maxWait: 5000 sonar.jdbc.minEvictableIdleTimeMillis: 600000 sonar.jdbc.timeBetweenEvictionRunsMillis: 30000
En mi caso decidi conectarlo con MySQL aunque por defecto unsa una base de datos local en Derby, debes comentar las lineas de derby y descomentar la base de datos que tu eligas, hay buen menú donde elegir, y tal vez modificar datos como el usuario y la contraseña de conexión a la bd.
Llega la hora de crear el war, en la carpeta war, corres el comando build-war.sh y publicas en tu contenedor web para java el proyecto.
El tercer paso y mas importante es la configuracion en settings.xml en Maven2, en tu repositorio local.
<profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url> <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver> <sonar.jdbc.username>sonar</sonar.jdbc.username> <sonar.jdbc.password>password</sonar.jdbc.password> <sonar.host.url>http://tudominio:8080</sonar.host.url> </properties> </profile> </profiles>
Esta sección se agrega en la parte de PROFILES en settings.xml en Maven2. Con esto lograremos que nuestro proyecto pueda publicarse en Sonar.
Ahora, la parte mas sencilla, navegas al path de tu proyecto y corres el comando siguiente,
mvn sonar:sonar y el resto es pan comido, en este proceso Sonar analizara tu código y creará las métricas en el portal. Algo como lo siguiente.
http://nemo.sonarsource.org/





Últimos comentarios