Description

This is based on a SO question - @Stateless no-interface view bean with non-public method. You inject this bean into other bean (using CDI) and try to invoke that non-public method.

According to EJB spec, this should throw EJBException (chapter Session Bean’s No-Interface View):

Only public methods of the bean class and of any superclasses except java.lang.Object may be invoked through the no-interface view. Attempted invocations of methods with any other access modifiers via the no-interface view reference must result in the javax.ejb.EJBException.

I put together a Weld test for this - feel free to browse the code.
When invoked in Weld, this does not throw EJBException but in fact fails on IllegalAccess when an attempt is made to access that method.
Note that in Weld code, we are explicitly handling these EJB invocations using a method which does not override accessibility rules and I suppose it's there for a reason.