CDI -- @Inject not working among dependent projects -
the basic architecture of project (jboss msc version 1.0.2.ga-redhat-2) this
(vwebproj) --- >compile dependency ---> service project (qserviceproj) (qserviceproj) ---->compile dependency ---> proxy project(vproxyproj) (vproxyproj) ---->compile dependency ---> manager project(vqmanagerproj) manager project(vqmanagerproj)
i have manger class inside manager project (vqmanagerproj) extends class jdao in turn implements interface vdao
@named("qmanager") @applicationscoped public class qmanager extends jdao {...} jdao implements vdao proxy project (vproxyproj)
i have proxy class inside proxy project (vproxyproj) implements interface vproxy , has manager injected it
@named("vproxyimpl") @applicationscoped public class vproxyimpl implements vproxy { @inject @named("qmanager") private vdao vdao; } sevice project (qserviceproj)
i have service class inside sevice project (qserviceproj) extends abstract class
@named @applicationscoped public class qservice extends abstractservice {..} inside abstract class have proxy injected
public abstract class abstractservice{ @inject @named("vproxyimpl") private static vproxy proxy; } and using proxy object service class makes calls manager etc
web project (vwebproj)
now have servlet inside web project (vwebproj) in service class injected
@inject private qservice qservice; the problem except qservice none of other injections work i.e inside qservice proxy instance null
however if add injections directly in servlet class
@inject @named("qmanager") private vdao vdao; @inject @named("vproxyimpl") private static vproxy proxy; they initialized if go via qservice null
i have put beans.xml in projects,
thanking in advance charlie
as far know injector can inject objects instances , fields - trying "inject" dependencies static fields.
i suggest using @singleton annotation instead - create separate instance hold current static references, , inject singletons instances instead.
@singleton class proxyservice { @inject @named("vproxyimpl") private vproxy proxy; public vproxy getproxy() { return proxy; } } public abstract class abstractservice{ @inject private proxyservice proxyservice; } alternatively can consider making vproxy singleton - seems want obtain 1 instance of proxy in whole application. need decide best approach here.
Comments
Post a Comment