I would need a bit more code to understand the problem. E.g. how the DiscountCodeFacade does look like. Ideally a small sample project.
The message in the log indicates that OWB cannot find a Bean for the InjectionPoint. LieGrue, strub ----- Original Message ----- > From: Kay Wrobel <[email protected]> > To: [email protected] > Cc: > Sent: Monday, 28 October 2013, 23:06 > Subject: Re: CDI Injecting parameterized types > > Interesting that this topic has come up. I just tried to roll out a > change to my project where I have following situation: > Currently, I have an AbstractController and then a Controller for each > entity class. On the EJB side of things, I have an AbstractFacade and an > entity Facade for each entity, each annotated with @Stateless. Right > now, I am injecting an EntityFacade object into an EntityController and > then hand off the actual object to a variable that sits inside the > AbstractController. I wanted to change that behavior and perform the > injection right inside the abstract controller class. To give you a more > concrete example, this is how it looks like now: > > AbstractController.java: >> public abstract class AbstractController<T> { >> >> private AbstractFacade<T> ejbFacade; >> >> public AbstractController() { >> } >> >> protected AbstractFacade<T> getFacade() { >> return ejbFacade; >> } >> >> protected void setFacade(AbstractFacade<T> ejbFacade) { >> this.ejbFacade = ejbFacade; >> } >> } > > CustomerController.java: >> @Named(value = "discountCodeController") >> @ViewAccessScoped >> public class DiscountCodeController extends >> AbstractController<DiscountCode> implements Serializable { >> >> * @Inject** >> ** private DiscountCodeFacade ejbFacade;** >> * >> @PostConstruct >> public void init() { >> super.setFacade(ejbFacade); >> } >> >> } > Now for the change that I had already tested out with Glassfish 3.1.2: > > AbstractController.java: >> public abstract class AbstractController<T> { >> >> * @Inject** >> ** private AbstractFacade<T> ejbFacade;** >> * >> public AbstractController() { >> } >> >> public AbstractController(Class<T> itemClass) { >> this.itemClass = itemClass; >> } >> } > DiscountController.java: >> @Named(value = "discountCodeController") >> @ViewAccessScoped >> public class DiscountCodeController extends >> AbstractController<DiscountCode> implements Serializable { >> >> public DiscountCodeController() { >> super(DiscountCode.class); >> } >> >> } > Notice how I am injecting an AbstractFacade<T> inside > AbstractController<T>. This works in Glassfish but fails in Tomee/OpenEJB. > > Attached is the the deployment log of TomEE: http://pastebin.com/iZHZqy5d > > Any input from you guys? > > > > On 10/28/2013 04:29 PM, Romain Manni-Bucau wrote: >> I needed it for other reasons. Globally while not using producers it should >> work. >> Le 28 oct. 2013 22:21, "Chris Owens" > <[email protected]> a >> écrit : >> >>> Thank you, that code is very helpful. I was hoping to be able to do it >>> without the use of an additional qualifier. >>> >>> >>> >>> -- >>> View this message in context: >>> > http://openejb.979440.n4.nabble.com/CDI-Injecting-parameterized-types-tp4665761p4665766.html >>> Sent from the OpenEJB User mailing list archive at Nabble.com. >>> >
