Jugando con JRuby
Publicado por el Lunes, 21 de Abril de 2008
Asís y yo hemos decidido hablar un poco sobre JRuby en el seminario introductorio de Rails del jueves, ya que esperamos que la mayoría de los asistententes vengan del mundo Java.
Para preparar el material he vuelto a revisitar la página del proyecto que tenía un poco abandonada. Me ha sorprendido lo mucho que han avanzado y como han mejorado la integración con Java. Es bastante sencillo:
include Java
import 'java.util.ArrayList'
list = ArrayList.new
list.add "uno"
list.add "dos"
list.add "tres"
list.each do |n|
puts "num: #{n}"
end
list.class.name # => "Java::JavaUtil::ArrayList
list.java_class.name # => "java.util.ArrayList"
Esto y mucho más, en el wiki. La verdad, crear ventanas swing desde jirb hace que un escalofrio te recorra toda la espalda. Curioso cuanto menos.
NOTA: Un día de estos pruebo a desplegar alguna de nuestras aplicaciones con JRuby en un Tomcat utilizando Goldspike y os cuento.
¿Quieres trabajar en Trabe Soluciones?
Publicado por el Sábado, 12 de Abril de 2008
Trabe Soluciones está creciendo. Ahora que nos vamos a mudar a unas oficinas más amplias tenemos una vacante. La oferta de trabajo que estamos distribuyendo es la siguiente.
Buscamos personas para trabajar en A Coruña.Trabe te necesita
Nos gustaría que supieses desarrollar aplicaciones web MVC con J2EE y Ruby on Rails, que controlases de HTML, CSS y Javascript, que tuvieses conocimientos de diseño gráfico, que administrases servidores, que te sintieses cómodo en Linux, que te gustase usar software libre,...
Si esto te describe ven corriendo. En caso contrario, no te preocupes, valoramos la experiencia que tengas, pero también nos interesa tu pasión y tus ganas de aprender, de trabajar de una manera diferente, de asumir responsabilidades y de crecer con nosotros.
Te ofrecemos unas excelentes condiciones. Todo lo que te ofrecen el resto de ofertas de trabajo y mucho más: horario flexible, oficina céntrica(nada de polígonos), plantilla joven, café a media manaña, no llevamos corbata ni traje... Nos importa tu calidad de vida.
Si quieres saber más de nosotros, puedes echar un vistazo a nuestra web (http://www.trabesoluciones.com) o a nuestro blog (http://4trabes.com), o directamente contactar con nosotros para plantearnos cualquier duda (contacto@trabesoluciones.com).
Esperamos tu curriculum en rrhh@trabesoluciones.com.
Ya han llegado los primeros CVs. ¿A qué esperáis para enviar el vuestro?
Feeds RSS con Struts y RomeRSS
Publicado por el Miércoles, 09 de Abril de 2008
Sí amigos, Struts no está muerto, quizás superado, pero no muerto. Y como las cosas son así, hoy vamos a aprender (a la velocidad del galgo) como “montárnoslo” para servir feeds RSS desde nuestras acciones Struts utilizando la librería RomeRSS.
¿Para qué qerríamos hacer esto en lugar de servir los RSS a través de un Servlet específico? Sencillo. Para reaprovechar toda la infraestructura que tengamos montada para nuestra aplicación: superclases Action con comportamiento común, una cadena de filtros de preprocesado, etc, etc.
Mejor con un ejemplo. Vamos a procurar hacer las cosas de manera correcta, así que vamos a encapsular el uso de RomeRSS en una clase RSSFeeder para desacoplar nuestra aplicación de la librería. Algo así…
public class RSSFeeder {
private HttpServletRequest request = null;
private HttpServletResponse response = null
private SyndFeed feed = null;
public RSSFeeder(HttpServletRequest request,
HttpServletResponse response) {
this.request = request;
this.response = response;
this.feed = new SyndFeedImpl();
this.feed.setFeedType("rss_2.0");
// ... más inicialización ...
}
public void setTitle(String title) {
feed.setTitle(title);
}
// ... Y toda una "pléyade" the métodos set para establecer
// el contenido del RSS
public void writeFeed() throws RSSFeederException {
try {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/xml;charset=utf-8");
Writer writer = response.getWriter();
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer);
} catch(Exception e) {
throw new RSSFeederException(e);
}
}
}
No me paro en la generación del feed. Quién tenga interés por saber como se trabaja con RomeRSS puede echarle un ojo a su wiki.
Ahora nuestra acción de Struts…
public abstract class ExampleRSSAction extends BaseAction {
public ActionForward doExecute(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException, RSFeederException {
RSSFeeder rssFeeder = new RSSFeeder(request, response);
rssFeeder.setTitle("Example feed");
// ... Más y más construcción del feed ...
rssFeeder.writeFeed();
return null;
}
}
BaseAction es una clase plantilla que contiene código centralizado para la gestión de errores y otras cosas (el comportamiento común, vamos). Sus hijas sólo implementan el método doExecute que contiene la “chicha” de la acción.
Por último, el mapping en el satánico struts-config.xml.
<action path="/rss/example"
type="com.trabesoluciones.app.controller.actions.rss.ExampleRSSAction"
scope="request"/>
Listo. Tras el churro de código, la explicación. El secreto del éxito de esta empresa es romper el ciclo normal de Struts de petición, acción y forward/redirect (las acciones suelen devolver un objeto ActionForward). Para ello, nuestro feeder escribe directamente en el Writer de salida del servlet y nuestra acción devuelve un mágico null.
Y no lo olvidéis: si esto fuera un código de verdad: ¡¡COMENTARIOS!!
Pretty URLs en Java: Outbound rules con URLRewriteFilter
Publicado por el Martes, 08 de Abril de 2008
Hace ya algunos meses os hablamos de un interesante modo de conseguir URLs bonitas sin depender de Apache. Como se comenta en ese post, URLRewriteFilter puede ayudarnos a conseguir ese propósito.
Hoy nos hemos encontrado con un problema con las outbound rules: siguiendo escrupulosamente la documentación proporcionada en la página de URLRewriteFilter, no era posible hacer que las outbound rules con parámetros funcionasen correctamente. Según la documentación del filtro, una outbound rule se escribe tal que así:
<outbound-rule>
<from>^/world.jsp?country=([a-z]+)&city=([a-z]+)$</from>
<to>/world/$1/$2</to>
</outbound-rule>
Tras un buen rato tirándonos de los pelos y haciendo todo tipo de experimentos se nos encendió una lucecita. "¿Acaso el '?' no tiene un significado específico en una expresión regular?¿No habría que escaparlo? Y escribimos la expresión escapando el '?':
<outbound-rule>
<from>^/world.jsp\?country=([a-z]+)&city=([a-z]+)$</from>
<to>/world/$1/$2</to>
</outbound-rule>
Y todo comenzó a funcionar ,con las limitaciones inherentes a este tipo de solución (que veremos en algún post futuro) pero correctamente.
