-
Bug
-
Resolution: Done
-
Major
-
None
-
None
@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.
- is related to
-
CDITCK-363 Fix session bean specialization tests
- Resolved
-
WELD-1473 Incorrect bean types for a session bean with a superclass implementing an interface
- Resolved
-
CDITCK-350 Create a test for invalid session bean specialization
- Resolved
-
CDITCK-351 Improve tests for Bean types of a session bean
- Resolved