I think I need to use a ManagedServiceFactory

bundleB defines services
bungleC, the app, uses B

The services need some other classes from bundleA, for low level storage
operations, so a connection to a db: host, port, database... all things that
only the app, C, knows. In a war I'd just inject bean into beans, but here
is different.
I cannot instantiate beans from B while B starts in the container, I need to
ask for a instance of a bean defined in B during the C startup, cause only C
knows how to configure the bean from A that is needed in the bean in B.

Does this make sense?

On Wed, Mar 30, 2011 at 6:57 PM, Allen Lau <[email protected]> wrote:

> I think what you want to do is achievable if you have some custom code to
> search through all the bundles imported and get the springA.xml and add it
> to your application context.
>
> I see that you are using Spring-DM, so in that case, if you are relying on
> the extender, why not expose your bundle A beans as services and then
> reference them from bundle B,C,D, etc.
>
>
> On Wed, Mar 30, 2011 at 5:37 AM, Daniele Dellafiore
> <[email protected]>wrote:
>
> > On Wed, Mar 30, 2011 at 2:23 PM, Daniele Dellafiore
> > <[email protected]>wrote:
> >
> > > Hi have bundle A with a springA.xml file that depends on beans from
> > bundle
> > > B springB.xml
> > > I've added a springA-osgi.xml with declared services and on bundle A
> > > activation everything works and I have
> > >
> > >
> > > | INFO  | tenderThread-114 | OsgiServiceFactoryBean           |
> > > r.support.OsgiServiceFactoryBean  301 | 42 -
> > org.springframework.osgi.core -
> > > 1.2.0 | Publishing service under classes
> > > [{in.laz.storage.mongo.StorageTemplate}]
> > > INFO  | tenderThread-114 | OsgiServiceFactoryBean           |
> > > r.support.OsgiServiceFactoryBean  301 | 42 -
> > org.springframework.osgi.core -
> > > 1.2.0 | Publishing service under classes [{com.mongodb.Mongo}]
> > >
> > > both of them (even if I really need to export the first as service,
> being
> > > the second injected in the first, anyway.
> > >
> > > Then bundleB have a StorageTemplate (first service) autowired into a
> > bean.
> > > That does not work:
> > > "No matching bean of type [in.laz.storage.mongo.StorageTemplate] found
> > for
> > > dependency"
> > >
> > > even if in springB,xml I import both springA and springA-osgi xml
> (which
> > I
> > > thiink should not be necessary).
> > >
> > > Two question here:
> > > 1. What am I possibly missing that's not making it work?
> > > 2. I'd like that every bundle that imports springA.xml create some new
> > > instances of the beans defined there, but I do not think that's what is
> > > happening: I thing that bundle A instance the beans and export them as
> > > services, and the same instance is eventually injected into the beans
> of
> > > bundle B. That's not what I want, I just want the spring beans
> definition
> > to
> > > stay in bundle A so I do not have to duplicate it in every other
> bundle,
> > how
> > > can I achieve that?
> > >
> >
> > sorry I sent it before was completed.
> > So basically I am failing doing a thing that's not what i really need to
> > do,
> > I just realised :)
> >
> > But I am not finding a way to just make a bundle read xml files from
> other
> > bundles, that should be supported, isn't it? I expect it to be even
> easier
> > than autowiring spring beans exported as osgi services, but if xml are
> not
> > exported... that won't work at all.
> >
> > Thanks for any hint.
> >
>

Reply via email to