<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    No, proxies/subclasses should not be used for non-CDI interceptors.
    This depends on which InjectionTarget you use to produce the
    instances. There is a special method on InjectionTargetFactory that
    should be used to create InjectionTargets for non-CDI interceptors
<a class="moz-txt-link-freetext" href="http://docs.jboss.org/weld/javadoc/2.2/weld-spi/org/jboss/weld/manager/api/WeldInjectionTargetFactory.html#createInterceptorInjectionTarget">http://docs.jboss.org/weld/javadoc/2.2/weld-spi/org/jboss/weld/manager/api/WeldInjectionTargetFactory.html#createInterceptorInjectionTarget</a>--<br>
    <br>
    This special treatment is needed as otherwise the InjectionTarget
    would create a standard component instance (possibly intercepted),
    not intercepting.<br>
    <br>
    <div class="moz-cite-prefix">On 05/27/2015 10:43 AM, Emily Jiang
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAECq3A8U8FGCnmzif1geTPRGo3PdLyNYW4=f-Z2VkpWn+9J-OA@mail.gmail.com"
      type="cite">
      <div dir="ltr">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. <br>
        <br>
        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. <br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Wed, May 27, 2015 at 9:00 AM, Jozef
          Hartinger <span dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:jharting@redhat.com" target="_blank">jharting@redhat.com</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF"> 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?<span class="HOEnZb"><font
                  color="#888888"><br>
                  <br>
                  Jozef</font></span>
              <div>
                <div class="h5"><br>
                  <br>
                  <div>On 05/27/2015 01:04 AM, Emily Jiang wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div>Thank you Jozef for your help with clarifying
                        this! <br>
                        <br>
                      </div>
                      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? <br>
                    </div>
                    <div class="gmail_extra"><br>
                      <div class="gmail_quote">On Thu, May 21, 2015 at
                        1:25 PM, Jozef Hartinger <span dir="ltr">&lt;<a
                            moz-do-not-send="true"
                            href="mailto:jharting@redhat.com"
                            target="_blank">jharting@redhat.com</a>&gt;</span>
                        wrote:<br>
                        <blockquote class="gmail_quote" style="margin:0
                          0 0 .8ex;border-left:1px #ccc
                          solid;padding-left:1ex">
                          <div text="#000000" bgcolor="#FFFFFF"><span>
                              On 05/13/2015 12:35 AM, Emily Jiang wrote:<br>
                              <blockquote type="cite">
                                <div dir="ltr">
                                  <div>
                                    <div>
                                      <div>A further question on EJB
                                        injection, <br>
                                        <br>
                                        In the Weld reference doc,
                                        performing injection on JavaEE
                                        component class:<br>
                                        To help the integrator, Weld
                                        provides
                                        WeldManager.fireProcessInjectionTarget()
                                        which returns the<br>
                                        InjectionTarget to use.<br>
                                        <br>
                                      </div>
                                      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.<br>
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                            </span> No, you only need to call this for
                            non-contextual components. For session beans
                            this is done by Weld automatically.<span><br>
                              <blockquote type="cite">
                                <div dir="ltr">
                                  <div>
                                    <div><br>
                                      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().<br>
                                      <br>
                                      // Obtain the EjbDescriptor for
                                      the EJB<br>
                                      // You may choose to use this
                                      utility method to get the
                                      descriptor<br>
                                      EjbDescriptor&lt;?&gt;
                                      ejbDescriptor =
                                      beanManager.getEjbDescriptor(ejbName);<br>
                                      // Get an the Bean object<br>
                                      Bean&lt;?&gt; bean =
                                      beanManager.getBean(ejbDescriptor);<br>
                                      // Create the injection target<br>
                                      InjectionTarget it =
                                      deploymentBeanManager.createInjectionTarget(ejbDescriptor);<br>
                                      // Per instance required, create
                                      the creational context<br>
                                      CreationalContext&lt;?&gt; cc =
                                      deploymentBeanManager.createCreationalContext(bean);<br>
                                      <br>
                                    </div>
                                    <div><b>.... missing the line...
                                        Object instance = it.produce()</b><br>
                                    </div>
                                    <div>// Perform injection and call
                                      initializers<br>
                                      it.inject(instance, cc);<br>
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                            </span> Yes, looks like the line is missing.
                            <div>
                              <div><br>
                                <blockquote type="cite">
                                  <div dir="ltr">
                                    <div>
                                      <div><br>
                                      </div>
                                      Thanks<br>
                                    </div>
                                    Emily<br>
                                    <div>
                                      <div><br>
                                        <br>
                                      </div>
                                    </div>
                                  </div>
                                  <div class="gmail_extra"><br>
                                    <div class="gmail_quote">On Fri, May
                                      8, 2015 at 11:29 AM, Emily Jiang <span
                                        dir="ltr">&lt;<a
                                          moz-do-not-send="true"
                                          href="mailto:emijiang6@googlemail.com"
                                          target="_blank">emijiang6@googlemail.com</a>&gt;</span>
                                      wrote:<br>
                                      <blockquote class="gmail_quote"
                                        style="margin:0 0 0
                                        .8ex;border-left:1px #ccc
                                        solid;padding-left:1ex">
                                        <div dir="ltr">
                                          <div>
                                            <div>
                                              <div>Thank you Jozef for
                                                your helpful response! I
                                                have another
                                                clarification on the
                                                interceptors on JavaEE
                                                component classes. <br>
                                                <br>
                                                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?<br>
                                                <br>
                                              </div>
                                              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. <br>
                                              <br>
                                              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?<br>
                                            </div>
                                            Thanks<span><font
                                                color="#888888"><br>
                                              </font></span></div>
                                          <span><font color="#888888">Emily<br>
                                            </font></span></div>
                                        <div>
                                          <div>
                                            <div class="gmail_extra"><br>
                                              <div class="gmail_quote">On
                                                Thu, May 7, 2015 at 8:22
                                                AM, Jozef Hartinger <span
                                                  dir="ltr">&lt;<a
                                                    moz-do-not-send="true"
href="mailto:jharting@redhat.com" target="_blank">jharting@redhat.com</a>&gt;</span>
                                                wrote:<br>
                                                <blockquote
                                                  class="gmail_quote"
                                                  style="margin:0 0 0
                                                  .8ex;border-left:1px
                                                  #ccc
                                                  solid;padding-left:1ex">
                                                  <div text="#000000"
                                                    bgcolor="#FFFFFF">
                                                    Hi Emily, comments
                                                    inline.<span><br>
                                                      <br>
                                                      <div>On 05/06/2015
                                                        05:38 PM, Emily
                                                        Jiang wrote:<br>
                                                      </div>
                                                      <blockquote
                                                        type="cite">
                                                        <div dir="ltr">
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <div>I have a
                                                          few questions
                                                          on ejb
                                                          integration on
                                                          Weld. <br>
                                                          <br>
                                                          </div>
                                                          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.<br>
                                                          </div>
                                                          </div>
                                                          </div>
                                                        </div>
                                                      </blockquote>
                                                    </span> Correct.
                                                    Weld creates EJB
                                                    instances using
                                                    InjectionTarget.produce()<span><br>
                                                      <blockquote
                                                        type="cite">
                                                        <div dir="ltr">
                                                          <div>
                                                          <div>
                                                          <div><br>
                                                          </div>
                                                          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?<br>
                                                          </div>
                                                          </div>
                                                        </div>
                                                      </blockquote>
                                                    </span> 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.<span><br>
                                                      <blockquote
                                                        type="cite">
                                                        <div dir="ltr">
                                                          <div>
                                                          <div><br>
                                                          </div>
                                                          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?<br>
                                                          </div>
                                                        </div>
                                                      </blockquote>
                                                    </span> 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()<span><br>
                                                      <blockquote
                                                        type="cite">
                                                        <div dir="ltr">
                                                          <div><br>
                                                          </div>
                                                          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?<br>
                                                        </div>
                                                      </blockquote>
                                                    </span> 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.<br>
                                                    <blockquote
                                                      type="cite"><span>
                                                        <div dir="ltr">
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <div><br
                                                          clear="all">
                                                          <div><br>
                                                          -- <br>
                                                          <div>Thanks<br>
                                                          Emily<br>
=================<br>
                                                          Emily Jiang<br>
                                                          <a
                                                          moz-do-not-send="true"
href="mailto:ejiang@apache.org" target="_blank">ejiang@apache.org</a><br>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                        </div>
                                                        <br>
                                                        <fieldset></fieldset>
                                                        <br>
                                                      </span>
                                                      <pre>_______________________________________________
weld-dev mailing list
<a moz-do-not-send="true" href="mailto:weld-dev@lists.jboss.org" target="_blank">weld-dev@lists.jboss.org</a>
<a moz-do-not-send="true" href="https://lists.jboss.org/mailman/listinfo/weld-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/weld-dev</a></pre>
                                                    </blockquote>
                                                    <br>
                                                  </div>
                                                </blockquote>
                                              </div>
                                              <br>
                                              <br clear="all">
                                              <br>
                                              -- <br>
                                              <div>Thanks<br>
                                                Emily<br>
                                                =================<br>
                                                Emily Jiang<br>
                                                <a
                                                  moz-do-not-send="true"
href="mailto:ejiang@apache.org" target="_blank">ejiang@apache.org</a><br>
                                              </div>
                                            </div>
                                          </div>
                                        </div>
                                      </blockquote>
                                    </div>
                                    <br>
                                    <br clear="all">
                                    <br>
                                    -- <br>
                                    <div>Thanks<br>
                                      Emily<br>
                                      =================<br>
                                      Emily Jiang<br>
                                      <a moz-do-not-send="true"
                                        href="mailto:ejiang@apache.org"
                                        target="_blank">ejiang@apache.org</a><br>
                                    </div>
                                  </div>
                                </blockquote>
                                <br>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                      </div>
                      <br>
                      <br clear="all">
                      <br>
                      -- <br>
                      <div>Thanks<br>
                        Emily<br>
                        =================<br>
                        Emily Jiang<br>
                        <a moz-do-not-send="true"
                          href="mailto:ejiang@apache.org"
                          target="_blank">ejiang@apache.org</a><br>
                      </div>
                    </div>
                  </blockquote>
                  <br>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <br>
        -- <br>
        <div class="gmail_signature">Thanks<br>
          Emily<br>
          =================<br>
          Emily Jiang<br>
          <a moz-do-not-send="true" href="mailto:ejiang@apache.org"
            target="_blank">ejiang@apache.org</a><br>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>