On Tue, Feb 2, 2010 at 14:28, Rickard Öberg <[email protected]> wrote: > Hey, > > In my project I had a need to import a service (a DataSource in my case), > and I couldn't implement it using a ServiceComposite. So what I did instead > was to create a ServiceComposite that implements ServiceImporter, and then > create a class that implements ServiceImporter that is then used for the > importedBy() in assembly, and which delegates to my ServiceComposite. > > The funky thing that this accomplishes is that I can have a native service > in Qi4j which is "always on", and which can handle importing external > services which are only sometimes available. By implementing isActive() in > my ServiceComposite I can check at the time of usage of the imported service > if isActive() is true. If not the client can handle that as it wishes. > > Here's my assembly code: > module.addServices( DataSourceService.class ).identifiedBy( "datasource" > ).visibleIn( Visibility.application ); > module.importServices( DataSource.class ). > importedBy( ServiceInstanceImporter.class ). > setMetaInfo( "datasource" ). > identifiedBy( "streamflow" ).visibleIn( Visibility.application );
Should ServiceImporter be renamed to ServiceFactory? > Currently I have hardcoded all datasource settings in the DataSourceService, > *but* if I change this to be meta-info on the imported service I can use the > import statement to do the actual settings for the individual datasources, > which is then sent to the DataSourceService as ImportedServiceDescriptor!! > In other words, the single DataSourceService can handle any number of > datasources, generally. Nice. > I think this could be a very useful pattern for importing services from > external sources in a way that there's an "always on" native service which > you can configure *how* to import services, and then use the > import-meta-info to describe *what* to import for the specific instances. > And then also, there is no limitation on the external services, i.e. they > don't have to be composites and they don't have to implement an interface or > anything like that. > > WDYT? Does this sound useful? If so, I can move the ServiceInstanceImporter > to Qi4j from my project so that it's generally available. Sounds very useful. Regards, Edward Yakop _______________________________________________ qi4j-dev mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/qi4j-dev

