[cdi-dev] @New and producer methods/fields

Mark Struberg struberg at yahoo.de
Wed Sep 28 09:06:21 EDT 2011


filed under CDI-170.

have fun :)

LieGrue,
strub



----- Original Message -----
> From: Pete Muir <pmuir at redhat.com>
> To: Mark Struberg <struberg at yahoo.de>
> Cc: "cdi-dev at lists.jboss.org" <cdi-dev at lists.jboss.org>
> Sent: Sunday, September 25, 2011 10:11 PM
> Subject: Re: [cdi-dev] @New and producer methods/fields
> 
> 
> On 25 Sep 2011, at 21:10, Mark Struberg wrote:
> 
>>  As explained below: in every case where you need a producer method to 
> create a useful bean, then @New just doesn't work. 
>> 
>> 
>>  My usecase was that I would have needed one of those EntityManagers for 
> unit tests. And since unit tests are no CDI managed beans thus cannot use 
> @Transactional, I wanted to just create a manually managed contextual instance.
> 
> It wasn't intended for this use case, but we could consider if this is 
> possible.
> 
> File an issue, I have a bad feeling there is a gotcha in here somewhere, but not 
> sure atm.
> 
>> 
>>  @New currently is basically only useful for creating new instances of a 
> class (which must not even be a managed bean but vetoed...).
> 
> This is the use case for which it is intended.
> 
>> 
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>> 
>>  ----- Original Message -----
>>>  From: Pete Muir <pmuir at redhat.com>
>>>  To: Mark Struberg <struberg at yahoo.de>
>>>  Cc: "cdi-dev at lists.jboss.org" <cdi-dev at lists.jboss.org>
>>>  Sent: Sunday, September 25, 2011 9:56 PM
>>>  Subject: Re: [cdi-dev] @New and producer methods/fields
>>> 
>>>  Section 3.12 states "For each managed bean, and for each session 
> bean, a 
>>>  second bean exists which:"
>>> 
>>>  So, there are no @New beans for producers.
>>> 
>>>  What is the use case you are trying to address?
>>> 
>>>  On 24 Sep 2011, at 11:35, Mark Struberg wrote:
>>> 
>>>>  Hi folks!
>>>> 
>>>>  We recently talked about ways to properly destroy beans which got 
> created 
>>>  via Instance or @New.
>>>>  I just realized that only having 
>>>>  @Inject @New MyClass dings; 
>>>>  might not be enough. 
>>>> 
>>>>  Imagine you have 2 producer methods which create EntityManagers 
>>>> 
>>>>  public class EntityManagerProducer {  
>>>>       @Produces @RequestScoped @UserDb
>>>>       public void createUserDbEm() {
>>>>           return 
>>>  entityManagerFactory.createEntityManager("userdb");
>>>>       }    
>>>>     
>>>>       @Produces @RequestScoped @AdminDb
>>>>       public void createAdminDbEm() {
>>>>           return 
>>>  entityManagerFactory.createEntityManager("admindb");
>>>>       }    
>>>>  }
>>>> 
>>>>  If I need a 'temporarily self managed' userdb 
> EntityManager, I 
>>>  cannot just
>>>>  type 
>>>>  @Inject @New @UserDb EntityManager userDbEm;
>>>>  because according to the spec there is only 1 Bean with exactly 
> @New (and 
>>>  none with additional @UserDb)
>>>>  The @New is basically useless for producer methods, isn't?
>>>> 
>>>>  Do we like to address this somehow?
>>>> 
>>>>  LieGrie,
>>>>  strub
>>>> 
>>>> 
>>>>  _______________________________________________
>>>>  cdi-dev mailing list
>>>>  cdi-dev at lists.jboss.org
>>>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
>>> 
>



More information about the cdi-dev mailing list