2009/05/20 - Apache Shale has been retired.
For more information, please explore the Attic.
Apache Shale (Version 1.0.4) Release Notes
Welcome to the Apache
Shale Framework. Shale is a next generation framework for building web
applications using Java technology, and builds upon the framework and
component APIs provided by
To download the binary release artifacts, go
select an appropriate mirror,
download the corresponding zip files, and check the checksums and
digital signatures. In addition, the individual JAR files are available
in the default Maven 2 repositories, using artifact identifiers described
below in Section 2.2.
This is the fourth milestone release of Shale, released to encourage
experimentation and gather feedback on usage issues and requested features.
A final vote on quality has yet to take place for this release, and will
take place later. We plan to vote on the quality of each module separately
where necessary. For example, the shale-tiles module is likely to receive
a grade no higher than "Beta" because it relies on a snapshot of the as-yet
unreleased Standalone Tiles package.
Most of the APIs in Shale are reasonably stable -- for details,
Shale API Target Audiences and Stability Ratings.
2.0 What Is Included
2.1 Release Artifacts
Shale is released as a series of zip files, each of which contains
the binary deliverables, as well as the corresponding source code. In
addition, if you have Maven 2 (version 2.0.4 or later) installed, you
can rebuild the contents of each zip, by positioning to the
top level directory in a command shell, and typing
The following release artifacts are available:
- shale-framework-1.0.4.zip - Contains source code,
javadocs, and compiled libraries for the standard Shale libraries,
plus copies of dependent JAR files that are also required. The
following Shale libraries are included:
- shale-application-1.0.4.jar - Traditional
application wide front controller features that should be
applied to every request.
- shale-clay-1.0.4.jar - An innovative sub-framework
for supporting the configuration of reusable subtrees of
JavaServer Faces components for customizable reuse. An
alternative to JSP where you define views in pure HTML.
- shale-core-1.0.4.jar - Features such as
JNDI integration, a JSF taglib and a set of utility
- shale-dialog-1.0.4.jar - Abstract API to define a
"conversation" with a user that requires multiple HTTP
requests to implement, modeled as a state diagram.
- shale-dialog-basic-1.0.4.jar - A relatively simple
implementation that models a dialog as a state diagram
with four types of states. This implementation supports
a superset of the functionality that was present in
versions of Shale up through 1.0.3.
- shale-dialog-scxml-1.0.4.jar - A more
sophisticated implementation based on state charts
modeled with State Chart XML, which is currently a Working
Draft published by the W3C. Uses the Apache Jakarta
Commons SCXML engine.
- shale-remoting-1.0.4.jar - Standalone library
supporting static and dynamic resource downloads for
AJAX applications and components.
- shale-spring-1.0.4.jar - Library providing
lightweight integration with the dependency injection
capabilities of the
- shale-test-1.0.4.jar - Library of mock objects
and JUnit test case base classes for building unit tests
for JSF-based web applications and components.
- shale-tiger-1.0.4.jar - Optional library providing
additional features for applications running on Java SE 5
"Tiger" or later releases.
- shale-tiles-1.0.4.jar - Library providing integration
with the Standalone Tiles package from Struts.
- shale-validator-1.0.4.jar - Support for client-side
validation and a rich set of server-side validators
for JSF components using the Apache Jakarta Commons
- shale-view-1.0.4.jar - Convenient mechanism to
associate a "backing" Java class with each JavaServer Faces
view in an application, with predefined event handers for
events significant to an application developer.
- mailreader-jpa-1.0.4.zip - Java class library
containing Java Persistence Architecture (JPA) entity classes, and
a corresponding Persistence Unit configuration, for use by the
shale-mailreader-jpa example application.
- Other shale-xxxxx-1.0.4.zip archives - Each of the
following archives contains the source code and javadocs for a
sample application using Shale, plus a WAR file that can be
dropped directly into your servlet container to run the sample.
The following sample apps are included in this release:
- shale-blank-1.0.4.zip - Simple base application
that can be used as a starting point for developing your
own application that depends on Shale
- shale-clay-usecases-1.0.4.zip - A simple
"Rolodex" application implemented in several ways to
show off the capabilities of the Clay Plug-In
- shale-mailreader-1.0.4.zip - A transcription of
the canonical Struts "mail reader" example application,
using an XML document to simulate the database.
- shale-mailreader-jpa-1.0.4.zip - A modernized
version of the mail reader example that uses a database
to store the data, and JPA entity classes to access it
(requires a Java EE 5 application server)
- shale-sql-browser-1.0.4.zip - Simple SQL
browser application that illustrates features from
the shale-tiger.jar library, as well as dynamically
building a JSF component tree
- shale-usecases-1.0.4.zip - Contains miniature
sets of pages showcasing various features of the Shale
2.2 Maven Repository Artifacts
The various JAR files that are included
in the framework release artifact have also been published to public
Maven 2 repositories. If you are using Maven 2 to build your apps, you
need only declare dependencies on the following identifiers (group id,
artifact id, and version number), and Maven 2
will automatically download Shale (and its dependencies) for you.
- org.apache.shale:shale-application:1.0.4 - for shale-application-1.0.4.jar
- org.apache.shale:shale-clay:1.0.4 - for shale-clay-1.0.4.jar
- org.apache.shale:shale-core:1.0.4 - for shale-core-1.0.4.jar
- org.apache.shale:shale-dialog:1.0.4 - for shale-dialog-1.0.4.jar
- org.apache.shale:shale-dialog-basic:1.0.4 - for shale-dialog-basic-1.0.4.jar
- org.apache.shale:shale-dialog-scxml:1.0.4 - for shale-dialog-scxml-1.0.4.jar
- org.apache.shale:shale-remoting:1.0.4 - for shale-remoting-1.0.4.jar
- org.apache.shale:shale-spring:1.0.4 - for shale-spring-1.0.4.jar
- org.apache.shale:shale-test:1.0.4 - for shale-test-1.0.4.jar
- org.apache.shale:shale-tiger:1.0.4 - for shale-tiger-1.0.4.jar
- org.apache.shale:shale-tiles:1.0.4 - for shale-tiles-1.0.4.jar
- org.apache.shale:shale-validator:1.0.4 - for shale-validator-1.0.4.jar
- org.apache.shale:shale-view:1.0.4 - for shale-validator-1.0.4.jar
- org.apache.shale.extras:mailreader-jpa:1.0.4 - for mailreader-jpa-1.0.4.jar
3.0 Changes From Previous Releases
Details on all of the included changes are in
Section 5, below. The following sections highlight the most important
3.1 New Features
Framework refactoring - The Shale framework now
contains six new modules to support a looser coupling between various
features, allowing application developers greater freedom over
choosing the bits and pieces they need. The new modules are
(details in section 2.1):
- shale-application - Improved version of related features
that existed in shale-core up through version 1.0.3.
- shale-dialog - New abstract dialog API introduced
in version 1.0.4.
- shale-dialog-basic - Improved version of the dialog
functionality that was present in versions of Shale up through
- shale-dialog-scxml - A sophisticated dialogs
implementation based on state charts modeled with State Chart XML,
which is currently a Working Draft published by the W3C.
New implementation added in version 1.0.4.
- shale-validator - Improved version of validation features
that existed in shale-core up through version 1.0.3.
- shale-view - Improved version of Shale view
controller features that existed in shale-core up through version
Test Framework Support for JSF 1.2 - It is now possible
to build unit tests, using the Test Framework, that cater to JSF 1.2
Clay Improvements - As part of the framework
refactoring, we reduced inner shale-clay dependencies to just the
shale-core module thereby providing servlet 2.3 compatibility. There were
several enhancements made to the Clay non-validating markup parser. Clay
markup template namespace support was extended to allow a prefix that
differs from the component's "jsfid" definition. In addition, we added a
Clay template directive and a global setting to specify the template
encoding. We also added limited support for handling reuse of JSPX tags and
the "f:view" tag which allows assigning properties of the view root. An
effort was made to align Clay full view templates more closely with JSP by
changing the inheritance of the Clay component so it no longer is a naming
Furthermore, we added JSF 1.2 basic support for Clay managed views. The
basic support covers some new ground into supporting new features such as the
binding attribute for converters, validators and listeners. This support
doesn't have direct 1.2 dependencies; meaning it is compatible with 1.1
features. As a result, not all of the 1.2 component attributes and bindings
are natively supported.
3.3 Bugfix Issues
Dialog Feature - Several outstanding JIRA issues
focusing on functional problems with the implementation of the Dialog
feature have been addressed along with the refactoring in 1.0.4.
4.0 Known Issues In This Release
this link for a detailed Road Map of upcoming versions of Shale. The
following paragraphs highlight only the most important issues.
Standalone Tiles - The shale-tiles module has a
dependency on the Standalone Tiles package, currently in the Struts Sandbox
(and soon to be an Apache Top Level Project), that has not yet been
released. This needs to be resolved before the shale-tiles module can be
5.0 Detailed Change Log
- [SHALE-10] - [shale] IFrame does not work properly inside Shale dialog
- [SHALE-48] - [shale] Serious issue with dialog state
- [SHALE-61] - [shale] Maintaining dialog synchronization when browser navigation buttons are used
- [SHALE-67] - Clay examples from usecases demo output Sun's state field marker
- [SHALE-220] - init() lifecycle method called twice
- [SHALE-230] - Restore publishing the dialog-config_1.0.dtd file (and any other DTDs defined by Shale)
- [SHALE-258] - Shale core and test framework 1.0.3 includes MyFaces 1.1.1
- [SHALE-266] - More than one pattern of URL mappings for Faces Servlet ignored.
- [SHALE-270] - Illegal date format
- [SHALE-271] - Dialog2 can't find my dialog definitions
- [SHALE-274] - [dialog2] Clean up static resources at application shutdown
- [SHALE-275] - DialogNavigtionHandler breaks the implicit Decorator pattern
- [SHALE-276] - LegacyDialogContext returns incorrect viewId when no transition is found during advance method
- [SHALE-279] - The prefix used to declare clay template namespaces can not be overridden
- [SHALE-282] - ResponseFactory does not support a correct character encoding
- [SHALE-292] - Clay doesn't consider file's encoding when loading/parsing html templates from hdd
- [SHALE-294] - TestCase: CommonsValidatorTestCase fails on different user locales.
- [SHALE-296] - lifecycleListener removes too many servletRequest attributes in case of requestDestroyed
- [SHALE-305] - Remove dependency on JSP from commonsValidator
- [SHALE-307] - ViewController for navigated-to page is not added to the request map until bean is referenced in RenderResponse phase.
- [SHALE-308] - October 12 nightly is missing org.apache.shale.faces.ShaleApplicationFilter
- [SHALE-312] - Add serial version UIDs
- [SHALE-313] - Implicit anchor tag does not map "href" attribute to its component pendant
- [SHALE-316] - tomahawk's panelNavigation2 doesn't keep state when navigating between views
- [SHALE-317] - Annotations do not work in Jetty
- [SHALE-319] - Shale-Parent--pom contains repositories
- [SHALE-320] - Catch-all for bugs identified by static code analysis tools
- [SHALE-321] - Update TilesViewHandler to support new Tiles 2 Snapshot
- [SHALE-327] - Eliminate runtime dependency to JRE 1.5
- [SHALE-328] - Clay is not recognizing the converterId attribute when using the generic f:converter
- [SHALE-332] - NPE if javax.faces.CONFIG_FILES points to nonexistent file
- [SHALE-334] - API links broken on Shale View Controller site
- [SHALE-335] - The ViewPhaseListener should invoke responseComplete() on the faces context before dispatching to the forwarding URL for handling exceptions.
- [SHALE-341] - Problem t:datascroller does not work in shale dialog
- [SHALE-343] - Clay component should ignore binding expressions within a template comment block
- [SHALE-344] - Remoting does not provide configurable limiting of exposed resources
- [SHALE-355] - Restore the ability to override the prefix on navigation outcomes that start a dialog
- [SHALE-357] - Dialog prefix not configurable
- [SHALE-361] - MockVariableResolver does not resolve all the required implicit bean names
- [SHALE-362] - Improve default security of Shale Remoting
- [SHALE-364] - Tomahawk 1.1.3 component jscookmenu does not render
- [SHALE-365] - faces-config.xml is not valid.
- [SHALE-370] - Unclosed tag in validation example
- [SHALE-371] - prerender() executes for ViewController not rendered when navigating to page/bean not implementing ViewController
- [SHALE-374] - Verify that the destroy callbacks are being called correctly
- [SHALE-375] - Framework should build on JDK 1.4
- [SHALE-113] - [shale] Create "Dialog Aware" button panel component
- [SHALE-123] - Enhancement to Shale Dialogs
- [SHALE-153] - Allow dialog substate to return information to calling state
- [SHALE-175] - Dialog statemachine and errorconditions should be queryable
- [SHALE-232] - [Tiles] TilesViewHandler supporting Standalone Tiles 2.0 API
- [SHALE-243] - Use Selenium for functional testing of the example apps
- [SHALE-261] - AbstractJsfTestCase and AbstractJmockJsfTestCase should not provide a suite() method
- [SHALE-268] - [dialog2] Add support for dialog execution listeners
- [SHALE-272] - LegacyDialogManager should issue warning when no dialog config information is found
- [SHALE-306] - Catch-all for website improvements
- [SHALE-311] - Correct license headers in source files
- [SHALE-325] - Add a custom validation example to the Use Cases example app
- [SHALE-330] - Create limited mapping support of jspx tags in Clay's html template parsing
- [SHALE-331] - Allow setting the view root's properties within a Clay template
- [SHALE-337] - Unable to use redirects with dialogs
- [SHALE-347] - [dialog-scxml] Declarative mechanism to specify JSF view id
- [SHALE-348] - [dialog-scxml] DTD for dialog-config
- [SHALE-350] - [dialog-scxml] Insufficient logging
- [SHALE-366] - [dialog-scxml] Allow app developer to define custom (Commons SCXML) actions for dialogs
- [SHALE-368] - [dialog-scxml] Remove lazy initialization bits
- [SHALE-369] - [master-pom] Switch to scpexe:// URLs
- [SHALE-372] - messages_nl.properties
- [SHALE-376] - Miscellaneous build/pom changes
- [SHALE-377] - Add KEYS file to SVN and dist/
5.3 New Feature
- [SHALE-190] - Allow Managed Properties on Abstract Base Classes
- [SHALE-263] - Explore use of Commons SCXML for dialogs
- [SHALE-301] - scan configures packages or jar files only
- [SHALE-346] - Create different JSF 1.2 profiles for EE5 app servers versus Servlet 2.5 / JSP 2.1 containers
- [SHALE-351] - Support events from DialogContextManager in addition to DialogContext
- [SHALE-211] - Add Shale to the projects.apache.org site
- [SHALE-221] - Make build environment support JSF RI 1.2 as an option for the JSF dependency
- [SHALE-267] - Promote the best practice of avoiding spaces in dialog state names
- [SHALE-273] - Document the Sandbox policy on access for existing Apache committers
- [SHALE-280] - Eliminate direct dependencies on Commons BeanUtils
- [SHALE-293] - Upgrade to MyFaces 1.1.4
- [SHALE-299] - Refactor functionality from shale-core into separate modules
- [SHALE-300] - Import "dialog2" functionality from sandbox back into framework
- [SHALE-349] - Upgrade Commons Digester to 1.8
- [SHALE-363] - Review dependency and plugin version numbers
- [SHALE-367] - Upgrade to Commons SCXML 0.6
- [SHALE-378] - Move shale-designtime to sandbox
- [SHALE-379] - Update API Stability Page
- [SHALE-380] - Catch-all for v1.0.4 preparation