Hello, community!

We're close to releasing Tapestry 5.7.0, which I'd love to have it released
before the end of year holidays to end this troubled year with something
nice. Since there's going to be larger changes than usual, I'd like to
invite the community to test it on their projects a bit to eventually catch
some regressions the team and the unit tests couldn't catch yet. You can
see a list of all changes in
https://issues.apache.org/jira/issues/?jql=project%20=%20TAP5%20AND%20fixVersion%20=%205.7.0
until a proper release notes page is added to the website.

Tapestry 5.7.0-SNAPSHOT JARs were uploaded to the ASF's Maven snapshots
repository at https://repository.apache.org/content/groups/snapshots/.

Biggest change is making Tapestry easier to use in modularized (i.e. Java
9+ modules) projects. The work on this was done in 2 major parts and a
small one:
* Avoiding split packages. In other words, packages that are present in
more than one JAR. We had to move lots of Tapestry classes around
JARs/subprojects since there were many and populous split packages.
* Providing automatic module names, all using the formula
"org.apache.tapestry.[adapted JAR name]", where [adapted JAR name] is the
current JAR name with 'tapestry-', dashes and the character '5' removed.
For example, tapestry5-annotations automatic module name is
org.apache.tapestry.annotations. Creation of module-info.java files are
left for the future.
* A simple migration tool to update fully qualified class names in Java
source files for classes which were moved and/or renamed. It's basically a
search-and-replace using a table of (old class name -> new class name)
extracted out of Git commits.

To run this migration tool, download the JAR at
https://repository.apache.org/content/groups/snapshots/org/apache/tapestry/tapestry-version-migrator/5.7.0-SNAPSHOT/tapestry-version-migrator-5.7.0-20201208.195518-8.jar
and run "java
-jar tapestry-version-migrator-5.7.0-20201208.195518-8.jar upgrade 5.7.0"
(without quotes). It will process all .java files found in the current
folder and its subfolders, recursively.

Since the stuff above was going to be needed anyway, I've also seized the
opportunity to separate the Tapestry request pipeline classes (i.d.
HttpServletRequestFilter, RequestFilter, Dispatcher, etc) into a new
subproject/JAR, tapestry-http, which can be used without tapestry-core,
which includes the page/component framework and the asset handling classes.

The other breaking change in 5.7.0 is changing the TypeCoercer service from
having an unordered configuration to a mapped one. This was done so it's
very clear when a coercion is overriden. Here's a real example from
Tapestry itself: if you had a contribution method like this:

    @Contribute(TypeCoercer.class)
    public static void provideCoercions(Configuration<CoercionTuple>
configuration)
    {
        configuration.add(CoercionTuple.create(String.class,
JSONObject.class, new StringToJSONObject()));
     }

it should be changed to this:

    public static void
provideCoercions(MappedConfiguration<CoercionTuple.Key, CoercionTuple>
configuration)
    {
        CoercionTuple<String, JSONObject> stringToJsonObject =
CoercionTuple.create(String.class, JSONObject.class, new
StringToJSONObject());
        configuration.add(stringToJsonObject.getKey(), stringToJsonObject);
    }

5.7.0 is built with Java 11 (first long-term support version after Java 9),
but targeting Java 8 bytecode, so It should be able to run on Java 8 to 14.

Please post your findings here in the mailing list so we can coordinate the
creation of Jira tickets and get this new version ready to be voted and
released in the next 2 weeks.

Thanks in advance! Happy testing!

-- 
Thiago

Reply via email to