tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kay Wrobel <kay.wro...@gmx.net>
Subject Re: CDI Injecting parameterized types
Date Mon, 28 Oct 2013 22:06:57 GMT
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" <ctag+openejb@chris-owens.com> 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.
>>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message