You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by ext2 <xu...@tongtech.com> on 2010/04/30 08:30:59 UTC

how to control extender's order?

Hi:
	In osgi, extender is a very useful pattern. But sometimes if we use
several extenders to extending the same bundle's function.  They may cause
un-desirable underlying sequential coupling;

	For example: WEB Container in OSGI  use a extender to recognize  a
War Bundle , and also Spring-DM use a extender to recognize a Spring bundle.
So if I write a bundle which is a war-bundle and also a spring-dm bundle.
The servlet (in bundle) use a osgi-service  injected by spring-dm; for this
example , I wish  the spring-extender works before the Web-Extender, so the
servlet created by Web-Extender can safely call the osgi-service injected by
the spring-extender;
	But in osgi framework, how could I control the extenders work order
while they extending the sample bundle?

Thanks any suggestion;
	



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


Re: how to control extender's order?

Posted by Peter Kriens <pe...@aqute.biz>.
Yup, ordering is a pain when it is not based on service dependencies. The actual problem you point out was noticed during the design phase but it was deemed very important  by some EEG member that the WAR file acted as a WAR according to the Java EE Servlet Spec, which prohibited that it played nice in the OSGi world. This impedance mismatch between Blueprint and the Web Extender was therefore accepted.

After working with these kind of problems for a long time (even long before OSGi) I've come to the conclusion that only services work well in all cases. You therefore have to translate the problem to a service problem. iPOJO, DS, Blueprint are all experts in handling service dependencies and ordering is a dependency problem. In this particular case the problem is that the WAR extender is oblivious of any dependencies and assumes the world is ready when it is ready, ok and the extendee. In this case, the WAR extender will create a servlet. The simplest solution is to create a ServletDepender servlet. This dummy servlet must be parameterized with a filter. Once it starts, it gets the service if it exists, or waits until it is registered.

In your Blueprint code you just register the servlet you want as a service.

This model uses services to handle dependencies and thus ordering. Almost all of the OSGi machinery is geared to make service dependencies work reliable and actually quite nicely. 

Kind regards,

	Peter Kriens




On 30 apr 2010, at 17:49, Richard S. Hall wrote:

> 
> 
> On 4/30/10 2:30, ext2 wrote:
>> Hi:
>> 	In osgi, extender is a very useful pattern. But sometimes if we use
>> several extenders to extending the same bundle's function.  They may cause
>> un-desirable underlying sequential coupling;
>> 
>> 	For example: WEB Container in OSGI  use a extender to recognize  a
>> War Bundle , and also Spring-DM use a extender to recognize a Spring bundle.
>> So if I write a bundle which is a war-bundle and also a spring-dm bundle.
>> The servlet (in bundle) use a osgi-service  injected by spring-dm; for this
>> example , I wish  the spring-extender works before the Web-Extender, so the
>> servlet created by Web-Extender can safely call the osgi-service injected by
>> the spring-extender;
>> 	But in osgi framework, how could I control the extenders work order
>> while they extending the sample bundle?
>> 
>> Thanks any suggestion;
>> 	
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> 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