On 23.03.11 18:36, "Henrik Niehaus" <[email protected]> wrote:

>Am 23.03.2011 18:07, schrieb Clement Escoffier:
>> Hi,
>> 
>> 
>> On 23.03.11 16:37, "Henrik Niehaus" <[email protected]> wrote:
>> 
>>> Hi felix users,
>>>
>>> I'm thinking about using iPojo to create component instances
>>> programatically. I have a class OsdSession, which represents a user
>>> session and has dependencies to several services. The OsdSession itself
>>> runs as a thread and handles user interaction until the user explicitly
>>> ends the session.
>>> My idea was to use iPojo to create new instances of the OsdSession,
>>> because then I don't have to create all the service lookup / handling,
>>> but let iPojo inject all dependencies.
>>>
>>> I played around with ipojo and I'm now able to create a new instance
>>> like so (simplified):
>>>
>>> @Component
>>> public class OsdSession implements Runnable {...}
>>>
>>> @Component
>>> public class Activator {
>>>
>>> @Requires(filter =
>>>"(factory.name=de.berlios.vch.osdserver.OsdSession)")
>>> private Factory sessionFactory;
>>>
>>> private OsdSession createSession() throws UnacceptableConfiguration,
>>> MissingHandlerException, ConfigurationException {
>>>        InstanceManager instance = (InstanceManager)
>>> sessionFactory.createComponentInstance(null);
>>>        instance.start();
>>>        OsdSession session = (OsdSession) instance.createPojoObject();
>>> }
>>>
>>> }
>>>
>>> But with this code I have to check, if the instance is valid and call
>>> the validate and invalidate method and do all the stuff, which ipojo
>>> normally does for me.
>>>
>>> My goal was to get the same behaviour as if I had defined the instance
>>> in the metadata.xml. But instead of having only one instance, I want to
>>> create them, when they are needed.
>>>
>>> Another point is, that the instances should be disposed if the user
>>> session ends, so that everything gets cleaned up and I don't leak
>>>memory.
>>>
>>> What do you think about my approach? Is there a way to do this? Maybe
>>> there are other approaches to solve this kind of problems?
>> 
>> You should let iPOJO creates the pojo object for you, and not call
>> createPojoObject. If you want to force the object creation, use
>> @Component(immediate=true). To retrieve the created object, just use
>> InstanceManager.getPojoObject()
>> 
>> Regards,
>> 
>> Clement
>> 
>
>Thanks Clement,
>
>but this is only a technical thing. Any thoughts on my other questions?
>
>Do I have to manage the components lifecycle (check validity, call
>validate/invalidate etc.) on my own?

No, iPOJO will do that for you.

>
>Can I automatically dispose the component after the thread ended, or do
>I have to implement some kind of callback, which then calls the dispose
>method of ComponentInstance to achieve this behaviour?

You must call dispose when you don't need the component anymore.

Regards,

Clement


>
>>>
>>>
>>> Tanks in advance,
>>> Henrik
>>>
>>> ---------------------------------------------------------------------
>>> 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]
>> 
>> 
>
>
>-- 
>Mein öffentlicher PGP Schlüssel und Fingerabdruck:
>http://hampelratte.org/pgp/
>
>---------------------------------------------------------------------
>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