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]

Reply via email to