You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall" <he...@ungoverned.org> on 2007/02/09 21:13:46 UTC

Framework changes

I just wanted to let people know that I just committed changes to the 
framework that may result in visible behavioral changes for users.

When bundles are updated or uninstalled, the packages exported by those 
bundles are marked for removal. In the old days, Oscar would still allow 
new bundles to resolve to these "removal pending" packages. During the 
R4 spec writing days, there was a decision to say that you should not 
resolve to "removal pending" packages. Thus, I modified Felix a little 
while back to not wire new bundles to such packages.

I was confronted with a use case from Eric Swindwell that was giving him 
some grief, so I looked into it and tracked it down to being related to 
this. As it turns out, my recollection of the R4 spec wasn't 100% 
accurate since section 4.3.7 said old versions of updated packages 
continue to be available to future bundles, but 4.3.8 said uninstalled 
packages are not available to future bundles. This surprised me, so I 
started to discuss this with Peter Kriens, which led to us contacting BJ 
Hargrave, which ultimately led to a conference call including Tom Watson.

The end result is that we decided to "improve" this situation for the 
imminent release of R4.1. The new rule is now the same for both update 
and uninstall, which is: if the uninstalled/updated bundle has any of 
its packages in use at the time of the uninstall/update, then all of its 
packages remain available for future bundle resolution until a refresh. 
If none of the packages of the uninstalled/updated bundle are in use at 
the time of the uninstall/update, then the none of its packages will be 
available for future bundle resolution.

Up until my commit, Felix ignored all "removal pending" packages, now it 
behaves according to the above rule. This includes the fact that Felix 
now immediately calls "refreshPackages()" on any uninstalled/updated 
bundle if none of its exports are being used.

I think this situation is better and avoids some ugly situations where 
you end up with bundles being forced to be wired to new or different 
versions of a given package after an update/uninstall, which results in 
reduce interoperability because existing bundles cannot communicate with 
these newly resolved bundles until after a refresh.

At any rate, if you notice different behavior in situation related to 
this, you should at least understand why.

-> richard