On Mon, Jun 16, 2008 at 8:47 PM, Lucas Galfaso <[EMAIL PROTECTED]> wrote: > Hi All, > I find myself many times checking the spec on how a Bundle.update() > should behave so I end up reading Felix code. The spec is not very > clear (and a lot of times it is asking for the proper definition of > what Felix call IModule.) > Anyhow I find the following inconsistencies that I think are based > on discussions of the spec that I did not read. > > The spec reads > <quote> > 6.1.4.32 public void update( ) throws BundleException > [...] > If this bundle has exported any packages, these packages must not be > updated. Instead, the previous package version must remain exported > until the PackageAdmin.refreshPackages method has been has been called > or the Framework is relaunched. > </quote> > > now this is consistent with > http://cwiki.apache.org/FELIX/apache-felix-osgi-faq.html#ApacheFelixOSGiFAQ-ApacheFelixOSGiFrequentlyAskedQuestions > > This is, existing modules wired to the old module of the bundle that > was just updated, should remain wired with the old module. Right?
Correct. > The standard also reads > <quote> > 4.3.10 Updating Bundles > [...] > The update process supports migration from one version of a bundle to > a newer version of the same bundle. The exports of an updated bundle > must be immediately available to the Framework. If none of the old > exports are used, then the old exports must be removed. Otherwise, all > old exports must remain available for existing bundles and future > resolves until the refreshPackages method is called or the Framework > is restarted. > </quote> > > Now, this is somehow different from what > http://cwiki.apache.org/FELIX/apache-felix-osgi-faq.html#ApacheFelixOSGiFAQ-ApacheFelixOSGiFrequentlyAskedQuestions > reads, this may not be too bad as you may say that the wiki is just > slightly incomplete. Just as I said, not Not too bad. Why is it incomplete? > The standard implies that if a package this module exports is used by > any other bundle, then the old package must remain available for > future resolves. This is how Felix behaves even when the wiki reads > something slightly different. Where does it read differently? > Now, the issue is that using the Felix IModule naming, would it be > correct to say that the spec implies that: > - If we have a module X that is being updated, and there is another > module Y that is wired to X, then X must remain available to future > resolves. This future resolves includes new bundles. > ? Yes. > I would say "no" as > > Felix._updateBundle(FelixBundle bundle, InputStream is) > reads (this action is performed if the new module is loaded properly) > // Mark previous the bundle's old module for removal since > // it can no longer be used to resolve other modules per the spec. > ((ModuleImpl) info.getModules()[info.getModules().length - > 2]).setRemovalPending(true); This internal comment might be out of date (there has been a clarification of the spec a while ago). If an export is used it remains available for existing bundles and future resolves until a refresh. > If the answer to the question is "no" then I am not sure how to make > sense of the following sentence > "Otherwise, all old exports must remain available for existing bundles > _and_future_resolves_ until the refreshPackages method is called > or the Framework is restarted." > > Help clarifying this issue would be appreciated. Hope this helps. regards, Karl > Regards, > Lucas > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Karl Pauls [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

