I see you point.

Isn't this a common issue where you want to freeze an interface
implementation version? How can this be achieved?

Scenario where both CompB and CopmpC are clients of API in CompA - is common
enough.

Isn't a requirement that when CompC uses CompA directly it gets impl1 and
when CompB uses CompA it uses impl2 - regardless to the source of invocation
(CompC or any other component) also common?

On Sun, Apr 18, 2010 at 1:30 AM, Richard S. Hall <[email protected]>wrote:

> On 4/17/10 14:31, Yair Ogen wrote:
>
>> Well, htis might be it.
>>
>> CompB imports a class from CompA.
>>
>> So, what you are saying there is no way for compB to always use the class
>> from CompA, when the flow is:
>>
>> CompA -->  CompB -->  CompC.
>>
>> Correct?
>>
>>
>
> Yes, if instances from CompA flow through CompB to CompC then they must all
> agree on the same version of CompA.
>
>
>  This issue may be because I use concrete files to test my case. In real
>> life
>> the dependency will be to an interface in CompA. the difference between
>> the
>> version used by CompB and CompC will be only the implementation injected
>> using Spring.
>>
>> I hope to fine that B works with it's own "known" implementation version
>> even when invoked from C.
>>
>>
>
> Well, technically it is possible, but it still depends. At a minimum, CompB
> and CompC will have to have the interface type in common, otherwise it still
> won't work.
>
> Assume we have some interface IFoo coming from BundleZ.
>
> Then assume we have FooImpl1 by BundleA and FooImpl2 by BundleB. Both of
> these bundles import IFoo from BundleZ.
>
> Now I can have client BundleC that imports from BundleZ. This will works
> with either implementation of IFoo because they all share a common type:
> IFoo.
>
> Just keep in mind your original question above...if the types flow through
> a bundle to client bundle bundles, then they must agree on the same version
> of the type. If a type does not flow through a bundle, then its clients are
> not constrained by the type.
>
> -> richard
>
>
>  I'll check it out next week.
>>
>> Please advise if my above logic has a flaw.
>>
>> On Thu, Apr 15, 2010 at 7:49 PM, Richard S. Hall<[email protected]
>> >wrote:
>>
>>
>>
>>> On 4/15/10 12:39, Richard S. Hall wrote:
>>>
>>>
>>>
>>>> On 4/15/10 10:08, Yair Ogen wrote:
>>>>
>>>>
>>>>
>>>>> I am not following. I always want CompB to use a fixed version of CompA
>>>>> regardless of the calling API code.
>>>>>
>>>>> Is this possible? The direct dependency between CompC and CompA (newer
>>>>> version) is a real situation.
>>>>>
>>>>>
>>>>>
>>>> Apparently, I am not explaining this in an understandable way, so maybe
>>>> someone else can jump in and give it a try.
>>>>
>>>> The main issue has nothing to do with the dependencies of CompC->CompA
>>>> or
>>>> CompB->CompA...in isolation, CompC and CompB can have dependencies on
>>>> any
>>>> version of CompA they wish independently.
>>>>
>>>> The only issue is the dependency of CompC->CompB. This requires that the
>>>> class spaces of the two bundles intersect via some common types. If
>>>> those
>>>> common types come from CompA, then you have a problem since CompC and
>>>> CompB
>>>> do not use a common version of CompA. If they do not include types from
>>>> CompA, then it will work.
>>>>
>>>> In your case, since you are getting a "uses" constraint violation, it
>>>> likely means your CompB component exposes CompA types to its importers,
>>>> which means CompC can't use it. See the example I created before, does
>>>> the
>>>> exported package from CompB accept any CompA types as parameters or
>>>> return
>>>> any of those types from methods? If so, then CompC can't use it, since
>>>> they
>>>> don't agree on a common set of CompA types.
>>>>
>>>>
>>>>
>>> To try to illustrate a working scenario, since that might be more
>>> helpful,
>>> assume CompB exports a package containing only a class like:
>>>
>>> public class CompB {
>>>    public String getName();
>>>    public CompB getChildComponent();
>>> }
>>>
>>> Since none of these types come from CompA 1.0, then CompC could import
>>> this
>>> package, because the two versions of CompA would not conflict. Where as
>>> something like this would not work:
>>>
>>> public class CompB {
>>>    public String getName();
>>>    public CompA getChildComponent();
>>> }
>>>
>>> So, if any of the classes in the package exported by CompB (and imported
>>> by
>>> CompC) publicly expose a type from CompA, then you have an issue since
>>> all
>>> importers must use the same version of the type.
>>>
>>> ->  richard
>>>
>>>
>>>
>>>
>>>
>>>> ->  richard
>>>>
>>>>
>>>>
>>>>  Please advise.
>>>>
>>>>
>>>>> On Thu, Apr 15, 2010 at 4:46 PM, Richard S. Hall<[email protected]
>>>>>
>>>>>
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>  On 4/15/10 9:17, Yair Ogen wrote:
>>>>>
>>>>>
>>>>>>  Thank you very much and yes this is exactly what I wanted to achieve,
>>>>>> I
>>>>>>
>>>>>>
>>>>>>> know
>>>>>>> regular Java does not allow this, however I thought that OSGi special
>>>>>>> ClassLoader model resolves this issue.
>>>>>>>
>>>>>>> I think this is a real life scenario. for example, assume based on
>>>>>>> my previously described Component Graph that the logic behind the
>>>>>>> scenes
>>>>>>> is
>>>>>>> that CompB was tested with CompA a long time ago. Comp C uses Comp B
>>>>>>> but
>>>>>>> also uses new version of CompA since it is a newer component.
>>>>>>>
>>>>>>> It is a real requirement for me (I think this is common to all?) that
>>>>>>> the
>>>>>>> system engineers do not allow me to have B use the new CompA since
>>>>>>> this
>>>>>>> combination was never tested. They do not want to have full
>>>>>>> regressions
>>>>>>> tests either.
>>>>>>>
>>>>>>> So, the route CompC -->    CompA should use newer version, but the
>>>>>>> route
>>>>>>> CompC
>>>>>>> -->    CompB -->    CompA should use the older version.
>>>>>>>
>>>>>>> So, I need to tell them this is not possible?
>>>>>>>
>>>>>>>
>>>>>>>  To be clear, if CompC somehow gets objects from CompB that are
>>>>>>>
>>>>>>>
>>>>>> instances
>>>>>> from classes from CompA, then it will not work. This is because CompC
>>>>>> is
>>>>>> expecting the CompA instances to be 1.0.1, but the instances that
>>>>>> CompB
>>>>>> returns are 1.0.0. A given class can only see one version of a type at
>>>>>> a
>>>>>> time.
>>>>>>
>>>>>> However, if CompB only uses class from CompA internally and never
>>>>>> exposes
>>>>>> them to CompC, then it is possible for both CompB and CompC to use
>>>>>> different
>>>>>> versions of that type.
>>>>>>
>>>>>> There is a slight variation where CompB might expose CompA types, but
>>>>>> CompC
>>>>>> doesn't actually ever use those types from CompB. In this case, you
>>>>>> could
>>>>>> technically cheat and modify your CompB bundle metadata so it doesn't
>>>>>> report
>>>>>> the "uses" constraints. But I wouldn't recommend this since it would
>>>>>> be
>>>>>> really fragile and would likely blow up in other situations where you
>>>>>> reuse
>>>>>> CompB.
>>>>>>
>>>>>> ->   richard
>>>>>>
>>>>>>
>>>>>>  Regards,
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Yair
>>>>>>>
>>>>>>> On Thu, Apr 15, 2010 at 4:03 PM, Richard S. Hall<
>>>>>>> [email protected]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>  On 4/15/10 2:17, Yair Ogen wrote:
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>  Right. this was another problem.
>>>>>>>>
>>>>>>>>
>>>>>>>>> now A both verrsion and B work ok.
>>>>>>>>>
>>>>>>>>> Problem in C:
>>>>>>>>>
>>>>>>>>> org.osgi.framework.BundleException: The bundle could not be
>>>>>>>>> resolved.
>>>>>>>>> Reason: Package uses conflict: Import-Package:
>>>>>>>>> com.something.b.main;
>>>>>>>>> version="0.0.0"
>>>>>>>>>
>>>>>>>>> Is this due to conflict between the imported dependency from to Be
>>>>>>>>> and
>>>>>>>>> the
>>>>>>>>> one imported directly from C?
>>>>>>>>>
>>>>>>>>> Is this situation supposed to be supported? I mean C using one
>>>>>>>>> version
>>>>>>>>> of
>>>>>>>>> and using B that uses another version of A? How can I accomplish
>>>>>>>>> this
>>>>>>>>> goal?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  As I mentioned in my original response, it is supported assuming B
>>>>>>>>>
>>>>>>>>>
>>>>>>>> doesn't
>>>>>>>> expose A to C...it sounds like com.something.b.main exposes A v1 to
>>>>>>>> C
>>>>>>>> who
>>>>>>>> is
>>>>>>>> only allowed to see A v1.0.1.
>>>>>>>>
>>>>>>>> For example, assume B has a class like:
>>>>>>>>
>>>>>>>> public interface com.something.b.main.Foo {
>>>>>>>>    com.something.classes.Bar getBar();
>>>>>>>> }
>>>>>>>>
>>>>>>>> Assuming com.something.classes.Bar comes from bundle A, then bundle
>>>>>>>> C
>>>>>>>> will
>>>>>>>> not be allowed to use com.something.b.main, because it would cause
>>>>>>>> it
>>>>>>>> to
>>>>>>>> see
>>>>>>>> a different version of the package than what it is allowed to see.
>>>>>>>> If
>>>>>>>> this
>>>>>>>> is specifically what you are trying to achieve, then you can't do
>>>>>>>> this
>>>>>>>> with
>>>>>>>> Java at all. A given class can only see one version of another class
>>>>>>>> at a
>>>>>>>> time...otherwise you get class cast exceptions.
>>>>>>>>
>>>>>>>> ->    richard
>>>>>>>>
>>>>>>>>
>>>>>>>>  Any help appreciated.
>>>>>>>>
>>>>>>>>
>>>>>>>>  Thanks,
>>>>>>>>
>>>>>>>>
>>>>>>>>> Yair
>>>>>>>>>
>>>>>>>>> On Wed, Apr 14, 2010 at 10:38 PM, Richard S. Hall<
>>>>>>>>> [email protected]
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  On 4/14/10 14:59, Yair Ogen wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  Added the suggested Export-Package as well as Private-Package for
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> the
>>>>>>>>>>> activator.
>>>>>>>>>>>
>>>>>>>>>>> install fails now on:
>>>>>>>>>>>
>>>>>>>>>>> org.codehaus.classworlds.NoSuchRealmException: plexus.core
>>>>>>>>>>>         at
>>>>>>>>>>> org.codehaus.classworlds.ClassWorld.getRealm(ClassWorld.java:128)
>>>>>>>>>>>         at
>>>>>>>>>>>
>>>>>>>>>>> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:434)
>>>>>>>>>>>
>>>>>>>>>>>         at
>>>>>>>>>>> org.codehaus.classworlds.Launcher.main(Launcher.java:375)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  This sounds specific to the scenario you are trying to
>>>>>>>>>>> implement.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> Not
>>>>>>>>>> sure,
>>>>>>>>>> I have no idea what Class Worlds is...
>>>>>>>>>>
>>>>>>>>>> ->     richard
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  Yair
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  On Wed, Apr 14, 2010 at 8:42 PM, Richard S. Hall<
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> [email protected]
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  To include packages without exporting them, you should use
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Private-Package.
>>>>>>>>>>>> For example, you shouldn't export your activator package.
>>>>>>>>>>>>
>>>>>>>>>>>> Is sounds like you want something like this:
>>>>>>>>>>>>
>>>>>>>>>>>> CompA v1
>>>>>>>>>>>> Export-Package: com.something.classes; version=1.0.0
>>>>>>>>>>>>
>>>>>>>>>>>> CompA v1.0.1
>>>>>>>>>>>> Export-Package: com.something.classes; version=1.0.1
>>>>>>>>>>>>
>>>>>>>>>>>> CompB
>>>>>>>>>>>> Import-Package: com.something.classes; version="[1.0.0, 1.0.0]"
>>>>>>>>>>>>
>>>>>>>>>>>> Export-Package: com.something.b.main
>>>>>>>>>>>> Private-Package: com.something.activator.b
>>>>>>>>>>>>
>>>>>>>>>>>> CompC
>>>>>>>>>>>> Import-Package: com.something.classes; version="[1.0.1, 1.0.1]",
>>>>>>>>>>>> com.something.b.main
>>>>>>>>>>>> Private-Package: com.something.activator.c
>>>>>>>>>>>>
>>>>>>>>>>>> ->      richard
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>  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]
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>> 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]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>
>>>>>>>>>
>>>>>>>> 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]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>> 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]
>>>
>>>
>>>
>>>
>>
>>
>
> ---------------------------------------------------------------------
>
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to