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? 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. 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. 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. ? 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); 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. Regards, Lucas --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

