Hi,

On 04.02.2009, at 05:15, Richard S. Hall wrote:

Gerald Bortis wrote:
Hi all,

I've been playing with OSGi and Felix for the past week, and I think I have a general understanding of how to apply it to my application. So far, I've refactored my code into bundle-friendly packages and have setup a build
system to generate my bundles. For every bundle, I have the following
pattern:

FooActivator.java
FooService.java
FooServiceImpl.java


Looks good.

FooActivator implements BundleActivator, and in the start method registers
FooService. Pretty straightforward. The issues I've run into are the
following:

a) What is the best way to call BarService from FooServiceImpl? I've tried both the ServiceTracker pattern, and the ServiceBinding-Utils, but both seem
a bit convoluted.


At a minimum, you should use the ServiceTracker (you could also register a service listener and do your own service tracking, but this is not recommended). With a ServiceTracker, you could use a ServiceTrackerCustomizer to call you when a service is available, for example.

b) What is the best way to make sure that FooServiceImpl doesn't call
BarService before BarService has been reigstered?


If you use a ServiceTrackerCustomerizer, it will only be called when a BarService is available.

For the second issue, I thought I was on the right path when I found the Depedency Manager bundle, but the example isn't clear how registering a ServiceDepedency on BarService instantiates the instance that FooServiceImpl requires? This lead me to the iPOJO section, which promises to address these issues, but I'm not sure if it's what I'm looking for either. Does using Dependency Manager or iPOJOs also address my first issue of how to implicity bind the services? Any pointers in the right direction are appreciated.


DependencyManager and iPOJO definitely can help too. The benefit of these types of dependency injection tools is that they actually manage the life cycle of your component, so it won't even be created until your dependencies are satisfied. Check out my iPOJO presentation under the presentations section of the documentation page on the Felix web site for a simple example at the beginning of the presentation for how you provide and require services in iPOJO, as an example.

Here is a simple example of how to implement it with iPOJO:

@Component
@Provides
public class FooServiceImpl implements FooService {
    @Requires
    private BarService myBar;

    public void doSomething() {
       myBar.doSomethingWithBar();
    }
}

That's simple, isn't it ? You don't have to worry about BarService availability, iPOJO will manage this for you :-)


Clement




-> richard

Regards,
Gerald



---------------------------------------------------------------------
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