[weld-dev] CDI EJB Intergration on Weld

Emily Jiang emijiang6 at googlemail.com
Wed May 27 04:43:03 EDT 2015


Will the injectionTarget.produce() produces a Weld proxy for the non-CDI
interceptors then? It seems ejb tck complains about the proxied non-CDI
interceptors. I looked at the cdi interceptors and I think the instances
are real objects not a proxy.

What I meant of "correct constructor with the resolved arguments" is that I
directly call into the correct non-CDI interceptors and get a real object
instead of a proxy.

On Wed, May 27, 2015 at 9:00 AM, Jozef Hartinger <jharting at redhat.com>
wrote:

>  You can use InjectionTarget.produce() to create instances of non-CDI
> interceptors as well. The implementation will call the @Inject constructor
> passing in the dependencies or call the no-arg constructor. What "correct
> constructor with the resolved arguments" did you mean?
>
> Jozef
>
>
> On 05/27/2015 01:04 AM, Emily Jiang wrote:
>
>  Thank you Jozef for your help with clarifying this!
>
>  By the way, for non-CDI interceptors, though EE7 spec lists these
> interceptors under the category of JavaEE component classes, I guess they
> are different from other other JavaEE component classes. For these
> interceptor instance creation, I guess we should not use
> injectiontarget.produce(). Am I right to say that we need to call into the
> correct constructor with the resolved arguments?
>
> On Thu, May 21, 2015 at 1:25 PM, Jozef Hartinger <jharting at redhat.com>
> wrote:
>
>>  On 05/13/2015 12:35 AM, Emily Jiang wrote:
>>
>>   A further question on EJB injection,
>>
>> In the Weld reference doc, performing injection on JavaEE component class:
>> To help the integrator, Weld provides
>> WeldManager.fireProcessInjectionTarget() which returns the
>> InjectionTarget to use.
>>
>>  The statement was not mentioned when it talks about performing injection
>> on EJBs. My question is that do we need to call the above method to fire
>> the event.
>>
>>  No, you only need to call this for non-contextual components. For
>> session beans this is done by Weld automatically.
>>
>>
>> Another observation with the code snippet on EJB section. It did not
>> mention how the instance was created.  I think 'it.produce()' needs to be
>> there before the it.inject().
>>
>> // Obtain the EjbDescriptor for the EJB
>> // You may choose to use this utility method to get the descriptor
>> EjbDescriptor<?> ejbDescriptor = beanManager.getEjbDescriptor(ejbName);
>> // Get an the Bean object
>> Bean<?> bean = beanManager.getBean(ejbDescriptor);
>> // Create the injection target
>> InjectionTarget it =
>> deploymentBeanManager.createInjectionTarget(ejbDescriptor);
>> // Per instance required, create the creational context
>> CreationalContext<?> cc =
>> deploymentBeanManager.createCreationalContext(bean);
>>
>>  *.... missing the line... Object instance = it.produce()*
>>  // Perform injection and call initializers
>> it.inject(instance, cc);
>>
>>  Yes, looks like the line is missing.
>>
>>
>>  Thanks
>>  Emily
>>
>>
>>
>> On Fri, May 8, 2015 at 11:29 AM, Emily Jiang <emijiang6 at googlemail.com>
>> wrote:
>>
>>>   Thank you Jozef for your helpful response! I have another
>>> clarification on the interceptors on JavaEE component classes.
>>>
>>> EE7 spec states the JavaEE component classes, listed in Table EE.5-1,
>>> need to support interceptors. Take servlet for an example, which methods
>>> can be intercepted?
>>>
>>>  As the servlet classes are invoked by the container, according to
>>> CDI1.2 spec, it seems only service(ServletRequest, ServletResponse) can be
>>> intercepted. No other methods can be intercepted.
>>>
>>> Normally customer applications override doPost or doGet, but they cannot
>>> be intercepted. I cannot see any value of support interceptors on Servlet.
>>> Anything I missed?
>>>  Thanks
>>>  Emily
>>>
>>> On Thu, May 7, 2015 at 8:22 AM, Jozef Hartinger <jharting at redhat.com>
>>> wrote:
>>>
>>>>  Hi Emily, comments inline.
>>>>
>>>> On 05/06/2015 05:38 PM, Emily Jiang wrote:
>>>>
>>>>   I have a few questions on ejb integration on Weld.
>>>>
>>>>  1)Does Weld handle the instance creation for ejb (using
>>>> injectionTarget.produce) or delegate the instance creation to EJB
>>>> container? I guess Weld will create the instead as it can manage
>>>> decorators. If not, how can decorators be managed? Please confirm.
>>>>
>>>>  Correct. Weld creates EJB instances using InjectionTarget.produce()
>>>>
>>>>
>>>>  2) When Weld creates the EJB instance, how can the other non-CDI
>>>> aroundconstruct interceptors (such as the interceptors defined via
>>>> ejb-jar.xml or @Interceptors) be passed in? I found out the
>>>> WeldCreationContext and AroundConstructCallback but I cannot find anything
>>>> mentioned in the weld reference doc. Is this the right plugin point?
>>>>
>>>>  Correct, AroundConstructCallback is the API you need to use. The
>>>> JavaDoc should be helpful. Let me know if anything is not clear. I'll add a
>>>> note about it to the refdoc.
>>>>
>>>>
>>>>  3)If Weld creates the EJB instance, how can all interceptors (cdi
>>>> style and ejb style) be invoked? Will the instance need to be passed back
>>>> to EJB container together with all CDI interceptors (get hold of them via
>>>> EjbEndpointServiceImpl.java) and EJB container needs to manage the
>>>> interceptors being invoked?
>>>>
>>>>  For interception type other than @AroundConstruct we leave it up to
>>>> the EJB implementation to handle interception. Information about CDI
>>>> interceptors is exposed to the EJB implementation via
>>>> EjbServices.registerInterceptors()
>>>>
>>>>
>>>>  4)In Weld spec, it says you must register the SessionBeanInterceptor
>>>> as the inner most interceptor in the stack for all EJBS. Can you clarify
>>>> what inner most means? Does this interceptor need to be the first EJB
>>>> interceptor to be called or the last EJB interceptor to be invoked?
>>>>
>>>>  Not sure why it says inner most - it should be outer most instead that
>>>> is it should be called as first so that the @RequestScope is available for
>>>> the other interceptors called later in the chain.
>>>>
>>>>
>>>>
>>>> --
>>>> Thanks
>>>> Emily
>>>> =================
>>>> Emily Jiang
>>>> ejiang at apache.org
>>>>
>>>>
>>>>  _______________________________________________
>>>> weld-dev mailing listweld-dev at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/weld-dev
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Thanks
>>> Emily
>>> =================
>>> Emily Jiang
>>> ejiang at apache.org
>>>
>>
>>
>>
>> --
>> Thanks
>> Emily
>> =================
>> Emily Jiang
>> ejiang at apache.org
>>
>>
>>
>
>
> --
> Thanks
> Emily
> =================
> Emily Jiang
> ejiang at apache.org
>
>
>


-- 
Thanks
Emily
=================
Emily Jiang
ejiang at apache.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20150527/e0bf8f85/attachment-0001.html 


More information about the weld-dev mailing list