Loading
Print
Home

Tynamo is model-driven, full-stack web framework based on Tapestry 5.

Tynamo's mission is to make web application development in Java simpler. We leverage existing technologies where possible and provide integrations with proven, clean and compact libraries rather than limit ourselves only to standard Java (JSRs). Tynamo is both comprehensive and modular so you are free to choose the parts you like from our full stack. And finally, we like Tapestry and our modules use Tapestry IoC extensively.

Quick status update

Several stable releases, Tynamo-archetype available and ready for consumption at Maven Central repo. Working on model/JPA2 support.
Full web integration testing in a single JVM

The most well-known web integration testing suite around is probably Selenium, but I must say that I'm more and more happy with HtmlUnit-based tests only. Why? The big difference is that I can run all of my HtmlUnit-based tests within my IDE without extra configuration and they run an order of magnitude faster than the multi-process Selenium tests. Another major benefit is that I can directly access the embedded database and Tapestry registry and do everything within a single JVM, which is extremely useful for setting up the test fixtures and the system state before the test and then cleaning up everything afterwards. Finally, maintainability is way better. While it may take longer to write the first HtmlUnit test than recoding a Selenium test, writing the next ones and maintaining the test suite as your applications evolves is far, far easier. JMHO of course.

I just finished writing the following test for integration testing a referral system: I start up the embedded Jetty, write a new Referral entity to the database, browse the site as a (guest) user as if he was referred by the Referral, sign up via an Ajax control, receive an email sent by the system, verify the new user activation by clicking on the url in the email, fill in the user details and finally verify that the referral is credited for by doing a database query. It covers a lot of ground, but it's all executed in less than 8 seconds on my development laptop. All together 24 lines of code, most of it used for setting up the test fixtures. Now, PHP guys, let me see you do that! (Sorry that was unfair, but ah, it felt good ).

For those interested in the details, the big three libraries in play are Jetty, Hibernate and Tapestry (naturally). I'm also using a version of Tynamo's own AbstractContainerTest, Dumbster and H2 (don't I love that database!).

Selenium makes a lot of sense if you really are executing the tests against multiple browsers and your tests are mostly focused on browser compatibility. From what I've seen though, most of the time people are using Selenium with a single web driver and they are simply using it for integration testing the application workflow. HtmlUnit's browser doesn't seem to have any problem parsing the webpages I feed to it or executing the Javascript embedded on them, so in practice if my HtmlUnit-based integration test fails, I can be pretty sure the same doesn't work on any "real" browser either.

Tapestry-security 0.2.0 released!

As an Apache Shiro committer and a strong proponent of Tapestry, I'm proud to announce the 0.2.0 release of tapestry-security module, which represents the best and most comprehensive security framework integration for Tapestry 5 applications. I can say that since it's largely written by others Tapestry-security is based on the great work by Valentin Yerastov, the original author of tapestry-jsecurity. Later on, JSecurity became an Apache project and was renamed to Apache Shiro, the first official release of which (as an Apache project) was recently made. Alejandro Scandroli, who else, updated the code to use the latest Shiro APIs and finally, we added a few other bells and whistles on top of it all. Pierce Wetter gets an honorable mention for being a guinea pig and starting to use tapestry-security all without documentation (so it can't be that bad). Now both tapestry-security and Shiro even have proper documentation, read more from our tapestry-security guide. Hope you find the module as useful as we have!

tapestry-jpa 2.0.1 released

We've just released a maintainance release of tapestry-jpa. It consists of small patches and enhancements:

  • fixed test scope in maven pom: tapestry-test was added to the final application
  • changes to make subclassing of JPAGridDataSource easier

You can find the new release in the maven repositories.

tapestry-resteasy 0.2.0 and tapestry-model 0.0.2 released!

They say that a release a week keeps the doctor away so to combat any potential illnesses in advance, we are announcing tapestry-resteasy 0.2.0 and tapestry-model 0.0.2 releases!

Tapestry-resteasy is whiz-bang job of Alejandro Scandroli and this release fixes everything that could have been improved from the previous release, namely:

  • ordering the filters, adding the ResteasyRequestFilter before de GZIP filter to avoid a NPE
  • adding autodiscovery of REST resources
  • getting ready for release with the soon to be released RESTEasy 2.0
  • new "droppinable" Resteasy module.

Read more at tapestry-resteasy guide (the guide is updated!)

tapestry-model 0.0.2 is a bug-fix release:

  • TYNAMO-27 - EditComposition component doesn't know know how to deal with enum types

Read more at tapestry-model guide

tapestry-watchdog 0.0.1 released!

Just to keep up with releasing something new every month, we are announcing tapestry-watchdog, version 0.0.1! This module got released sometime ago but as a multi-process application that most of the time doesn't do much but needs to deliver when the time comes, we took a bit longer to test it out. tapestry-watchdog is an "embedded watchdog" that sends an email to you right away if something happens to your parent process (we've all seen an OutOfMemoryError right?) Configuring tapestry-watchdog couldn't be any simpler, but read more about it from our tapestry-watchdog guide.

tapestry-exceptionpage 0.0.1 released!

Another month, another release. This time we bring you a Tapestry-style replacement for this standard web.xml configuration:

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

Tapestry conveniently wraps up any uncaught exception inside ComponentEventException and displays a very nice exception page at development time, but unfortunately that makes it impossible to use the standard error-page configuration in your web.xml. Not that configuring all that in verbose xml is that great anyway but it had its uses. tapestry-exceptionpage allows you to simply contribute the exception type/error page mappings in plain Java and allows specifing context for the error pages to make it quite a bit more flexible than the standard configuration. Check out the tapestry-exceptionpage guide for more info!

Tapestry-conversations 0.1.1 released!

I've been sitting on some improvements to conversations for some time. Since I'm already using that functionality on our live conversations example and I even got myself to document the features, I figured it's time to push out a new release, version 0.1.1 of tapestry-conversations! Here's what's changed:

Improvement

  • TYNAMO-37 - Lowercase only the cookie name both before reading and writing to support T5.1 and T5.2

New Feature

  • TYNAMO-35 - Enhance ConversationAware for use by services and allow objects to register themselves as conversation listeners

Task

  • TYNAMO-31 - Make Conversation class serializable for clustering and failover and to make the conversation example work on GAE

As always, the release is available from central and the documentation is updated to explain the new functionality. Enjoy!

tapestry-hibernate-seedentity 0.1.0 released!

Hey party people! We just released tapestry-hibernate-seedentity with the following changes:

Improvement

  • [TYNAMO-10] - Support @NaturalId
  • [TYNAMO-38] - Change SeedEntityIdentifier to work on classes rather than objects (only)
  • [TYNAMO-39] - Allow partially committing seed entities

Task

  • [TYNAMO-28] - Rename package org.tynamo.seedentity to org.tynamo.seedentity.hibernate

The release is available from central and the documentation is updated to explain the new functionality. Enjoy!

Powered by Atlassian Confluence