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 <[email protected] <mailto:[email protected]>> 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
    <[email protected] <mailto:[email protected]>> 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
        [email protected] <mailto:[email protected]>


        _______________________________________________
        weld-dev mailing list
        [email protected]  <mailto:[email protected]>
        https://lists.jboss.org/mailman/listinfo/weld-dev




-- Thanks
    Emily
    =================
    Emily Jiang
    [email protected] <mailto:[email protected]>




--
Thanks
Emily
=================
Emily Jiang
[email protected] <mailto:[email protected]>

_______________________________________________
weld-dev mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/weld-dev

Reply via email to