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

Session bean specialization example is not valid


      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 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
            0 Vote for this issue
            3 Start watching this issue