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




--
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