пятница, 24 октября 2008 г.

Interceptors for Stateless Session Beans

Что за звери такие?

Суть в том, что перед вызовом бизнес-метода будет вызываться метод (или методы) определенных классов.
Все весьма и весьма просто.

1. Мы аннотируем бизнес-метод или бин вот так:
@Interceptors({LogDebugInterceptor.class, NotNullInterceptor.class})
2. В самом перехватчике должен быть метод (методы) а ля
@AroundInvoke
public Object methodName(InvocationContext inv) throws Exception
Они должны быть аннотированы и иметь указанную сигнатуру.

3. Очень интересен интерфейс
public interface InvocationContext {
public Object getTarget();
public Method getMethod();
public Object[] getParameters();
public void setParameters(Object[] params);
public java.util.Map getContextData();
public Object proceed() throws Exception;
}
с помощью него можно получить объект и метод, которые послужил причиной вызова перехватчика. А так же все параметры, переданные в бизнес-метод. Более того, параметры можно подменить с помощью метода setParameters.

4. Для успешного завершения необходимо венуть объект, возвращаемый функцией proceed()
return inv.proceed();
тогда управление будет передано следующему перехватчику, либо бизнес-методу.

Суть схожа с механизмом фильтров в сервлетах. Для чего можно использовать перехватчики? для обработки входных параметров, их проверки, проверки каких-либо ограничений. Например бизнес-метод depositMoney(Customer customer) можно перехватывать для проверки прав клиента на перевод денег.

Комментариев нет: