Release Name: 2.2.0
Spago2.2.0, release of 2007-04-10
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 behavior.
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 MessageBundle method:
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.