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]

