Uploaded image for project: 'CDI Specification Issues'
  1. CDI Specification Issues
  2. CDI-388

Session bean specialization example is not valid

XMLWordPrintable

      @Stateless
      public class LoginActionBean implements LoginAction { ... }
      
      @Stateless @Mock @Specializes
      public class MockLoginActionBean extends LoginActionBean { ... }
      

      LoginAction is a local interface (whether it's annotated with @Local or not) therefore the bean types of LoginActionBean are LoginAction, Object. On the other hand MockLoginActionBean does not have a local interface (client views exposed by a particular session bean are not inherited by a subclass; see also the EJB spec 4.9.2.1 Session Bean Superclasses). Therefore the bean types of MockLoginActionBean are MockLoginActionBean, LoginActionBean and Object (3.2.2 Bean types of a session bean: "the unrestricted set of bean types contains the bean class and all superclasses").

      The spec also states (4.3.1 Direct and indirect specialization):

      Furthermore, X must have all the bean types of Y. If X does not have some bean type of Y, the container automatically detects the problem and treats it as a definition error.

      So I believe the aforementioned example should result in a definition exception. To make it valid the MockLoginActionBean should also implement LoginAction.

              asabotdu@redhat.com Antoine Sabot-Durand (Inactive)
              mkouba@redhat.com Martin Kouba
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: