Hi Ray,

thanks for clarification and the subtle hint on CDI integration ;)

Kind regards,
Thomas

------ Originalnachricht ------
Von: "Raymond Auge" <raymond.a...@liferay.com>
An: "Thomas Driessen" <thomas.driessen...@gmail.com>; "OSGi Developer Mail List" <osgi-dev@mail.osgi.org>
Cc: "Tim Ward" <tim.w...@paremus.com>
Gesendet: 19.02.2019 14:42:13
Betreff: Re: [osgi-dev] ComponentServiceObjects vs ServiceObjects

Thomas,

You can only use ComponentServiceReference where you have @Reference.

In other words, if you create a raw service tracker, or if you get service directly (and I sincerely hope not), the you _must_ use ServiceObjects.

In a few months when you ultimately switch over to CDI integration ;) you'll then use org.osgi.service.cdi.reference.BeanServiceObjects with the same goal as ComponentServiceObjects.

:)

- Ray

On Tue, Feb 19, 2019 at 2:07 PM Thomas Driessen via osgi-dev <osgi-dev@mail.osgi.org> wrote:
Hi Tim,

as always this is super informative :) Thanks.

Should I then use ComponentServiceObjects too when I'm not in the context of a @Component annotated class? In my last sketch for the OSGi integration in Vaadin Flow I used ServiceObjects instead. Would ComponentServiceObjects be better here?

This is the class I'm talking about: https://github.com/Sandared/flow-osgi/blob/master/flow.osgi.integration/src/main/java/io/jatoms/flow/osgi/integration/v2/OSGiInstantiatorV2.java

Kind regards,
Thomas

------ Originalnachricht ------
Von: "Tim Ward" <tim.w...@paremus.com>
An: "Thomas Driessen" <thomas.driessen...@gmail.com>; "OSGi Developer Mail List" <osgi-dev@mail.osgi.org>
Gesendet: 19.02.2019 14:02:21
Betreff: Re: [osgi-dev] ComponentServiceObjects vs ServiceObjects

As I get it ComponentServiceObjects are just for use within Components and are obtained vie @Reference?

Yes - you should *always* use ComponentServiceObjects if you want to get on-demand instances of a prototype scope service inside your DS component.

But why are not ServiceObjects used for this?

ServiceObjects is a low-level API. You are responsible for ensuring that *every* call to get is balanced by a call to unget. This gives your component a big tidy-up job in its deactivate method (and other places as necessary). If you use ComponentServiceObjects then DS is able to track all of the instances that you’ve created and make sure that they all get released automatically if your component is deactivated or the reference is rebound (for example with a greedy dynamic mandatory reference).

ComponentServiceObjects is therefore much safer to use than ServiceObjects as you don’t need to be worried about the mess that could be ongoing when your component stops. Note that if your component can create a potentially unlimited number of service instances from the ComponentServiceObjects you must still make sure to release instances that you create. If you fail to do this you will run out of memory.

I hope this helps.

Tim

On 19 Feb 2019, at 13:53, Thomas Driessen via osgi-dev <osgi-dev@mail.osgi.org> wrote:

Hi,

can someone explain to me the difference between ComponentServiceObjects and ServiceObjects and when to use which?

As I get it ComponentServiceObjects are just for use within Components and are obtained vie @Reference? But why are not ServiceObjects used for this?

Kind regards,
Thomas
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev


--
Raymond Augé <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000) Senior Software Architect Liferay, Inc. <http://www.liferay.com> (@Liferay) Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org> (@OSGiAlliance)
_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to