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

Session bean specialization example is not valid

    XMLWordPrintable

    Details

      Description

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

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  antoinesabot-durand Antoine Sabot-Durand
                  Reporter:
                  mkouba Martin Kouba
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  3 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: