Hello
I am using a DS SecurityInterceptor in both modules (ejb and war) and one DS
ExceptionHandler in the web module. Since [DELTASPIKE-449] is closed, security
violations integrate with DS exception handling. Now my problem: If a security
violation in the ejb module is detected, DS does not find the ExceptionHandler
in the web module. Instead of an AccessDeniedException I get an
IllegalStateException in the web layer:
Could not find beans for Type=class xx.xxxxx.FacesExceptionHandler and
qualifiers:[] [1]
org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(BeanProvider.java:150)
org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(BeanProvider.java:119)
org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(BeanProvider.java:100)
org.apache.deltaspike.core.impl.exception.control.HandlerMethodImpl.notify(HandlerMethodImpl.java:194)
org.apache.deltaspike.core.impl.exception.control.ExceptionHandlerBroadcaster.executeHandlers(ExceptionHandlerBroadcaster.java:153)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
... more
Within the web module, the exception handler works fine. Any regular CDI events
thrown in the ejb module are delivered to listeners in the web module without
any problem.
My workaround for the moment is an ExceptionHandler in the ejb module catching
the AccessDeniedException, mark the event as handled, extract the original
event and throw it manually. Throwing it again with any of the ExceptionEvent
throwing methods results in the same error as described above.
The error is reproducible easily. My configuration is GF4 and DS 1.0.0.
Any better ideas?
Regards, Rainer
[1]
@RequestScoped
@ExceptionHandler
public class FacesExceptionHandler {
...