[jbosscache-dev] Let's make 3.0 backwards compatible

Jason T. Greene jason.greene at redhat.com
Mon Aug 18 14:34:53 EDT 2008


Manik Surtani wrote:
> 
> On 18 Aug 2008, at 18:39, Jason T. Greene wrote:
> 
>> One of the headaches we cause our users, include the AS5 clustering 
>> team, is breaking API compatibility on every major release. This is 
>> probably the biggest reason why getting JBC3 into an AS5 release is a 
>> non-option.
> 
> Not just API - with MVCC, it is also the default configs shipped.  
> Although since 3.0 supports legacy locking schemes, it could always be 
> configured with the legacy locking schemes and a README included 
> explaining how to change these configs.

Yeah, I think it's generally ok for defaults to change. It only affects 
people that omitted a setting, and that is easily fixed.

> 
>> See users complaining:
>> http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4171065#4171065
>>
>> I propose that we make 3.0 100% backwards compatible with JBC 2.x. 
>> This will improve adoption, and means we stand a chance at becoming a 
>> part of an AS5 release. IMO, there is little justification for API 
>> changes since our biggest feature / release goal doesn't require it. 
>> Also, since we have some API impacting features (partitioning, etc) 
>> scheduled for the next major release, it is very possible that we 
>> would end up breaking the API twice.
> 
> Agreed about the backward compat.
> 
> I don't foresee Partitioning affecting public API.

I think it has the potential to affect the Region API.

> 
>> The biggest API change is the Fqn changes, which while the overloaded 
>> constructors where broken, we don't have to remove them. We can just 
>> mark them as deprecated. Also, while the generics usage doesn't fit 
>> the type, it doesn't really hurt anything, so I think we can just live 
>> with that past design decision.
> 
> Yes, this is what I have done in 2.2.0 (deprecated the constructors, 
> introduced the factory methods).  I removed the deprecated ctors in 3.0 
> but they could be put back.  Same with the generics.

+1 :)

>> The other API change I noticed was XmlConfigurationParser. The old one 
>> was renamed to XmlConfigurationParser2x and moved to another package. 
>> The new one was named XmlConfigurationParser. Is this considered a 
>> public API?. If it is then we should make XmlConfigurationParser 
>> choose the appropriate implementation based off of the file format.
> 
> No this is not public API.  This is used by the DefaultCacheFactory.

That changed as well, getInstance() disappeared.

> Other public APIs that are potentially broken include the Eviction 
> configuration beans, but again we can provide a translation later and 
> mark old ones as deprecated.  The EvictionAlgorithm interface is harder.
> 
> Region and RegionManager interfaces have changed as well, and it can be 
> tricky to maintain compatibility here.
 >
> InvocationContext has changed (it is now an interface and cannot be 
> constructed with "new", but I don't think anyone ever did or should have 
> used it that way anyway).
> 
> LockManager has changed too, but again this is internal.

Yeah I think external usage is going to be fairly remote, and it was 
never considered a public API anyway. We should make this more explicit 
though, by moving stuff like this to packages like internal, impl, and 
so on.

> Everything else should be good.  At the end of the day, I guess the acid 
> test is to drop it into an AS 5 beta as well as Hibernate.
> 

Yeah if those work then IMO we achieved our goal.

-- 
Jason T. Greene
JBoss, a division of Red Hat



More information about the jbosscache-dev mailing list