User:Predonzani/Portofino framework

From Seo Wiki - Search Engine Optimization and Programming Languages

Jump to: navigation, search

Portofino is an open-source web application framework written in Java, supporting several commercial and open source databases, and based on the Struts2 MVC framework. It follows the principles of model-driven engineering.

Portofino addresses the needs of small to medium size projects, such as productivity and short development time, while ensuring enterprise qualities such as robustness and maintainability. A small to medium size project here means an application with CRUD on 10-20 database tables, one or two workflows with different user roles, permissions, on-line/printed reports, and some integration with existing systems.

Portofino is developed by ManyDesigns srl and distributed under dual-licensing. The open source license is GPL v3 with FLOSS exception.


Model-driven approach

Portofino follows the principles of model-driven engineering, model-driven development and domain-specific modeling. Applications are written by defining a set of logical models, which describe the application's structure and functionality. In this sense, models serve the same purpose as general-purpose programming languages, but at a higher level of abstraction.

Domain-specific models

Portofino supports models of various types:

  • Data model: made of classes, attributes and relationships, automatically mapped to their databases counterparts (tables, columns and referential integrity).
  • Workflow model: made of states, transitions and guards.
  • User model: made of a few core classes to describe the system's users and user groups.
  • Permission model: the intersection of the data, workflow and user models, technically implemented through permission matrices with the purpose of defining the system's access control policy.
  • Calculated attributes: the automatic calculation of certain attributes based on other attributes, using a syntax similar to spreadsheet formulas.
  • Constraints model: based on calculated attributes, handles advanced field validations and semantic rules that can span multiple attributes.
  • Reporting model: the integration of reporting libraries (JFreeChart and JasperReports) in a model-driven, high-productivity environment.
  • Notification model: for the communication of system events to the user via email.

All these models can be considered domain-specific, as their scope is the domain of web applications. Some models (e.g., for data and workflows) can be considered as general-purpose. However, in Portofino their are used in a way that is specific to web applications (e.g., CRUD operations).

Generated user interface

Portofino automatically generates the user interface based on the model definition. It can include:

  • forms (create-read-update-delete operations)
  • navigation of relationships
  • searches with flexible multiple filtering
  • full-text searches
  • workflow operations
  • breadcrumbs
  • read/write fields based on permissions
  • field-level and semantic validations
  • cascaded selections
  • user management
  • user self-registration and password recovery
  • binary files upload
  • interactive dashboards/portlets with drill-down
  • parametric reports in pdf and other formats

Database support, abstraction and refactoring

The following database technologies are supported.

Closed source:

Open source:

Portofino provides an abstraction layer for Data Definition Language (DDL). Despite the presence of ISO standards, this area is heterogeneous across vendors. The abstraction layer isolates the user from several differences, including:

  • Data types
  • DDL syntax
  • DDL functionality (e.g., while certain databases do not allow resizing of VARCHAR columns, Portofino provides a transparent solution for all databases).
  • Behavior of nullable unique columns. Portofino enforces an ISO-compliant three-value logic on databases (Microsoft SQL Server and MySQL) that would not support it natively.

Portofino also solves the problem of applying model changes to a database that is already populated with data. This is done by an extensive use of ALTER TABLE statements, which preserve existing data, as opposed to CREATE TABLE statements that assume a empty database. This produces an incremental approach to development, similar to refactoring, favorable to agile methods.


Portofino was originally released in 2006 as a closed-source application. In February 2009 is was released in open-source under a GPL v3 license with FLOSS exception.

The main releases are:

  • Portofino 1.0 (March 2006): original development, supporting Oracle and PostgreSQL.
  • Portofino 2.0 (January 2008): Added support for DB2, SQL Server and MySQL.
  • Portofino 2.0.12 (February 2009): First public open-source release. Support for Derby.
  • Portofino 3.0 (November 2009): Struts2-based MVC for internal structure, extension and customization. Extended user management and self-registration.

In 2006 Portofino received the Perotto award[1][2] in the industry section.


  1. A.Giangreco, November 2006, "Il software vincente per costruire altri software", Liguria Business Journal, Year 2 Issue 11(12)
  2. Dixet, October 10th, 2006, "Datasiel: il premio Perotto per il sociale"

See also

External links

Personal tools

Served in 0.415 secs.