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