Presentación de Tynamo en el Citiwork

Este Viernes 20 de Mayo haré una presentación de Tynamo en el Citiwork.

La gran ventaja del coworking no es el compartir los gastos de un espacio y servicios de oficina. El valor real del coworking está en el incentivo de las oportunidades de generar redes de colaboración. En este contexto me encontré discutiendo apasionadamente con la gente de CSS Iberica y Blinzy Studios sobre como cada empresa utiliza la tecnología para solucionar unos problemas que se me antojan muy similares. 

La discusión fue ganando masa hasta tal punto que hemos decidido dotarla de un entorno más formal e invitar a otras empresas e interesados a participar de ella. El proximo viernes 20 de Mayo de 10:00 a 13:00 nos reuniremos en la sala C del Citilab a mostrarnos las entrañas de nuestros proyectos, presentar nuestras tecnologías y buscar la formar de aunar y ahorrar esfuerzos. Yo estaré presentando Tynamo en general y en particular mostrare 2 cosas:

  • Cómo usamos Tynamo para hacer prototipos rápidos.
  • Cómo modificar Tynamo para adaptarlo a cualquier estrategía de persistencia (basicamente SQL vs NoSQL).

La entrada es grauita y abierta a todo el mundo. 

Más información: http://www.citilabpro.eu/citiwork/2011/05/18/citiworking/

 

 

 

tapestry-routing 0.0.1 released!

Here comes yet another beautiful little module called tapestry-routing.

In a nutshell, tapestry-routing allows you to provide your own custom mapping between Tapestry pages and URLs.

Did you ever wanted to change the order of the path params in an URL? now you can!

Let's say you have a page: pages.projects.Members which have 2 parameters in its activation context: (Long projectId, Long memberId) and you want the URL for that page to look like /projects/1/members/1 Just add the @At annotation to you page, like this:

package ...pages.projects;
@At(" /projects/{0}/members/{1}")
public class Members {
void onActivate(Long projectId, Long memberId)

That's it!
tapestry-routing Dispatcher will take care of recognizing incoming requests and dispatching the proper render request
tapestry-routing PageRenderLinkTransformer will do the rest of the work, it will transform every Link for a page render request formatting it according to your route rule.

We really need some feedback, so please give it a try:http://tynamo.org/tapestry-routing+guide

Enjoy!

Tynamo, viejas novedades.

Estoy preparando el anuncio de un nuevo módulo de Tynamo  y esto me da un buen pie para hablar del estado de Tynamo en general.

Desde hace un tiempo ya que Tynamo ha dejado de ser solamente un framework orientado a CRUD, de a poco hemos ido incoporando pequeños módulos orientados principalmente a integrar Tapestry5 con otras librerías de terceros o a proveerlo de pequeñas funcionalidades extra. Todo esto con el fin de armar nuestro propio full stack web framework, pero siempre manteniendo la independencia y simplicidad de los módulos por si se quieren usar por separado.

Al día de hoy nuestros módulos son:

  • tapestry-conversations
  • tapestry-exceptionpage
  • tapestry-hibernate-seedentity
  • tapestry-jbpm
  • tapestry-jpa
  • tapestry-jpa-seedentity
  • tapestry-model
  • tapestry-resteasy
  • tapestry-security
  • tapestry-watchdog
  • tynamo-federatedaccounts

tapestry-model es el módulo principal de Tynamo, ya vamos por la segunda versión y está en producción desde hace un tiempo. De la mano de la Tapestry 5.2 han llegado muchas nuevas features, una de las principales es la validación usando el estandar JSR303, gracias a este estandar la integración de otros proveedores JPA distintos de Hibernate se hace mucho más fácil. Pierce T. Wetter, el autor original de tapestry-jpa se ha unido al equipo de Tynamo y junto con Piero Sartini, quien se ha encargado del módulo tapestry-model-jpa, han logrado que finalmente Tynamo sea completamente independiente de Hibernate.

tapestry-security era el módulo más esperado y en poco tiempo se ha convertido en el más popular. tapestry-security es una integración de Tapestry5 con Shiro. Venimos trabajando en un módulo de seguridad que sea independiente de Spring desde la época de Trails 1.2 cuando Shiro era conocido como JSecurity, hemos acompañado la evolución y los cambios de nombre de Shiro (Jsecurity, Ki , Shiro) y hemos ido madurando el código con ellos. Nuestra primera implementación era un port de tapestry-acegi, basicamente era el mismo código pero en lugar de usar Acegi usábamos Shiro. La solución era muy básica con una sola anotación de seguridad (@Secured) y una estructura de contribuciones a los filtros no muy simple (aunque aún así muy dinámica y flexible) que imitaba las funcionalidades de Acegi sin aportar nada nuevo. Gracias a la contribución de Valentin Erastov (aka: xibyte), rápidamente ampliamos la cantidad y variedad de las anotaciones de seguridad manteniendo esa potente simplicidad que diferencia a Shiro de Acegi. Con lo aprendido en el desarrollo de tapestry-security fuimos a hablar con la gente Shiro. Nos recibieron con los brazos abiertos, Kalle (mi co-lead) se hizo commiter de Shiro y las anotaciones que habíamos creado para tapestry-security pasaron a formar parte del core de Shiro.

Además, Kalle también ha sido nombrado commiter en Tapestry, así que ahora tenemos una pata dentro de Tapestry y otra dentro de Shiro lo que nos deja en una excelente posición para continuar mejorando nuestros módulos.

 

 

 

 

tynamo-federatedaccounts 0.0.1 released!

Para aquellos utilizando el módulo de Tynamo tapestry-security hay un nuevo add-on, llamado tynamo-federatedaccounts, que permite autentificación de usuarios via proveedores externos como Facebook, Twitter, Google, etc...

Esta primera versión de tynamo-federatedaccounts solo incluye la integración con Facebook, pero Google y Twitter están en camino.

A principios de 2010 sufrí en carne propia la pesadilla de la integración con lo que en aquel entonces se llamaba Facebook Connect. Era mi primera aproximación a Facebook (de hecho no tenía ni cuenta de usuario) y pasamos varios meses sufriendo la documentación, los casos extremos y la integración con nuestro modulo de seguridad. Toda esa sangre, sudor y lágrimas hoy se ve resumida en este nuevo add-on, que es tan pero tan fácil de usar que yo no quería liberarlo.

Más información:

 

Espero que les sea útil.

PD:- He estado un poco negligente con el anuncio de los releases de tynamo aquí en el blog. Tenemos varios módulos nuevos e incluso tapestry-security está por sobrepasar en popularidad a nuestro módulo principal. En breve haré un post resumen para ponerme al día.

Tynamo, JPA & GAE

Today I was playing with Tynamo & JPA and I found two things that I would like to share.

1) I wanted to check what was the simplest jpa configuration possible and I wanted to see how difficult is to migrate from tapestry-model-hibernate to tapestry-model-jpa using that configuration. It turns out that's really really easy.

  • Change your dependency from tapestry-model-hibernate to tapestry-model-jpa
  • Add hibernate-entitymanager as a dependency (don't forget to exclude slf4j-api)
  • Then configure your persistence.xml using org.hibernate.ejb.HibernatePersistence as a provider. You can even copy the properties from your hibernate.cfg.xml
  • Configure your persistence unit: configuration.add(JPASymbols.PERSISTENCE_UNIT, "nameOfPersistenceUnit");


THAT'S IT!!
More info: http://tynamo.org/tapestry-jpa+guide

2) I struggled with Google App Engine trying to run a very simple tapestry-model-jpa project. It took me a couple of painful tries to realize that GAE supports only JPA 1.0 (I knowwww!!! I should have RTFM!!!!).

Anyway, I'm not giving up on GAE, so next step: tapestry-model-objectify !

Click here to download:
persistence.xml (0 Bytes)
(download)

Tynamo finalista del Vodafone Mobile Clicks 2010


Mobivery se ha presentado al
Vodafone Mobile Clicks con MALCOM, un servicio para gestionar de manera integral el ciclo de vida de una aplicación móvil, y ha sido seleccionada como finalista española. La final tendrá lugar en en Amsterdam los próximos 23 y 24 de septiembre 2010, y competirá con otras start-ups de de Holanda, Portugal y Reino Unido

MALCOM está implementado utilizando frameworks y herramientas del stack de desarrollo de Amneris: Tynamo (obviamente), Tapestry 5, Hibernate, RestEASY, Shiro, etc.

Es un pequeño orgullo y me llena de satisfacción poder presentar en este tipo de foros una aplicación Java, liviana, basada en Tynamo/Tapestry y de alguna manera ayudar a difundir un poco el uso de estos frameworks.

No puedo ni empezar a contarles lo bien que nos vendría la "ayuda" monetaria para la continuidad del proyecto. Así que, pasen y voten por su producto favorito: http://www.<wbr>vodafonemobileclicks.com/vote/
Los votos contarán por un 20% en la decisión final. Todos los votos son de ayuda.


.

tapestry-exceptionpage 0.0.1 released!

El equipo de Tynamo viene haciendo ya varias releases este año (de las que ya tendría que haber hablado, perdón).

En abril hemos liberado tapestry-exceptionpage un pequeño módulo para Tapestry5 que viene a ser la alternativa Tapestry a está vieja y conocida configuración xml.

<error-page><exception-type>java.lang.Throwable</exception-type>   <location>/generalError.jsp</location></error-page>

Tapestry envuelve convenientemente dentro de una ComponentEventException cualquier exception no atrapada y en modo de desarrollo muestra una muy util página de error, pero desafortunadamente eso hace imposible el uso de la configuración estándar de páginas de error en el archivo web.xml. Tampoco es que sea la gloria configurar todas las páginas de error en un mega xml, pero según el caso puede resultar útil.

tapestry-exceptionpage permite contribuir mapeos entre el tipo de las excepciones y las páginas de error usando directamente código Java (Tapestry-IOC). Este mecanismo de configuración es mucho menos "verborrágico" que el estándar de web.xml y mucho más flexible ya que permite especificar mapeos distintos para contextos diferentes.

Para más información al respecto consultar la pequeña guía de tapestry-exceptionpage.

Kudos to Kalle.

Trails is dead, long live Tynamo!

Repitiendo un poco lo que mi compañero Kalle Korhonen comentó en la lista de desarrollo y en la web de Trails: Trails is dead, long live Tynamo!

El titular es un poco amarillista intentando atraer un poco de atención, pero la verdad es que Trails no está muerto, sino que Trails 1.x está en "maintenance mode" y Trails 2 (la nueva versión basada en Tapestry5) ha sido renombrado a Tynamo.

Un resumen (editado de la lista de correos) de las razones del cambio de nombre:

En segundo plano (en realidad en la lista de desarrolladores) hemos estado discutiendo de cual debería ser nuestra estrategia respecto de Tapestry5. Hace más de un año "perdimos" el dominio trailsframework.org (esto es bastante largo de explicar, pero la versión corta es que los committers actuales nunca tuvimos posesión del dominio) y desde ese entonces estamos analizando varias alternativas acerca de como lidiar con esto. Hace un par de meses finalmente decidimos que lo más fácil para nosotros sería renombrar el proyecto y relanzar Trails2 con un nuevo nombre: Tynamo
Esto todavía esta sin publicitar, pero la mudanza ya está en camino, el código ya ha sido trasladado al nuevo repositorio y todos los módulos y paquetes han sido renombrados.
Creemos que hay una gran posibilidad de tener preparada la release inicial de Tynamo para antes de fin de año. Cuando la tengamos haremos el anuncio formal correspondiente.

Así que ya pueden venir a visitarnos a http://tynamo.org/ (esta vez somos los dueños del dominio). El site está prácticamente vacío porque estamos trabajando en él y preparando las releases. Las snapshots ya están disponibles en: http://ci.repository.codehaus.org/org/tynamo/
El repositorio ya está completamente migrado (con log histórico completo), el nuevo dominio funcionando y nuestros continuous integration builds ejecutándose exitosamente, así que estamos nuevamente en carrera con Tynamo. Para el momento en el que anunciemos el proyecto Tynamo a una audiencia más grande, ya deberíamos tener varios nuevos módulos preparados para el release como así también documentación decente (este nunca fue nuestro fuerte) y ejemplos que los acompañen.

Como adelanto puedo comentar que tendremos un nuevo módulo para Envers y uno para RESTeasy. También puedo adelantar que haremos open source la integración con jBPM (tapestry5-jbpm y tynamo-jbpm) que teníamos desarrollada en la empresa.

Como comentaba antes, la versión basada en Tapestry4 está en "maintenance mode" pero nosotros seguimos dando soporte en la lista de usuarios y si se encuentran problemas serios los solucionaremos.

Los desarrolladores queremos agradecer a Codehaus y especialmente a Ben Walding por pacientemente acompañarnos en la transición dándonos soporte y solucionándonos numerosos problemas.

Espero poder comunicarles más novedades pronto.

Stay tuned!


.