You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Mathieu Plourde <ma...@gmail.com> on 2008/05/17 02:36:06 UTC

Felix OBR newbie question.

Hello all,

   I'm a newbie using Felix and I'm wondering how to use the OBR (
http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html).
In the application I'm working on, I want to be able to add my own
repositories. So far I've registered the Apache Felix Bundle Repository as a
bundle, but I don't know how to use it. The following code (from the Felix
OBR site) does exactly what I want:


> RepositoryAdmin repoAdmin = ... // Get repo admin service
> Resolver resolver = repoAdmin.resolver();
> Resource resource = repoAdmin.discoverResources(filterStr);
> resolver.add(resource);
> if (resolver.resolve())
> {
>     resolver.deploy(true);
> }
> else
> {
>     Requirement[] reqs = resolver.getUnsatisfiedRequirements();
>     for (int i = 0; i < reqs.length; i++)
>     {
>         System.out.println("Unable to resolve: " + reqs[i]);
>     }
> }



The only problem is how to get the repo admin service? The only coding stuff
I've done with Felix are the tutorials. I read a lot of doc, but I'm
struggling with the coding. The only thing I've done so far
is installing/activating the Apache Felix Bundle Repository bundle. That's
pretty much it. I want to use the repo admin service in another bundle. Do I
need to import the packages in that bundle? When I do it, I get conflicts
saying some classes are loaded twice. For example, if I use the class
Repository, it says the classloader already loaded the same class
already (The Apache Felix Bundle Repository is installed as a bundle, and I
also inculded the .jar file in the classpath. Maybe that could be the
problem? But if I don't add it to the classpath, how to I access the
classes?)

As you can see I got some basic problems with it. I would really appreciate
if you could help me. Also if you have some interesting sites/doc about
Felix OBR, send them out please.

Thank you very much!

Sincerely,
    Mathieu

Re: Felix OBR newbie question.

Posted by "Richard S. Hall" <he...@ungoverned.org>.
Mathieu Plourde wrote:
>> Without knowing your exact setup I cannot say if this is a good thing or
>> not, but generally speaking it is not a good thing to get your packages from
>> the class path...
>>     
>
> I have the org.apache.felix.bundlerepository-1.0.3.jar file in my classpath,
> and if I don't, it won't compile.
>   

For compiling, yes, you will need the OBR bundle on your class path, but 
it should not be on your run-time class path.

>> Well, I'd still make sure that you have things set up correctly. If you
>> have the OBR bundle installed and active, then you do not need to make the
>> OBR API package available on the class path, because the OBR bundle does
>> export this package; thus, your client bundle should import it...in fact
>> your client bundle should be importing the package no matter what, since
>> bundles should import everything not in java.*...
>>
>> So, it still sounds like something is odd.
>>
>>     
>
> If I don't put the org.apache.felix.bundlerepository-1.0.3.jar file on the
> classpath, how will my code compile?If I use the Repository class without
> adding the org.apache.felix.bundlerepository-1.0.3.jar file to my classpath,
> it won't compile. Upon comping, it will say "cannot find symbol
> 'Repository'" or something of the sort.
>
> Maybe I'm missing something though.
>   

Yes, you are talking about your compile-time class path, not your 
run-time class path. The OBR bundle should not be on your run-time class 
path, but your compile-time class path is fine. However, this is not the 
scenario your message was describing before. You said you were getting 
inconsistent class definition errors at run-time previously.

And you said that your client bundle does NOT import the OBR packages, 
which sounds incorrect too. However, it is possible that we are just 
misunderstanding each other. Here is an overview:

    * The OBR bundle exports 'org.apache.felix.bundlerepository'.
    * You create an OBR client bundle, which should import
      'org.apache.felix.bundlerepository' in its manifest.
          o To compile your client bundle you will need to put the OBR
            bundle on the compile-time class path.
    * To test your bundle, start Felix with nothing extra on its class path.
          o If you are using the standard Felix setup, Felix will
            automatically start the OBR bundle along with the shell bundles.
          o Install and start your client bundle.
                + Felix should wire your client bundle to the install
                  OBR bundle for package
                  'org.apache.felix.bundlerepository'.
    * Success.

If this is an accurate description of your scenario, then everything is 
working correctly. :-)

-> richard

> Thanks!
>
> 2008/5/17 Richard S. Hall <he...@ungoverned.org>:
>
>   
>> Mathieu Plourde wrote:
>>
>>     
>>> Everything solved!
>>>
>>>
>>>       
>> Good, however...
>>
>> - My client bundle was not supposed to import
>>     
>>> org.apache.felix.bundlerepository,
>>> even though I needed the jar in the classpath. That solved the
>>> inconsistency
>>> problems.
>>>
>>>
>>>       
>> Without knowing your exact setup I cannot say if this is a good thing or
>> not, but generally speaking it is not a good thing to get your packages from
>> the class path...
>>
>> - I had to get the RepositoryAdmin service like it's shown in the tutorials
>>     
>>> (using RepositoryAdmin.class.getName()). I had no more problems using this
>>> because my inconsistency problems were solved.
>>>
>>>
>>>       
>> Well, I'd still make sure that you have things set up correctly. If you
>> have the OBR bundle installed and active, then you do not need to make the
>> OBR API package available on the class path, because the OBR bundle does
>> export this package; thus, your client bundle should import it...in fact
>> your client bundle should be importing the package no matter what, since
>> bundles should import everything not in java.*...
>>
>> So, it still sounds like something is odd.
>>
>> -> richard
>>
>>
>> Thank you!
>>     
>>> 2008/5/16 Richard S. Hall <he...@ungoverned.org>:
>>>
>>>
>>>
>>>       
>>>> Mathieu Plourde wrote:
>>>>
>>>>
>>>>
>>>>         
>>>>> Hello all,
>>>>>
>>>>>  I'm a newbie using Felix and I'm wondering how to use the OBR (
>>>>>
>>>>> http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html
>>>>> ).
>>>>> In the application I'm working on, I want to be able to add my own
>>>>> repositories. So far I've registered the Apache Felix Bundle Repository
>>>>> as
>>>>> a
>>>>> bundle, but I don't know how to use it. The following code (from the
>>>>> Felix
>>>>> OBR site) does exactly what I want:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           
>>>>>> RepositoryAdmin repoAdmin = ... // Get repo admin service
>>>>>> Resolver resolver = repoAdmin.resolver();
>>>>>> Resource resource = repoAdmin.discoverResources(filterStr);
>>>>>> resolver.add(resource);
>>>>>> if (resolver.resolve())
>>>>>> {
>>>>>>   resolver.deploy(true);
>>>>>> }
>>>>>> else
>>>>>> {
>>>>>>   Requirement[] reqs = resolver.getUnsatisfiedRequirements();
>>>>>>   for (int i = 0; i < reqs.length; i++)
>>>>>>   {
>>>>>>       System.out.println("Unable to resolve: " + reqs[i]);
>>>>>>   }
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>> The only problem is how to get the repo admin service?
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> You need to lookup the service in the OSGi service registry.
>>>>
>>>> The only coding stuff
>>>>
>>>>
>>>>         
>>>>> I've done with Felix are the tutorials. I read a lot of doc, but I'm
>>>>> struggling with the coding.
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> Well, if you have done the tutorials, you should look more closely at how
>>>> the clients lookup services in the service registry (see examples 3 &
>>>> 4)...the OBR bundle provides the RepositoryAdmin service. Your client
>>>> bundle
>>>> will need to do a service lookup to find it. Once you have the service,
>>>> then
>>>> you will be able to do the above code.
>>>>
>>>> The only thing I've done so far
>>>>
>>>>
>>>>         
>>>>> is installing/activating the Apache Felix Bundle Repository bundle.
>>>>> That's
>>>>> pretty much it. I want to use the repo admin service in another bundle.
>>>>> Do
>>>>> I
>>>>> need to import the packages in that bundle? When I do it, I get
>>>>> conflicts
>>>>> saying some classes are loaded twice. For example, if I use the class
>>>>> Repository, it says the classloader already loaded the same class
>>>>> already (The Apache Felix Bundle Repository is installed as a bundle,
>>>>> and
>>>>> I
>>>>> also inculded the .jar file in the classpath. Maybe that could be the
>>>>> problem? But if I don't add it to the classpath, how to I access the
>>>>> classes?)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> In order to use the OBR service you will need to import the OBR API
>>>> package
>>>> in your client bundle. If you are getting inconsistency, it is likely
>>>> because you have the classes available from more than one place (e.g., on
>>>> your class path or in your client bundle). Generally speaking, the OBR
>>>> packages should only be contained in the OBR bundle JAR file and no place
>>>> else.
>>>>
>>>> As you can see I got some basic problems with it. I would really
>>>> appreciate
>>>>
>>>>
>>>>         
>>>>> if you could help me. Also if you have some interesting sites/doc about
>>>>> Felix OBR, send them out please.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> I know you were using SIP Communicator, but for these experiments, I
>>>> would
>>>> just work with Felix by itself for now. When you start Felix in already
>>>> has
>>>> OBR installed, so you just need to create a simple client bundle that
>>>> will
>>>> import the OBR API package in its manifest and do the service lookup in
>>>> its
>>>> start() method. It should be pretty simple for you to get this working;
>>>> however, if you are still having difficulties at this point, then you can
>>>> easily post your bundle code and manifest and we will be able to figure
>>>> it
>>>> out quickly.
>>>>
>>>> -> richard
>>>>
>>>> Thank you very much!
>>>>
>>>>
>>>>         
>>>>> Sincerely,
>>>>>   Mathieu
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>>> For additional commands, e-mail: users-help@felix.apache.org
>>>>
>>>>
>>>>
>>>>
>>>>         
>>>
>>>       
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>> For additional commands, e-mail: users-help@felix.apache.org
>>
>>
>>     
>
>   

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Felix OBR newbie question.

Posted by Mathieu Plourde <ma...@gmail.com>.
> Without knowing your exact setup I cannot say if this is a good thing or
> not, but generally speaking it is not a good thing to get your packages from
> the class path...

I have the org.apache.felix.bundlerepository-1.0.3.jar file in my classpath,
and if I don't, it won't compile.

> Well, I'd still make sure that you have things set up correctly. If you
> have the OBR bundle installed and active, then you do not need to make the
> OBR API package available on the class path, because the OBR bundle does
> export this package; thus, your client bundle should import it...in fact
> your client bundle should be importing the package no matter what, since
> bundles should import everything not in java.*...
>
> So, it still sounds like something is odd.
>

If I don't put the org.apache.felix.bundlerepository-1.0.3.jar file on the
classpath, how will my code compile? If I use the Repository class without
adding the org.apache.felix.bundlerepository-1.0.3.jar file to my classpath,
it won't compile. Upon comping, it will say "cannot find symbol
'Repository'" or something of the sort.

Maybe I'm missing something though.

Thanks!

2008/5/17 Richard S. Hall <he...@ungoverned.org>:

> Mathieu Plourde wrote:
>
>> Everything solved!
>>
>>
>
> Good, however...
>
> - My client bundle was not supposed to import
>> org.apache.felix.bundlerepository,
>> even though I needed the jar in the classpath. That solved the
>> inconsistency
>> problems.
>>
>>
>
> Without knowing your exact setup I cannot say if this is a good thing or
> not, but generally speaking it is not a good thing to get your packages from
> the class path...
>
> - I had to get the RepositoryAdmin service like it's shown in the tutorials
>> (using RepositoryAdmin.class.getName()). I had no more problems using this
>> because my inconsistency problems were solved.
>>
>>
>
> Well, I'd still make sure that you have things set up correctly. If you
> have the OBR bundle installed and active, then you do not need to make the
> OBR API package available on the class path, because the OBR bundle does
> export this package; thus, your client bundle should import it...in fact
> your client bundle should be importing the package no matter what, since
> bundles should import everything not in java.*...
>
> So, it still sounds like something is odd.
>
> -> richard
>
>
> Thank you!
>>
>>
>> 2008/5/16 Richard S. Hall <he...@ungoverned.org>:
>>
>>
>>
>>> Mathieu Plourde wrote:
>>>
>>>
>>>
>>>> Hello all,
>>>>
>>>>  I'm a newbie using Felix and I'm wondering how to use the OBR (
>>>>
>>>> http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html
>>>> ).
>>>> In the application I'm working on, I want to be able to add my own
>>>> repositories. So far I've registered the Apache Felix Bundle Repository
>>>> as
>>>> a
>>>> bundle, but I don't know how to use it. The following code (from the
>>>> Felix
>>>> OBR site) does exactly what I want:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> RepositoryAdmin repoAdmin = ... // Get repo admin service
>>>>> Resolver resolver = repoAdmin.resolver();
>>>>> Resource resource = repoAdmin.discoverResources(filterStr);
>>>>> resolver.add(resource);
>>>>> if (resolver.resolve())
>>>>> {
>>>>>   resolver.deploy(true);
>>>>> }
>>>>> else
>>>>> {
>>>>>   Requirement[] reqs = resolver.getUnsatisfiedRequirements();
>>>>>   for (int i = 0; i < reqs.length; i++)
>>>>>   {
>>>>>       System.out.println("Unable to resolve: " + reqs[i]);
>>>>>   }
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> The only problem is how to get the repo admin service?
>>>>
>>>>
>>>>
>>> You need to lookup the service in the OSGi service registry.
>>>
>>> The only coding stuff
>>>
>>>
>>>> I've done with Felix are the tutorials. I read a lot of doc, but I'm
>>>> struggling with the coding.
>>>>
>>>>
>>>>
>>> Well, if you have done the tutorials, you should look more closely at how
>>> the clients lookup services in the service registry (see examples 3 &
>>> 4)...the OBR bundle provides the RepositoryAdmin service. Your client
>>> bundle
>>> will need to do a service lookup to find it. Once you have the service,
>>> then
>>> you will be able to do the above code.
>>>
>>> The only thing I've done so far
>>>
>>>
>>>> is installing/activating the Apache Felix Bundle Repository bundle.
>>>> That's
>>>> pretty much it. I want to use the repo admin service in another bundle.
>>>> Do
>>>> I
>>>> need to import the packages in that bundle? When I do it, I get
>>>> conflicts
>>>> saying some classes are loaded twice. For example, if I use the class
>>>> Repository, it says the classloader already loaded the same class
>>>> already (The Apache Felix Bundle Repository is installed as a bundle,
>>>> and
>>>> I
>>>> also inculded the .jar file in the classpath. Maybe that could be the
>>>> problem? But if I don't add it to the classpath, how to I access the
>>>> classes?)
>>>>
>>>>
>>>>
>>>>
>>> In order to use the OBR service you will need to import the OBR API
>>> package
>>> in your client bundle. If you are getting inconsistency, it is likely
>>> because you have the classes available from more than one place (e.g., on
>>> your class path or in your client bundle). Generally speaking, the OBR
>>> packages should only be contained in the OBR bundle JAR file and no place
>>> else.
>>>
>>> As you can see I got some basic problems with it. I would really
>>> appreciate
>>>
>>>
>>>> if you could help me. Also if you have some interesting sites/doc about
>>>> Felix OBR, send them out please.
>>>>
>>>>
>>>>
>>>>
>>> I know you were using SIP Communicator, but for these experiments, I
>>> would
>>> just work with Felix by itself for now. When you start Felix in already
>>> has
>>> OBR installed, so you just need to create a simple client bundle that
>>> will
>>> import the OBR API package in its manifest and do the service lookup in
>>> its
>>> start() method. It should be pretty simple for you to get this working;
>>> however, if you are still having difficulties at this point, then you can
>>> easily post your bundle code and manifest and we will be able to figure
>>> it
>>> out quickly.
>>>
>>> -> richard
>>>
>>> Thank you very much!
>>>
>>>
>>>> Sincerely,
>>>>   Mathieu
>>>>
>>>>
>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>>> For additional commands, e-mail: users-help@felix.apache.org
>>>
>>>
>>>
>>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>

Re: Felix OBR newbie question.

Posted by "Richard S. Hall" <he...@ungoverned.org>.
Mathieu Plourde wrote:
> Everything solved!
>   

Good, however...

> - My client bundle was not supposed to import
> org.apache.felix.bundlerepository,
> even though I needed the jar in the classpath. That solved the inconsistency
> problems.
>   

Without knowing your exact setup I cannot say if this is a good thing or 
not, but generally speaking it is not a good thing to get your packages 
from the class path...

> - I had to get the RepositoryAdmin service like it's shown in the tutorials
> (using RepositoryAdmin.class.getName()). I had no more problems using this
> because my inconsistency problems were solved.
>   

Well, I'd still make sure that you have things set up correctly. If you 
have the OBR bundle installed and active, then you do not need to make 
the OBR API package available on the class path, because the OBR bundle 
does export this package; thus, your client bundle should import it...in 
fact your client bundle should be importing the package no matter what, 
since bundles should import everything not in java.*...

So, it still sounds like something is odd.

-> richard

> Thank you!
>
>
> 2008/5/16 Richard S. Hall <he...@ungoverned.org>:
>
>   
>> Mathieu Plourde wrote:
>>
>>     
>>> Hello all,
>>>
>>>   I'm a newbie using Felix and I'm wondering how to use the OBR (
>>> http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html
>>> ).
>>> In the application I'm working on, I want to be able to add my own
>>> repositories. So far I've registered the Apache Felix Bundle Repository as
>>> a
>>> bundle, but I don't know how to use it. The following code (from the Felix
>>> OBR site) does exactly what I want:
>>>
>>>
>>>
>>>
>>>       
>>>> RepositoryAdmin repoAdmin = ... // Get repo admin service
>>>> Resolver resolver = repoAdmin.resolver();
>>>> Resource resource = repoAdmin.discoverResources(filterStr);
>>>> resolver.add(resource);
>>>> if (resolver.resolve())
>>>> {
>>>>    resolver.deploy(true);
>>>> }
>>>> else
>>>> {
>>>>    Requirement[] reqs = resolver.getUnsatisfiedRequirements();
>>>>    for (int i = 0; i < reqs.length; i++)
>>>>    {
>>>>        System.out.println("Unable to resolve: " + reqs[i]);
>>>>    }
>>>> }
>>>>
>>>>
>>>>         
>>>
>>> The only problem is how to get the repo admin service?
>>>
>>>       
>> You need to lookup the service in the OSGi service registry.
>>
>> The only coding stuff
>>     
>>> I've done with Felix are the tutorials. I read a lot of doc, but I'm
>>> struggling with the coding.
>>>
>>>       
>> Well, if you have done the tutorials, you should look more closely at how
>> the clients lookup services in the service registry (see examples 3 &
>> 4)...the OBR bundle provides the RepositoryAdmin service. Your client bundle
>> will need to do a service lookup to find it. Once you have the service, then
>> you will be able to do the above code.
>>
>> The only thing I've done so far
>>     
>>> is installing/activating the Apache Felix Bundle Repository bundle. That's
>>> pretty much it. I want to use the repo admin service in another bundle. Do
>>> I
>>> need to import the packages in that bundle? When I do it, I get conflicts
>>> saying some classes are loaded twice. For example, if I use the class
>>> Repository, it says the classloader already loaded the same class
>>> already (The Apache Felix Bundle Repository is installed as a bundle, and
>>> I
>>> also inculded the .jar file in the classpath. Maybe that could be the
>>> problem? But if I don't add it to the classpath, how to I access the
>>> classes?)
>>>
>>>
>>>       
>> In order to use the OBR service you will need to import the OBR API package
>> in your client bundle. If you are getting inconsistency, it is likely
>> because you have the classes available from more than one place (e.g., on
>> your class path or in your client bundle). Generally speaking, the OBR
>> packages should only be contained in the OBR bundle JAR file and no place
>> else.
>>
>> As you can see I got some basic problems with it. I would really appreciate
>>     
>>> if you could help me. Also if you have some interesting sites/doc about
>>> Felix OBR, send them out please.
>>>
>>>
>>>       
>> I know you were using SIP Communicator, but for these experiments, I would
>> just work with Felix by itself for now. When you start Felix in already has
>> OBR installed, so you just need to create a simple client bundle that will
>> import the OBR API package in its manifest and do the service lookup in its
>> start() method. It should be pretty simple for you to get this working;
>> however, if you are still having difficulties at this point, then you can
>> easily post your bundle code and manifest and we will be able to figure it
>> out quickly.
>>
>> -> richard
>>
>> Thank you very much!
>>     
>>> Sincerely,
>>>    Mathieu
>>>
>>>
>>>
>>>       
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
>> For additional commands, e-mail: users-help@felix.apache.org
>>
>>
>>     
>
>   

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Re: Felix OBR newbie question.

Posted by Mathieu Plourde <ma...@gmail.com>.
Everything solved!

- My client bundle was not supposed to import
org.apache.felix.bundlerepository,
even though I needed the jar in the classpath. That solved the inconsistency
problems.
- I had to get the RepositoryAdmin service like it's shown in the tutorials
(using RepositoryAdmin.class.getName()). I had no more problems using this
because my inconsistency problems were solved.

Thank you!


2008/5/16 Richard S. Hall <he...@ungoverned.org>:

> Mathieu Plourde wrote:
>
>> Hello all,
>>
>>   I'm a newbie using Felix and I'm wondering how to use the OBR (
>> http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html
>> ).
>> In the application I'm working on, I want to be able to add my own
>> repositories. So far I've registered the Apache Felix Bundle Repository as
>> a
>> bundle, but I don't know how to use it. The following code (from the Felix
>> OBR site) does exactly what I want:
>>
>>
>>
>>
>>> RepositoryAdmin repoAdmin = ... // Get repo admin service
>>> Resolver resolver = repoAdmin.resolver();
>>> Resource resource = repoAdmin.discoverResources(filterStr);
>>> resolver.add(resource);
>>> if (resolver.resolve())
>>> {
>>>    resolver.deploy(true);
>>> }
>>> else
>>> {
>>>    Requirement[] reqs = resolver.getUnsatisfiedRequirements();
>>>    for (int i = 0; i < reqs.length; i++)
>>>    {
>>>        System.out.println("Unable to resolve: " + reqs[i]);
>>>    }
>>> }
>>>
>>>
>>
>>
>>
>> The only problem is how to get the repo admin service?
>>
>
> You need to lookup the service in the OSGi service registry.
>
> The only coding stuff
>> I've done with Felix are the tutorials. I read a lot of doc, but I'm
>> struggling with the coding.
>>
>
> Well, if you have done the tutorials, you should look more closely at how
> the clients lookup services in the service registry (see examples 3 &
> 4)...the OBR bundle provides the RepositoryAdmin service. Your client bundle
> will need to do a service lookup to find it. Once you have the service, then
> you will be able to do the above code.
>
> The only thing I've done so far
>> is installing/activating the Apache Felix Bundle Repository bundle. That's
>> pretty much it. I want to use the repo admin service in another bundle. Do
>> I
>> need to import the packages in that bundle? When I do it, I get conflicts
>> saying some classes are loaded twice. For example, if I use the class
>> Repository, it says the classloader already loaded the same class
>> already (The Apache Felix Bundle Repository is installed as a bundle, and
>> I
>> also inculded the .jar file in the classpath. Maybe that could be the
>> problem? But if I don't add it to the classpath, how to I access the
>> classes?)
>>
>>
>
> In order to use the OBR service you will need to import the OBR API package
> in your client bundle. If you are getting inconsistency, it is likely
> because you have the classes available from more than one place (e.g., on
> your class path or in your client bundle). Generally speaking, the OBR
> packages should only be contained in the OBR bundle JAR file and no place
> else.
>
> As you can see I got some basic problems with it. I would really appreciate
>> if you could help me. Also if you have some interesting sites/doc about
>> Felix OBR, send them out please.
>>
>>
>
> I know you were using SIP Communicator, but for these experiments, I would
> just work with Felix by itself for now. When you start Felix in already has
> OBR installed, so you just need to create a simple client bundle that will
> import the OBR API package in its manifest and do the service lookup in its
> start() method. It should be pretty simple for you to get this working;
> however, if you are still having difficulties at this point, then you can
> easily post your bundle code and manifest and we will be able to figure it
> out quickly.
>
> -> richard
>
> Thank you very much!
>>
>> Sincerely,
>>    Mathieu
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
> For additional commands, e-mail: users-help@felix.apache.org
>
>

Re: Felix OBR newbie question.

Posted by "Richard S. Hall" <he...@ungoverned.org>.
Mathieu Plourde wrote:
> Hello all,
>
>    I'm a newbie using Felix and I'm wondering how to use the OBR (
> http://felix.apache.org/site/apache-felix-osgi-bundle-repository-obr.html).
> In the application I'm working on, I want to be able to add my own
> repositories. So far I've registered the Apache Felix Bundle Repository as a
> bundle, but I don't know how to use it. The following code (from the Felix
> OBR site) does exactly what I want:
>
>
>   
>> RepositoryAdmin repoAdmin = ... // Get repo admin service
>> Resolver resolver = repoAdmin.resolver();
>> Resource resource = repoAdmin.discoverResources(filterStr);
>> resolver.add(resource);
>> if (resolver.resolve())
>> {
>>     resolver.deploy(true);
>> }
>> else
>> {
>>     Requirement[] reqs = resolver.getUnsatisfiedRequirements();
>>     for (int i = 0; i < reqs.length; i++)
>>     {
>>         System.out.println("Unable to resolve: " + reqs[i]);
>>     }
>> }
>>     
>
>
>
> The only problem is how to get the repo admin service?

You need to lookup the service in the OSGi service registry.

> The only coding stuff
> I've done with Felix are the tutorials. I read a lot of doc, but I'm
> struggling with the coding.

Well, if you have done the tutorials, you should look more closely at 
how the clients lookup services in the service registry (see examples 3 
& 4)...the OBR bundle provides the RepositoryAdmin service. Your client 
bundle will need to do a service lookup to find it. Once you have the 
service, then you will be able to do the above code.

> The only thing I've done so far
> is installing/activating the Apache Felix Bundle Repository bundle. That's
> pretty much it. I want to use the repo admin service in another bundle. Do I
> need to import the packages in that bundle? When I do it, I get conflicts
> saying some classes are loaded twice. For example, if I use the class
> Repository, it says the classloader already loaded the same class
> already (The Apache Felix Bundle Repository is installed as a bundle, and I
> also inculded the .jar file in the classpath. Maybe that could be the
> problem? But if I don't add it to the classpath, how to I access the
> classes?)
>   

In order to use the OBR service you will need to import the OBR API 
package in your client bundle. If you are getting inconsistency, it is 
likely because you have the classes available from more than one place 
(e.g., on your class path or in your client bundle). Generally speaking, 
the OBR packages should only be contained in the OBR bundle JAR file and 
no place else.

> As you can see I got some basic problems with it. I would really appreciate
> if you could help me. Also if you have some interesting sites/doc about
> Felix OBR, send them out please.
>   

I know you were using SIP Communicator, but for these experiments, I 
would just work with Felix by itself for now. When you start Felix in 
already has OBR installed, so you just need to create a simple client 
bundle that will import the OBR API package in its manifest and do the 
service lookup in its start() method. It should be pretty simple for you 
to get this working; however, if you are still having difficulties at 
this point, then you can easily post your bundle code and manifest and 
we will be able to figure it out quickly.

-> richard

> Thank you very much!
>
> Sincerely,
>     Mathieu
>
>   

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org