Thanks for your reply.

1. If I omit the Export-Package I get a build error on mvn install with
error that jar is empty. Why?
2. I tried to export explicitly just the packages within compB and compC.
But now I get this error:

org.osgi.framework.BundleException: The bundle could not be resolved.
Reason: Missing Constraint: Import-Package: com.something.classes;
version="1.0.0"

com.something.classes is the package that holds Person in compA.

this is the relevant part of my pom files:


compA version 1.0.0:

<configuration>
 <instructions>
<Bundle-Activator>com.something.activator.a.CompAActivator</Bundle-Activator>
 <Import-Package>org.osgi.framework</Import-Package>
<Export-Package>com.something.*</Export-Package>
 </instructions>
</configuration>


compA version 1.0.1:

<configuration>
<instructions>

<Bundle-Activator>com.something.activator.a.CompAActivator</Bundle-Activator>
<Import-Package>org.osgi.framework</Import-Package>
 <Export-Package>com.something.*</Export-Package>
</instructions>
 </configuration>

compB:

<configuration>
<instructions>

<Bundle-Activator>com.something.activator.b.CompBActivator</Bundle-Activator>
<Import-Package>org.osgi.framework,com.
something.classes;version="1.0.0"</Import-Package>

<Export-Package>com.something.b.main,com.something.activator.b</Export-Package>
 </instructions>
</configuration>

compC:

<configuration>
<instructions>
<Bundle-Activator>com.something.activator.c.CompCActivator</Bundle-Activator>

<Import-Package>org.osgi.framework,com.something.classes;version="1.0.1",com.something.b.main;version="1.0.0"</Import-Package>
 <Export-Package>com.something.activator.c</Export-Package>
</instructions>
 </configuration>


do you see any problem?


Regards,

Yair

On Wed, Apr 14, 2010 at 4:40 PM, Richard S. Hall <[email protected]>wrote:

> On 4/14/10 9:19, Christopher Brind wrote:
>
>> Hi Richard,
>>
>> Would you agree that a good rule of thumb (subject to specific
>> circumstance
>> of course) is that bundles should only import packages OR export packages,
>> but not both?
>>
>>
>
> Well, as long as you extend that with, ..."and package API separately from
> the implementation."
>
> Then, yes, that'd be a good rule of thumb for the average case, since it
> would result in the fewest issues overall at the expense of creating more
> bundles to manage.
>
> -> richard
>
>
>  Cheers,
>> Chris
>>
>>
>> On 14 April 2010 14:13, Richard S. Hall<[email protected]>  wrote:
>>
>>
>>
>>> Technically, what you want to do is possible assuming that CompB doesn't
>>> expose CompA v1 to CompC. From the sounds of it, you've packaged your
>>> bundles incorrectly. Don't embed the Person package into your bundles,
>>> package them as separate bundles and them use Import-Package in the
>>> client
>>> bundles to access them. You might want to start with some introductory
>>> OSGi
>>> tutorials to understand the basics.
>>>
>>> ->  richard
>>>
>>>
>>> On 4/14/10 6:53, Yair Ogen wrote:
>>>
>>>
>>>
>>>> Hi,
>>>>
>>>> I am a newbie. I've created dummy projects to test this out.
>>>>
>>>> What I am trying to achieve is as follows:
>>>>
>>>> CompA version 1.0.0 defines class Person that has 2 properties: name,
>>>> lastName
>>>> CompA version 1.0.1 defines class Person that has 2 properties: name,
>>>> myLastName
>>>> CompB version 1.0.0 calls API on person compiled with CompA version
>>>> 1.0.0.
>>>> CompC version 1.0.0 calls API on person compiled with CompA version
>>>> 1.0.1.
>>>> Additionally calls API on CompB.
>>>>
>>>> So, CompA, both versions, are not dependent on anything.
>>>> CompB is dependant on CompA version *1.0.0*.
>>>> CompC is dependant on CompB version 1.0.0 and CompA version *1.0.1*.
>>>>
>>>> When I read about OSGi I thought that I should be able to see that the
>>>> API
>>>> used directly between C and A will activate Person from A version 1.0.1,
>>>> but
>>>> the API called from C to B to A will activate the person from A version
>>>> 1.0.0.
>>>>
>>>> This is not the case. Pure B API activate the "right" person.
>>>>
>>>> Person used from C (regardless of the origin - API in C or API in B)
>>>> activates the same Person - 1.0.1.
>>>>
>>>> When investigating I saw that the person class was embedded in B and in
>>>> C,
>>>> so of course they can only work with one class at a time.
>>>>
>>>> My question is  - isn't there a non embedded approach, where both A
>>>> versions
>>>> jars are in the classpath and the container will pick up the correct
>>>> dependency on the fly?
>>>>
>>>> This must work for me, because this is the heart of what I need from
>>>> OSGi
>>>> -
>>>> Manage multiple version of the same artifacts in a single jvm...
>>>>
>>>> Regards,
>>>>
>>>> Yair
>>>>
>>>>
>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to