[weld-dev] CDI EJB Intergration on Weld

Jozef Hartinger jharting at redhat.com
Thu May 21 08:25:27 EDT 2015


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 
> <mailto: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 <mailto: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 <mailto:ejiang at apache.org>
>>
>>
>>         _______________________________________________
>>         weld-dev mailing list
>>         weld-dev at lists.jboss.org  <mailto:weld-dev at lists.jboss.org>
>>         https://lists.jboss.org/mailman/listinfo/weld-dev
>
>
>
>
>     -- 
>     Thanks
>     Emily
>     =================
>     Emily Jiang
>     ejiang at apache.org <mailto:ejiang at apache.org>
>
>
>
>
> -- 
> Thanks
> Emily
> =================
> Emily Jiang
> ejiang at apache.org <mailto:ejiang at apache.org>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20150521/bb7773cd/attachment.html 


More information about the weld-dev mailing list