Uploaded image for project: 'Weld'
  1. Weld
  2. WELD-1027

@Inject'ed protected base class member access problem

    XMLWordPrintable

Details

    • Bug
    • Resolution: Can't Do
    • Major
    • None
    • 1.1.2.Final
    • None
    • None
    • Hide

      Use private access instead of protected, if possible.

      Show
      Use private access instead of protected, if possible.

    Description

      In the following code I'm trying to inject a SessionScoped bean into a stateless EJB,
      but I want to do the @Inject in an abstract base class of the EJB. According to the
      CDI spec it seems to suggest that this should work:

      "4.2. Inheritance of member-level metadata

      Suppose a class X is extended directly or indirectly by the bean class of a managed bean or session bean Y.

      If X declares an injected field x then Y inherits x."

      What happens is that I can access the inherited protected member sessionView from TestEjb,
      but not from code within the base class. When I say "can access", I mean that the injected
      member is accessible at runtime and is not null.

      @Named
      @ViewAccessScoped
      public class JsfBean extends implements Serializable {
      @Inject private TestEjb ejb;

      SessionView s1 = ejb.getSessionViewChild(); // sessionView injected ok
      SessionView s2 = ejb.getSessionViewBase(); // s2 is null
      }

      @Named
      @SessionScoped
      public class SessionView implements Serializable {}

      @Stateless
      public class TestEjb extends BaseClass implements Serializable {

      public SessionView getSessionViewChild()

      { return sessionView; }


      }

      public abstract class BaseClass implements Serializable {
      @Inject
      protected SessionView sessionView;

      public SessionView getSessionViewBase()

      { return sessionView; }


      }

      What happens is that s1 is a valid SessionView reference, but s2 is null. It now
      turns out that if I change the access of sessionView in BaseClass to private, it
      works, but only if I clean & build before re-deployment. It will then consistently
      work - unless I change it back to protected, in which case it will consistently not
      work.

      I am using MyFaces CODI 1.0.1 in conjunction with Weld from Glassfish 3.1.1
      (v20110404-1554). I am also using JDK 7u1. I reported this on the MyFaces mailing
      list but Gerhard said this looked like a weld issue.

      Thanks.

      Attachments

        Activity

          People

            Unassigned Unassigned
            healeyb Brendan Healey (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: