Posted on February 18, 2013 by Alessio Stalla

We’re proud to announce the release of Portofino 4.0.9! This version has been driven by our goal of deploying Portofino in different environments: primarily clusters of physical or virtual machines, then cloud hosting services such as Google App Engine, and environments with particular limitations, for example a read-only file system. By targeting that goal, we have made Portofino more robust for everyone and more easily adaptable to new environments.

With this version, we switched to the LGPL license. This means that it is easier to use Portofino in commercial projects.

As usual, we have also included many bug fixes and updated some of the bundled libraries. Below you can find detailed release notes.

Clustering and cloud support

Deploying in a clustered environment is never easy; Portofino has always had some cluster-friendly aspects (for example, it uses the HTTP session very lightly) and some other characteristics that were (and still are!) less friendly. A thorough discussion about this topic is better left to a dedicated blog post; however, we can say that we smoothed many rough edges.

  • Portofino can now run on a read-only filesystem, although some features won't be available (in particular, CMS functionality and BLOBs, which are file-based). Many cloud environments, including Google App Engine, have read-only file systems. Portofino will issue warnings if the directories it uses are not writable, but it will not abort startup anymore.
  • We have devised an engineered solution for using our reliable mail queue in a clustered environment.
  • The directory where blobs are stored is configurable to a path outside the app. Just set blobs.dir.path in portofino-custom.properties. This makes it easier to deploy as a .war archive on JBoss and other application servers that unpack the .war to a different directory on every deploy.

Furthermore, Portofino can now run, with limitations, on Google App Engine (GAE). In this environment, it provides the following new features:

  • Support for authentication using Google's UserService. Part of this is specific to the GAE environment; however, since GAE's user infrastructure is tied to the Servlet API, our effort is useful in other integration scenarios, for example with certain SSO solutions that are also well integrated with the Servlet API. Furthermore, you can now change the login and logout URLs used by the framework to point to your own authentication action.
  • Google Cloud SQL database platform (based on MySQL). Works both locally and on the Google App Engine.
  • Liquibase updates can be disabled, for example if startup speed is a concern in production (particularly true on GAE) but you still want to use Liquibase for development.
  • OAuth support. We have added a couple of classes that simplify using OAuth to authenticate your app with many popular web APIs (Google services, Twitter, Facebook, etc.) and to persist your user's OAuth credentials on a database table, leveraging the Google OAuth Client Library for Java. The use of our classes in your OAuth-enabled applications is completely optional.
  • Logging. Portofino is well integrated with GAE's native logging.

Limitations include:

  • The file system on GAE is read-only, so CMS features and BLOBs do not work.
  • Charts do not work because JFreeChart is incompatible with GAE.
  • PDF exports do not work because Apache FOP needs to use temporary files.
  • Quartz is not supported on GAE.

Bug fixes

  • More sensible relative links and anchors. Previously, linking to URL c from page a/b would send the user to a/c instead of the expected a/b/c, and linking to anchor #foo from page a/b would point to a#foo instead of a/b#foo. This has been fixed: double-check your relative links!
  • Duplicate HTML ids are no longer produced by Elements in certain situations.
  • The wizard received multiple fixes addressing the issues reported on the mailing list as well as other bugs that we found.
  • Groovy has been updated to version 2.0.6 and thus the dreaded dependency reload bug is gone!
  • A temporary file leak has been eliminated in our file upload forms.
  • And more...

 

We invite you to upgrade to the new version; you can download it from the download page. If you have issues or suggestions, please come to our community forums. We also offer commercial support.

 

comments powered by Disqus