Cómo integrar Eastwood en nuestras aplicaciones web

1
7715

Cómo integrar Eastwood en nuestras aplicaciones web

 

1. Introducción

En un tutorial anterior ya os hablamos de Eastwood, y también os mostramos ejemplos sobre cómo utilizarlo para generar gráficas similares a las de Google Chart pero sin usar Google Chart.

Sin embargo, ese tutorial era introductorio, ya que el objetivo que se perseguia con él era mostraros una alternativa a Google Chart que pudieseis utilizar sin necesitar los servicios de Google.

Si recordais desplegabamos un war en Tomcat para poder usar Eastwood. Sin embargo, si queremos desarrollar una aplicación web que utilice Eastwood nos encontramos con un dilema, ¿necesitamos desplegar dos war (el de eastwood y el de nuestra aplicación) para poder generar graficas?, ¿no podriamos hacer que Eastwood forme parte de nuestra aplicacion para desplegar sólo un war?.

Afortunadamente la respuesta es que si, si es posible integrar Eastwood de tal modo que pase a formar parte de nuestra aplicacion y solo sea necesario desplegar un war. Os vamos a enseñar dos maneras de hacer esto, la primera seria con maven y la segunda sería con el método «tradicional» para que podais utilizar un método u otro en función a la forma de trabajar que esteis siguiendo.

 

2. Preparación

Lo primero que necesitamos es el war que utilizamos en este tutorial de eastwood . Para ello lo descargamos tal y como indicamos en ese tutorial y descomprimimos el fichero eastwood-1.0.0.war

 

 

Una vez lo tenemos, debemos abrir el war con la ayuda de 7zip, ark, winzip, winrar, winace, etc. y sacar del war los 3 ficheros jar:

 

 

El cómo operar a partir de ahora con ellos dependerá de la manera en que vayamos a integrar Eastwood en la aplicación, o con maven o con el método tradicional.

 

3. Usando maven

Para poder usar este método necesitas un repositorio de maven donde poder almacenar Eastwood, de tal modo que luego sea posible integralo con la aplicacion indicando la dependencia en el pom.xml. Leete este tutorial si quieres saber como crear un repositorio para maven.

Una vez creado, es necesario incluirlo en el repositorio con el siguiente comando adaptado a vuestro caso particular:

mvn deploy:deploy-file -DgroupId=jfree -DartifactId=eastwood -Dversion=1.0.0 -Dpackaging=jar -Dfile=/home/raul/Desktop/eastwood.jar -Durl=scp://servidorAutentiaMaven/var/maven/repository -DrepositoryId=servidorAutentiaMaven

Hay que tener en cuenta que el jar que se está dejando en el repositorio es uno de los tres jar descomprimidos anteriormente (en concreto el eastwood-1.0.0.jar ), y que lo he renombrado como eastwood.jar porque ya indico la versión con maven

Una vez que Eastwood forme parte de vuestro repositorio debeis añadir las siguientes dependencias en el pom.xml del proyecto:

jcommon y jfreechart están en repositorios públicos, de tal modo que no es necesario subirlos a vuestro repositorio.

Una vez hemos añadido estas entradas en el pom.xml ya tenemos las librerias necesarias para poder usar Eastwood. Solo faltaria configurar el web.xml, que explicaremos más adelante.

 

4. Usando el método tradicional

Debeis copiar los 3 ficheros .jar descomprimidos en el apartado 2 dentro del directorio /WEB-INF/lib/ de vuestra aplicación para que permanezcan junto con el resto de librerias.

 

Una vez hemos añadido estas librerias en el WEB-INF/lib ya tenemos las librerias necesarias para poder usar eastwood. Solo faltaria configurar el web.xml, que explicaremos en el próximo apartado.

 

5. Cambios en el web.xml

Ya tenemos Eastwood formando parte de nuestra aplicación, ahora lo único que necesitamos es poder utilizarlo. Eastwood utiliza un servlet para realizar su labor, así que deberemos declarar y configurar el servlet en el web.xml añadiendo las siguientes líneas:

Con esto declaramos el servlet y configuramos la aplicacion para que el servlet escuche peticiones en /chart

 

6. Creando imagenes

Antes, para generar una imagen como la siguiente:

 

Necesitabamos crear una imagen como ésta, que obliga a depender de un segundo war y a saber en qué máquina está instalado y en qué puerto está escuchando el contenedor web:

<img src=»http://localhost:8080/eastwood/chart?cht=p3&chd=s:Uf9a&chs=400×300&chl=Rails|PHP|Java|.NET»/>

Sin embargo, tras haber incluido Eastwood en nuestro proyecto es posible obtener la misma gráfica declarando ésta otra imagen. Como podeis ver no necesitamos saber nada.

<img src=»chart?cht=p3&chd=s:Uf9a&chs=400×300&chl=Rails|PHP|Java|.NET»/>

 

Tan solo recordaros que, chart es el parámetro que configuramos en el web.xml

 

7. Conclusiones

Generar gráficas con Eastwood con lo explicado en el tutorial anterior era muy sencllo pero tenia una limitación, y es que era necesario desplegar 2 war para poder usarlo. En este tutorial os hemos explicado cómo poder integrar Eastwood en vuestra aplicación sin depender de un segundo war, con lo que ya teneis una excusa menos para hacer vuestras aplicaciones más vistosas 🙂

Espero que os sea de utilidad.

 

1 Comentario

  1. Sabes si se puede integrar eastwood en google app engine?
    segun yo no, pero espero que me digas que si y si se puede, me digas como jeje

    yo hice una prueba con la forma que expusiste: Cómo integrar Eastwood en nuestras aplicaciones web , funciono cuando lo subi a un servidor de aplicaciones tradicional, pero cuando lo pruebo para app engine me manda el siguiente error:

    java.lang.NoClassDefFoundError: java.awt.Font is a restricted class. Please see the Google App Engine developer\\\’s guide for more details.
    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
    at org.jfree.eastwood.ChartServlet.init(ChartServlet.java:145)
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:362)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

    ojala me puedas ayudar.

    Muy buenas aportaciones las tuyas, gracias.

Dejar respuesta

Please enter your comment!
Please enter your name here