2009/4/13 Clement Escoffier <clement.escoff...@gmail.com>

> Hi !
> On 12.04.2009, at 22:06, Guillaume Nodet wrote:
>
>  I'm investigating implementing the blueprint spec on top of iPojo, but
>> after digging a bit in the iPojo code, I have a few questions.
>>
>
> Nice investigation ;-)
>
>>
>>  * constructor injection seems to be missing
>>
>
> True, I' m not a fan of constructor injection. However, if it's a "must", I
> will add it.
> Service will be injected by using temporal dependencies (with or without
> proxies).
>

I think constructor injection would be a "nice-to-have" because I do know
several people who aren't fans of setter injection (due to mutability
issues)


>  * not sure how to inject other components as properties of a given
>> component.  It seems properties can only handle simple types, while
>> dependencies require interfaces
>>
>
> About properties : primitives and objects are supported, as well as lists,
> dictionaries and maps of objects. To inject an object, either you create the
> object and add it to the instance configuration (so, must use the iPOJO
> api), or you have a type with a String constructor (in this case, the
> property can be declared in the metadata.xml file).
> So, you can inject instance with properties. But, properties are not
> intended to impact the lifecycle. However, when you inject an instance, and
> if this instance is invalid, the instance using the invalid instance should
> be invalid too.
>
> About services: I recently remove the 'interface' limitation. This is
> available is the trunk version (and so will be available in the 1.4.0
> version).
>
>
>>  * ability to create and populate collections to inject as properties
>> (only collections of simple types are supported afaik)
>>
>
> List, vector, map and dictionary of any type (as well as maps of lists of
> dictionaries of vectors) are supported.
>
>  * ability to expose classes and not only interfaces in the osgi registry
>>
>
> As said above, this was recently fixed.
>
>>  * when manipulating the bytecode to enhance the classes, can iPojo
>> handle the parent classes ? i.e. if a field is defined in the parent
>> class, will iPojo manipulate it accordingly ?
>>
>
> That's more tricky. iPOJO does not manipulate parent class. The issue is
> that 1) parent classes can be in a different bundle (not iPOJO powered), and
> the parent class can be extended by non iPOJO classes. So, right now, only
> method injection is supported in parent classes. I plan to try to support
> parent manipulation, it's on the roadmap since at least one year and never
> find an adequate time slot).
>

just wondering... does this mean you should be careful when exporting
packages containing iPOJO powered classes (or perhaps you shouldn't
export them at all, just to be safe?)


>  On point #2, i think iPojo can only handle dependencies that are
>> imported as OSGi services.  If this is true, does this mean I have to
>> create a composite so that all component instances are create at the
>> composite level and not really exported in the OSGi registry ?
>>
>
> I would prefer that way:
> - first instance injection can impact the lifecycle. Service injection
> impacts the lifecyle, so makes sense to use to inject instances.
> - composite brings the isolation property that is also promoted by the
> blueprint. Only beans of the same application context can be injected. In
> iPOJO terms, it would be : services from the same composite (i.e. service
> context) can be injected.
>
>> The blueprint spec mostly rely on component dependency injection where
>> components are instanciated and wired explicitely.  How can I achieve
>> that using iPojo ?
>>
>
> Inside composites, it's possible. Instances are declared with:
> <composite>
> <instance .../>
> ...
> </composite>
>
> I will commit the API allowing to declare composites "programmatically".
>
> If you rely on the composite service registry to bound instances together,
> you can provide all the Blueprint features.
>
> Regards,
>
> Clement
>
>  --
>> Cheers,
>> Guillaume Nodet
>> ------------------------
>> Blog: http://gnodet.blogspot.com/
>> ------------------------
>> Open Source SOA
>> http://fusesource.com
>>
>
-- 
Cheers, Stuart

Reply via email to