Hi Bengt

I'm not certain why you would want to write a singleton this way. The blueprint 
container ensures that you only get one instance of the bean (the default scope 
is singleton).

I'm also not sure why making this change would make your testing different, 
rather than passing the EntityManager to a factory method you would pass it to 
an instance method on the object you create... From that point on the access is 
completely identical.

I believe you are correct that the JPA blueprint support should cope with 
constructor injection as well as setter injection, so I suggest that you raise 
a JIRA and we can get it into the 0.3 stream.

Regards,

Tim


________________________________
> Date: Fri, 17 Sep 2010 12:08:19 +0200
> Subject: Re: Blueprint, factory method and JPA
> From: [email protected]
> To: [email protected]
>
> Thanks for you reply Timothy,
>
> The reason why I want to use a factory method (a factory class would
> work too) is that I have a singleton pattern underneath. I need to make
> sure that, after construction of the BusinessUnitServiceImpl instance,
> I need to set a static variable to that instance. I've had a hard time
> to find away around this - it probably requires major restructuring on
> my side. I do think that as far as dependency injection is concerned
> the following methods should be supported:
>
> - setter injection
> - constructor injection
> - factory method
> - factory class
>
> I also believe that all of those are included in the Blueprint spec -
> aren't they? Then, any integration to Blueprint (like aries JPA) should
> support those injection methods. I will think more about your hint:
>
> Managed persistence context objects do not need to be shared between
> beans as the context propagates with the active transaction.
>
> I might be able to use that, however, currently I support both in-OSGi
> and out-of-OSGi tests and I would like to access the entity manager in
> the same way. That's why I set the static variable to the injected
> instance in the OSGi case. When I'm not in OSGi I manually create the
> entity manager but in both scenarios I access the entity manager in the
> same way.
>
> Hope that makes some sense,
>
> /Bengt
>
> 2010/9/17 Timothy Ward
>>
>
>
> Hi Bengt,
>
> This is actually a case that isn't covered by the existing JPA
> blueprint integration. The and elements are effectively specialized
> property elements. As such your example is effectively:
>
>
>> class="se.digia.sts.refdata.impl.BusinessUnitServiceImpl"
> factory-method="create">
>
>
>
>
> This obviously is garbage from a blueprint point of view. To progress
> your application development the only option currently is to expose a
> setter method on the "businessUnitServiceImpl" bean.
>
> If this isn't possible for some reason, then please raise a JIRA
> enhancement against the Aries JPA container, and I'll look at adding
> this support. I would like to check though, why is it necessary to pass
> the context to the factory method? Managed persistence context objects
> do not need to be shared between beans as the context propagates with
> the active transaction.
>
> Regards,
>
> Tim
>
>
>
> ________________________________
>> Date: Fri, 17 Sep 2010 08:42:01 +0200
>> Subject: Blueprint, factory method and JPA
>> From: [email protected]
>> To: [email protected]
>>
>> I'm trying to use a factory method with Aries Blueprint. I need to pass
>> a JPA entity manager as an argument to the factory method. I'm trying
>> the following:
>>
>>> class="se.digia.sts.refdata.impl.BusinessUnitServiceImpl"
>> factory-method="create">
>>
>>
>>
>>
>>
>> However, Aries seems to object against this syntax. How can I
>> accomplish this? All the samples I've seen where "jpa:context..." is
>> involved always use setter injection, never in combination with the
>> "" tag.
>>
>> I'm using version 0.2-incubating of Aries.
>>
>> /Bengt
>>
>>
>
>
                                          

Reply via email to