Hello,

Richard is right, you can do that with composites. A composite is a ...
composition of components or services.
So, in your case, let's imagine 3 implementation classes like:
@Component
@Provides(specifications= {A.class})
public class A {

    public String doSomething() {
        return "A";
    }

}

@Component
@Provides(specifications= {B.class})
public class B {

    @Requires
    private A myA;

    public String doSomething() {
        return "B -> " + myA.doSomething();
    }

}

@Component
public class C {

    @Requires
    private B myB;

    @Validate
    public void start() {
        System.out.println("Call C -> " + myB.doSomething());
    }

}

Two things to note:
- A and B provide themselves as 'service'. Despite (like Richard) I do not
recommend such practice, iPOJO supports that.
- B and C deal with the bound component with simple service dependencies.

So, you can argue that you don't want global services there. That's where
composites comes into the games. Composites provide a service isolation
mechanism. So services exposed inside a composite are not exposed outside
(except if they are voluntary exported).

Let's create such composition:
<ipojo>
<composite name="MyApp">
  <instance component="org.apache.felix.ipojo.sample.A"/>
  <instance component="org.apache.felix.ipojo.sample.B"/>
  <instance component="org.apache.felix.ipojo.sample.C"/>
</composite>
<instance component="MyApp"/>
</ipojo>

That's it. You just declare an instance of A, B and C. As bindings are
service-based, it's automatic. As said above, the services exposed inside
the composite are not exposed outside.
So, once deployed, something like 'Call C -> B-> A' appears.

If you want to specify bindings more finely, yo can write something like:
...
  <instance component="org.apache.felix.ipojo.sample.A" instance.name
="myA"/>
  <instance component="org.apache.felix.ipojo.sample.B">
    <property name="requires.from">
        <property name="org.apache.felix.ipojo.sample.A" value="myA"/>
     </property>
  </instance>
...

When you're application works, you can reduce binding coupling by replacing
the instance declarations by instantiated sub-services (iPOJO will looks for
a component type providing your specification).
I recommend you to read
http://felix.apache.org/site/ipojo-composition-tutorial.html to know more
about iPOJO compositions.

Regards,

Clement

2009/8/7 Richard S. Hall <[email protected]>

> On 8/7/09 11:35, André Lage wrote:
>
>> Hi all!
>>
>> I'm interested in knowing how I could compose iPOJO components, but only
>> in terms of components. Let me better explain.
>>
>> Imagine that I am a service developer (a single service developer). In
>> this case, from the OSGi point of view, I should implement a Java interface
>> that describes/represents this service and then publish my service (suppose
>> that there is only this service inside of a bundle). But before implementing
>> this interface, I need to well design and develop my component-based
>> application.
>>
>> In other words, I need to take advantage of the iPOJO component model when
>> composing *without taking into account services*, I just want to plug/unplug
>> components. In some tutorials, I could only see relationships among iPOJO
>> components through OSGi services.
>>
>> Let's take an example: suppose that the following illustration is my
>> application design (a single OSGi service inside of a bundle):
>>
>>         D-->-C-->-B-->-A
>>
>>         where letters are components;
>>         arrows are the connections among them; and
>>         A is the component that finally implements the service interface.
>>
>> Here is my question: How can I compose D, C and B with no services?
>>
>> I know it may sound strange the fact of avoiding service interactions.
>> Actually, I'm interested in both components and services, but I must also
>> know how much iPOJO component model can help me when developing "pure"
>> component applications. I've read in another thread about other OSGi-based
>> component models (Blueprint, DS, Spring-DM, Peaberry), however I don't know
>> them. Please, feel free to report something even it is about other OGSi
>> component models rather than iPOJO.
>>
>
> I am sure Clement can answer about iPOJO details better than I, so I will
> leave it to him, but I believe what you want to do is possible using
> composites.
>
> More generally, it is not clear to me why you see "pure components" as
> being without services...that sounds like object orientation to me.
> Typically, components provide and require interfaces through which they
> interact with other components. In OSGi we treat these interfaces as OSGi
> services (which themselves are just interfaces).
>
> So, even if you are not using OSGi, I would still recommend an approach
> where your components provide and require interfaces, which is the main
> mechanism for keeping component implementations decoupled from each other.
>
> -> richard
>
>
>
>> Thank you in advance,
>>
>>
>> André Lage.
>>
>>
>> ---------------------------------------------------------------------
>> 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