private SessionContext sessionContext;
@AroundInvoke public Object aroundInvoke(final InvocationContext ejbContext) throws Exception {
Object validatorObject = null;
Validator validator = null;
try {
validator = (Validator) new InitialContext().lookup("java:comp/Validator");
sessionContext = (SessionContext) new InitialContext().lookup("java:comp/EJBContext"); // injection doesn't work
} catch (NamingException ne) {
// no-op
}
// get bval annotation informations
Class<?> bvalClazzToValidate = ejbContext.getTarget().getClass();
if (sessionContext != null && ejbContext.getTarget().getClass().getInterfaces().length > 0) {
bvalClazzToValidate = sessionContext.getInvokedBusinessInterface();
}
Method method = ejbContext.getMethod();
if (!bvalClazzToValidate.equals(ejbContext.getTarget().getClass())) {
method = bvalClazzToValidate.getMethod(method.getName(), method.getParameterTypes());
}
Set<?> violations = Collections.emptySet();
if (APACHE_BVAL_METHOD_CLASS != null && validator != null) {
validatorObject = validator.unwrap(APACHE_BVAL_METHOD_CLASS);
violations = call(Set.class, validatorObject, "validateParameters",
new Object[]{
bvalClazzToValidate, method, ejbContext.getParameters(), new Class[0]
},
new Class<?>[]{
Class.class, Method.class, Object[].class, Class[].class
});
} else if (HIBERNATE_METHOD_CLASS != null && validator != null) {
validatorObject = validator.unwrap(HIBERNATE_METHOD_CLASS);
violations = call(Set.class, validatorObject, "validateAllParameters",
new Object[]{
ejbContext.getTarget(), ejbContext.getMethod(), ejbContext.getParameters(), new Class[0]
},
new Class<?>[]{