Pax Wicket - 0.8.0

Pax Wicket - 0.8.0

Release 0.8.0 (2012-02-06)

Overview

The 0.8.0 release is last (and final) feature release of the wicket 1.4.x series. All further bug-fixes and micro releases are done in micro release of the 0.8.x branch. The release fixes tons of bugs; upgrade to the latest wicket 1.4.x micro release (1.4.19); upgrades the related dependencies (pax-web 1.0.8, karaf 2.2.5, slf4j 1.6.3, spring 3.0.7, mockito 1.9.0, wiquery 1.2.4, ...); The most important features for the 0.8.x series are a bundle-listener which decides automatically which bundles are to be included into an application making the registration of injection, mounting and class loading services no longer required; in addition the handling of injection handlers had been abstracted to be extendable now. Besides those direct API changes the entire documentation had been updated and completed. For almost every case an example had been added.

-Enjoy

The Pax Wicket Team

Upgrade from 0.7.x

To upgrade an application from any of the 0.7.x versions the following steps have to be done

Change artifact ids

With PAX-WICKET 0.8.0 we've changed the artifact ids to something more OSGi-like. Most importantly pax-wicket-service becomes org.ops4j.pax.wicket.service, pax-wicket-test becomse org.ops4j.pax.wicket.test, pax-wicket-features becomes features and pax-wicket-samples-features becomes also features (in the same groupId as before).

Change declaration of applications

Till now the PaxWicketApplicationFactory service was required to get up a PAX-WICKET application. From now on it is enough to export an IWebApplication with a mount point and an application name defined. For examples how it is done now see Wicket Applications (Quick).

No manual declaration of delegation services

PAX-WICKET 0.8.x comes with an BundleListener doing all this registration automatically. Therefore you're no longer required to register any of the following services:

  • org.apache.wicket.application.IClassResolver;
  • org.ops4j.pax.wicket.api.PageMounter;
  • org.ops4j.pax.wicket.api.PaxWicketInjector;

This does not mean in any way that you are not allowed to do so. There may still be some special cases where you would like to do this by hand. But any bundle which imports org.apache.wicket.* is automatically included in class loading, injection and supports the @PaxWicketMountPoint annotation.

Removed ContentSources and Aggregation Points

While ContentSources and Aggregation points where a quite interesting concept in PAX-WICKET over the years they does not add any real value. Instead they add the additional burden of pages explaining the model. It's much easier if you simply add your own aggregation services as required (the examples and the documentation shows some ways how this could be done).

Behavior of Pax Wicket Page Factory changed

Pre 0.8 we had a quite simple logic in page-creation:

  1. try to load a page from the pax-wicket osgi services
  2. try to find a default constructure
  3. if there is non use the one with the pageparams

This behavior is not really sufficient in more complex situations. For 0.8 we use the following behavior now:

  1. try to load a page from the pax-wicket osgi services
  2. delegate the loading to the original DefaultPageFactory from Wicket

Theoretically you should not have to change anything. Still it could happen that the page-loading behaves differently now in the edge cases. This have to be considered during the upgrade.

Download

The following sections presents where you can retrieve PAX-WICKET from.

Maven

All artifacts are distributed and available via the maven central repository

<!-- Pax Wicket Core -->
<dependency>
  <groupId>org.ops4j.pax.wicket</groupId>
  <artifactId>org.ops4j.pax.wicket.service</artifactId>
  <version>0.8.0</version>
</dependency>
<!-- Pax Wicket Test Utilities -->
<dependency>
  <groupId>org.ops4j.pax.wicket</groupId>
  <artifactId>org.ops4j.pax.wicket.test</artifactId>
  <version>0.8.0</version>
</dependency>

Karaf

Pax Wicket comes with Karaf feature files for the pax-wicket core and for the samples:

features:addurl mvn:org.ops4j.pax.wicket/features/0.8.0/xml/features
features:addurl mvn:org.ops4j.pax.wicket.samples/features/0.8.0/xml/features

Source code

You can browse, download and checkout the source code at http://github.com/ops4j/org.ops4j.pax.wicket/tree/wicket-0.8.0/.

Detailed Changelog

In detail we've fixed 75 issues in this release which are:

Bug

  • [PAXWICKET-164] - Compiliation error in RootContentAggregatorDecorator
  • [PAXWICKET-182] - Integration tests on hudson fail because of already used 8080 port
  • [PAXWICKET-190] - Running the samples via pax-provision needs way too long to shut down
  • [PAXWICKET-191] - PageMounterTracker does not include %s in logging statement
  • [PAXWICKET-193] - DefaultPageMounter#dispose does compare for the wrong value
  • [PAXWICKET-195] - Running mvn pax:provision installs two not defined and required bundles
  • [PAXWICKET-197] - Karaf's features.xml no longer need references to jetty & jetty-jaas
  • [PAXWICKET-218] - ServletContext services dont get removed after the servlet had been removed
  • [PAXWICKET-220] - FilterDelgator is not closed correctly in PaxWicketAppFactoryTracker
  • [PAXWICKET-221] - Servlet will never be deregistered as PaxWicketAppFactoryTracker currently stores its map
  • [PAXWICKET-222] - PaxWicketAppFactoryTracker modifiedService does not handle changes correctly
  • [PAXWICKET-249] - The init and destroy method for applications is never called
  • [PAXWICKET-251] - Serialisation exception in BundleDelegatingClassResolver
  • [PAXWICKET-275] - injectionPossible-check for anonymous classes does not work
  • [PAXWICKET-277] - injection-possible check always fails for Nested classes
  • [PAXWICKET-291] - Initializer as the one in wi-query is not respected
  • [PAXWICKET-292] - "Classical" wicket application, via pax-web does not work
  • [PAXWICKET-293] - Race conditions between bundle analysing and application startup
  • [PAXWICKET-294] - Pax-Wicket not guarded for Throwables
  • [PAXWICKET-295] - Behavior of pax-wicket page factory is different from wicket page factory

Dependency upgrade

Improvement

  • [PAXWICKET-118] - Cleanup service properties
  • [PAXWICKET-192] - Unmount pages before attempting to mount them
  • [PAXWICKET-194] - Allow easy configuration of log-level in samples
  • [PAXWICKET-203] - Provide examples where content is in various packages
  • [PAXWICKET-212] - It shouldn't be required to register a full PaxWicketApplicationFactory
  • [PAXWICKET-213] - Create an additional example based on the default wicket example
  • [PAXWICKET-214] - Merge SerializationActivator with Activator
  • [PAXWICKET-215] - Aggregate all constants in an org.ops4j.pax.wicket.api.Constants class
  • [PAXWICKET-219] - Extract logging level for itests from code
  • [PAXWICKET-223] - LogMessage in PaxWicketPageFactory is no longer correct
  • [PAXWICKET-227] - Move creation logic from PaxWicketApplicationFactory to an internal class
  • [PAXWICKET-237] - Provide samples for simple injection
  • [PAXWICKET-238] - Provide samples for Filters
  • [PAXWICKET-239] - Provide samples for pax-mounting
  • [PAXWICKET-240] - Provide slightly more complex application samples replacing web.xml
  • [PAXWICKET-250] - Double loading in LazyInitProxyFactory does not make sense for pax-wicket
  • [PAXWICKET-260] - PW should also create pages only having a constructor taking PageParameters
  • [PAXWICKET-268] - Repack sources into pax-wicket

New Feature

  • [PAXWICKET-166] - Make the autoPageMounter register itself similar to the class and injection loader
  • [PAXWICKET-180] - Provide an (configurable) extender automatically registering pax-wicket (base) services to bundles importing wicket classes
  • [PAXWICKET-208] - Provide easy option to register pax-wicket ApplicationFactory
  • [PAXWICKET-210] - Add a changelog file to pax-wicket
  • [PAXWICKET-258] - Retrieve injection handler via SPI
  • [PAXWICKET-259] - Injection should be set via SPI to application
  • [PAXWICKET-266] - Handle edge case of injection over multible bundles because of inheritance

Task