Posted By: Gianfranco Boccalon|
Date: 2007-04-19 12:55
Summary: Spago 2.2.0 released
The Spago team is pleased to announce the release of Spago 2.2.0.
You can download it from:
New Features In This Release:
- The Spago project is now using a new tracking system JIRA based. The URL is
https://spago.eng.it/jira/browse/SPAGO (you have to register)
We track all changes (fix and improvements) on JIRA, so on the release notes
and also on the Java sources, we report the tracking id of the Spago JIRA to better
keep track of all changes.
- IMPORTANT COMPATIBILITY NOTE: on this release we introduced a new configurable exception
handler (see SPAGO-5). It is now possible associating an Exception to a specific service.
To mantain the same application behavior on exception
handling of existing Spago applications, you have to add to your configuration
the new files error.xml and traps.xml, now in the Spago distribution.
Default configuration is provided and has to be integrated with existing projects
(when you update to the new Spago release) to allow mantaining current Spago
We provide the following default configuration for:
- it.eng.spago.dispatching.SessionExpiredException (new class) mapped on SESSION_EXPIRED_ACTION
- it.eng.spago.security.SecurityException mapped on SECURITY_ERROR_PUBLISHER
- it.eng.spago.navigation.NavigationException mapped on NAVIGATION_ERROR_ACTION
- Any uncatched Exception generated by a service mapped on SERVICE_ERROR_PUBLISHER
New Exception handling is actually implemented only on AdapterHTTP.
- IMPORTANT COMPATIBILITY NOTE: on this release we introduced the renderer concept
to have a cleaner separation in all adapters of channel dependent code and
presentation management code.
A new interface was introduced (it.eng.spago.presentation.rendering.RenderIFace)
to manage the specificities of the different presentation tecnologies in some
classes separated from the Adapter classes.
A new configuration file (renderers.xml) was introduced, to define the renderers
available. You have to include this file in your applications.
The following renderers are already implemented:
- JSP_RENDERER: it.eng.spago.presentation.rendering.JSPRenderer
- XSLT_RENDERER: it.eng.spago.presentation.rendering.XsltRenderer
- FOP_RENDERER: it.eng.spago.presentation.rendering.HTTPFOPRenderer
- LOOP_RENDERER: it.eng.spago.presentation.rendering.HTTPLoopRenderer
- SERVLET_RENDERER: it.eng.spago.presentation.rendering.ServletRenderer
Actually the renderers are used only in AdapterHTTP, AdapterSOAP and AdapterAxis,
but we planned their usage also in AdapterPortlet (SPAGO-22).
- Service dispatching: it's now possible to change the service dispatching method (SPAGO-27).
When an action or module is defined it's now possible to declare which method
of the action/module class to call dinamically. If no method is configured, then
the default "service" method is called (static call).
- Localization: added default language and country configuration for resource
bundle lookup (SPAGO-17).
In common.xml configuration file we added the optional attributes "default_user_language"
and "default_user_country" as child attributes of COMMON element.
With these attributes you can choose the default user language, if none is
specified in session by application services.
We provide a sample configuration with the new attributes:
<COMMON file_uri_prefix="file:" xhtml_lat1_ent="/WEB-INF/conf/spago/xhtml-lat1.ent"
- Localization: added the possibility to make placeholder substitution on
public static String getMessage(String code, String bundle, List params)
The placeholders have to be defined with the syntax %1, %2, etc.
- Presentation: a new Visual Tag Library derived from the Struts tag library
is provided (SPAGO-6).
We provide a Visual Tag Library to allow the development of JSP pages without
writing Java code.
This new library is derived from the Struts tag library, with all dependencies
from Struts removed and extended with the possibility to navigate through the
Spago objects (request, response, request container, response container,
session container, application container).
The existing samples are extended to provide usage samples of the new tags.
Since the new tags are Struts derived, the license will be Apache (and not
LGPL as other Spago components).
- Services management: a Service Catalog is provided (SPAGO-18).
With the service catalog it's possible to define some common services without
worrying about their life cycle management. Spago will manage the services
lifecycle according to the configuration information provided in the file services.xml.
The following scopes are available:
- REQUEST: the services will be instantiated for each request of a service
instance. Use this scope to implement stateless services.
- SESSION: the services will be instantiated only once for each user.
This means that the services can be statefull: they can keep some
information within the instance because for the same user it will be used
the same instance. These services should be Serializable to allow the
Session replication between Application Server cluster nodes.
- APPLICATION: the services will be instantiated only once for each application
in a Java Virtual Machine (in a cluster of N nodes, the services will be
instantiated N times). Also these services can be statefull but they should
not keep users related information, because there is only an instance
for all users (they are equivalent to a Singleton).
In case of services in scope SESSION or APPLICATION, the service itself has to
manage concurrency issue.
- Presentation: added a FOP rendering module for producing PDF files (SPAGO-11).
- Presentation: added a custom tag (snipplet) that allows including in a JSP page external
provided contents (SPAGO-8).
- Session management: removed the need of specifying request parameter NEW_SESSION=TRUE
on the first links of the Web applications (SPAGO-24).
The check for the validity of HTTP session was based on the request parameter
NEW_SESSION=TRUE specified on the first links of the Web Application. We removed
the need for this parameter.
- Services: Alias (SPAGO-12)
Implemented an alias service to decouple different web applications.
The alias service should allow to create, for example, hyperlinks between
different web applications using only logical names.
A configuration file (alias.xml) should contain the mapping between the logical
names and the real URLS.
- Services: Statistic service (SPAGO-13)
On application shutdown event, this service invokes JAMon API to retrieve the
statistics of all used services and log them through the Tracer service.
Configuring the Tracer service for using Log4J, these information can be logged
on a database.
- Services: implemented a Mail Service (SPAGO-25)
Created a service to send mails through a configured SMTP server.
- SourceBean: extended the SourceBean to manage XML namespaces automatically (SPAGO-7)
The SourceBean now doesn't discard the namespaces information when reading a
XML file, but stores them and uses them when transforms the SourceBean to XML.
- SourceBean: XML bean serialization (SPAGO-9)
Added the possibility to include in the service response generic Java beans
and transform them automatically in XML when required.
This feature is implemented using the Betwixt Java-XML mapping framework.
This feature allows to use ORM frameworks like Hibernate, without worrying
about XML serialization of the Java beans.
To use Betwixt we added the following dependencies on spago-core:
- commons-beanutils-core jar 1.7.0
- commons-digester jar 1.6
- commons-logging jar 1.0.2
This option is disabled by default. To enable it, you have to set the serializer
in the SourceBean containing the Java beans, like in the following sample:
sampleSB = new SourceBean("JAVA_BEAN_SERIALIZATION");
sampleSB.setAttribute("JAVA_BEAN1", new SimpleBean("ABC", new Date()));
from now on, calling sampleSB.toXML() will produce a XML containing also the
Java bean serialized in XML.
- SourceBean: SourceBean now provides the option to maintain the XML generated
respecting characters case provided on SourceBean generation (SPAGO-20).
We added the following methods to the it.eng.spago.base.SourceBean class:
public static SourceBean fromXMLStream(InputSource stream,
boolean trimCharacters, boolean upperCase);
public static SourceBean fromXMLString(String xmlSourceBean,
boolean trimCharacters, boolean upperCase);
public static SourceBean fromXMLFile(String xmlSourceBean,
boolean trimCharacters, boolean upperCase);
These methods allow to choose if the attributes names have to be uppercased
(default) or mantained "as is".
Fixed Bugs and Issues:
- Simplified the management of RequestContainer and ResponseContainer between
requests. The attributes requestContainerName and responseContainerName are
not used anymore.
- Fixed the suspend/resume mechanism: the SuspendResumeTag incorrectly changed
the response instead of the request.
- It's possible now deploy Web applications as WAR files without expanding
them: there was problems retrieving the file xml-lat1-ent.xml when producing
XML or when using transcoding with XSL.
- Fixed the Drools rules loading at application startup in the case the WAR file
was not expanded by the application server. (SPAGO-23)
- Fixed the upload management: if the user doesn't provide a file name to upload
now spago doesn't create any file. With the previous release, an empty file was
created with a no-sense name.
Unfortunately, there is no way to check if the uploaded file was an existing
file with size 0, or a non-existing file because the user wrote directly the
(wrong) file name in the form field.
In both cases Spago creates a file with size 0.
- Publishing: the LOOP mode now works only in "forward" mode.
"Redirect" mode is no more supported.
Known Bugs and Issues:
- The method toXML of the SourceBean doesn't handle properly multivalue attributes.