Hi,

top posting, because the answer is simple and straight forward:

 Add the Import-Package to bundle C and update just bundle C. Done.

Longer answer: The dependency on the missing package (javax.xml.parsers in your 
example) is basically an implementation detail of Bundle C and neither B nor A 
care (actually its none of their business). So you just add the Import-Package 
for the missing package and increment the micro level version of bundle C.

Regards
Felix

Am 02.07.2012 um 15:48 schrieb Dan Gravell:

> Cheers Neil, clarifications inline...
> 
> On Mon, Jul 2, 2012 at 2:35 PM, Neil Bartlett <[email protected]> wrote:
> 
>>> Imagine the following package dependencies:
>>> 
>>> A -> B -> C
>>> 
>>> That is, A is dependent on B, B is dependent on C. A, B and C are all in
>>> different bundles. For the sake of discussion, the bundles are also
>> called
>>> A, B and C. The package dependencies are declared in the respective
>>> manifests for each bundle
>>> 
>>> Now, I am running C and I notice a CNFE. So I add the required package to
>>> C's manifest.
>> 
>> This is not a very precise description of the problem... "add the
>> required package to C's manifest" could be interpreted in many ways.
>> Are you adding the package as a new export of C?
>> 
> 
> Sorry. I meant the package required to avoid the CNFE. In this case,
> javax.xml.parsers (I think). This isn't really relevant to my question
> though, I was just thinking up "some change" to my bundle. It could've been
> a code change...
> 
> 
>> Also, why did the CNFE happen, and from which bundle? It sounds like
>> you were missing an Import-Package somewhere, but that kind of problem
>> would need to be fixed in A or B, not in C.
>> 
> 
> From bundle C, because javax.xml.parsers wasn't in Import-Package. I added
> this and it worked. I don't know why PDE didn't pick this up nor why I
> didn't see it running under Equinox. But as I said above, this isn't
> related to my posting, it's just an example of a change which means
> versions have to be updated.
> 
> 
>> Assuming it's a new export then it's a new feature of the bundle,
>> therefore the Bundle-Version should be incremented in its minor (i.e.
>> second segment). However, semantic versioning of Bunde-Version can be
>> a little looser than package versions because they're not actually
>> used in resolution (if we ignore Require-Bundle!).
> 
> 
> No, just an Import-Package.
> 
> 
>>> 1) Choose an arbitrary package in bundle C and incremement the version
>> 
>> Why?
>> 
> 
> Because... (deep breath) C is a dependency of B which is a dependency of A,
> and I am only updating A as a result of the strategy I outlined in my very
> first paragragh. To get C to update so it works, given I only update A, I
> need to update the versions so that the correct versions get pulled through
> when I update A.
> 
> OBR sees that A has a new version, so it looks at its requirements, and
> sees a req for package B version n' which in turn is in bundle B which has
> a req for package C version n'. That's how I think it's working anyway.
> 
> 
>>> 2) In the import for the package chosen in (1) in bundle B, increment the
>>> version so the new version will be pulled in upon update.
>> 
>> This doesn't make sense since B could not have an existing import for
>> the package (assuming I understood correctly that you are adding a new
>> Export to C).
>> 
> 
> No, so maybe ignore that.
> 
> 
>>> 3) Now increment an arbitrary package in B
>> 
>> Why? Does B actually need to change at all? If not, why update it?
>> 
> 
> Because I am only updating A, my "psuedo feature". To get C to update, A
> has to have requirements to update down the chain.
> 
> 
>>> 4) In the import for the package chosen in (3) in bundle A, increment the
>>> version so the new version will be pulled in upon update
>>> 5) Increment the version of bundle A so that OBR will update it
>> 
>> Why? Again it looks like A doesn't need to change, so there's no need
>> to update it.
>> 
> 
> See the answer for B.
> 
> 
>>> If I update all extant bundles then I don't need to do this, but how do I
>>> remove bundles that are no longer required?
>> 
>> I don't *think* that OBR currently supports "garbage collection" for
>> bundles that are no longer needed. However it sounds like you don't
>> need to create anywhere near as much garbage as you're currently
>> creating, so this is probably less of a problem than you think it is.
>> 
> 
> Agreed. I think I am answering myself that the other way of doing it,
> updating all extant rather than one which has dependencies, is the best
> way. Are there any recommended approaches or best practices to this process
> for instance covering getting rid of bundles no longer needed?
> 
> If I update each bundle that exists, does ordering matter? For example,
> with service registration and other implicit dependencies. I think that's
> why I decided against that approach originally.
> 
> Dan


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to