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:39:17 GMT
Yeah, since NetBeans bundles the Glassfish application server, I am 
usually testing my app with it. TomEE just showed up on my radar earlier 
this year, but I had a hard time getting NetBeans to even recognize it 
for generating pages from entity classes. Now that I found a workaround 
and that the upcoming NetBeans release (8.0) will support TomEE 
natively, I am testing with it as well. Hence some of the issues I have 
encountered so far. But those were related to OpenJPA really.

But this problem seems more on the CDI implementation of TomEE and it 
seems to be discrepant in this particular regard. I am in no way 
familiar with what the spec is saying about injecting from an abstract 
class. So I hope that some of the more senior TomEE devs have an ear and 
eye for the topic here.

On 10/28/2013 05:30 PM, Howard W. Smith, Jr. wrote:
> Interesting, you're using NetBeans and you have code that looks very
> similar to mine, and it seems as though you did as I did... migrate from
> glassfish 3.1.2(.2) to tomee(+).
>
> at any rate, I think I remember seeing-and-experiencing that exception
> before (some/long time ago[1]...in the past after migrating from
> glassfish-to-tomee and JSF-managed-beans to CDI-managed-beans).
>
> [1]
> http://openejb.979440.n4.nabble.com/TomEE-CDI-adding-Typed-resulted-in-UnsatisfiedResolutionException-td4663062.html
>
>
>
>
>
>
>
>
>
> On Mon, Oct 28, 2013 at 6:11 PM, Kay Wrobel <kay.wrobel@gmx.net> wrote:
>
>> For those looking at the log: the error messages start at around line 214.
>>
>>
>> On 10/28/2013 05:06 PM, Kay Wrobel wrote:
>>
>>> 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<http://openejb.979440.n4.nabble.com/CDI-Injecting-parameterized-types-tp4665761p4665766.html>
>>>>> Sent from the OpenEJB User mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>


Mime
View raw message