Hi folks,

We have a large web application engineering management system deployed in 
production environments that is written in Wicket.  During the last couple of 
weeks I have been upgrading to Wicket 6 from Wicket 1.5 in order to use the new 
nested tree and table-tree components and  I have to say these are really good 
both in terms of the flexibility of display and performance, unlike the former 
in-method grid component.

As a technology Wicket has a lot of advantages but one of the things that 
constantly concerns us and our management is the amount of effort that has to 
go into porting to a new release of Wicket.  I'd like to ask about your 
strategy for release upgrades as you need to be aware of the impact on serious 
users of your product in not supporting backward compatibility of interfaces.

For example, with this port to Wicket 6 one of the changes was to the 
SortableDataProvider.   It went from:
                private class AssignAppModulesDataProvider extends 
SortableDataProvider<AppModule> {
                           ...
                                @Override
                                public Iterator<AppModule> iterator(int start, 
int count) {
                                                ...
                                }

                                @Override
                                public int size() {
                                                return ... ;
                                }
              }
to

                private class AssignAppModulesDataProvider extends 
SortableDataProvider<AppModule, String> {
                           ...

                                @Override
                                public Iterator<AppModule> iterator(long start, 
long count) {
                                                ...
                                }

                                @Override
                                public long size() {
                                                return ... ;
                                }
          }

As a one off change this may not seem much but we have well over a 100 
different instances of SortableDataProviders in our application  and 
furthermore were using start and count variables in the List.subList call which 
expects int .    Surely a better approach would have been to introduce a new 
class that supported the new interface and deprecate the SortableDataProvider 
in order to prevent compilation breakage and a staged migration.

Another example is the restriction that the AjaxFallbackLink can no longer be 
associated with html buttons and throws an exception at runtime if you do.  We 
had dozens of examples of this in code, and it was fairly painful tracking them 
all down as I had to look at both java and html files to identify the ones that 
came into this category.

Also the in-code rendering of js and css resources has changed completely.   
Whilst I very much like the new interfaces and classes, would it not have been 
possible to deprecate the existing ones at least for a release.

I understand the desire and the need to clean up the architecture of a 
framework but retaining backward compatibility at least for an interim for a 
mature product like Wicket really does need to be considered more carefully or 
people will move away from using this technology.  You don't see technologies 
like Spring breaking like this.

Regards

Carolyn

Reply via email to