use of javax.interceptor.InvocationContext in project wildfly by wildfly.
the class ContainerManagedConcurrencyInterceptor method processInvocation.
@Override
public Object processInvocation(final InterceptorContext context) throws Exception {
final InvocationContext invocationContext = context.getInvocationContext();
LockableComponent lockableComponent = this.getLockableComponent();
// get the invoked method
Method method = invocationContext.getMethod();
if (method == null) {
throw EjbLogger.ROOT_LOGGER.invocationNotApplicableForMethodInvocation(invocationContext);
}
Method invokedMethod = viewMethodToComponentMethodMap.get(method);
if (invokedMethod == null) {
invokedMethod = method;
}
// get the Lock applicable for this method
Lock lock = getLock(lockableComponent, invokedMethod);
// the default access timeout (will be used in the absence of any explicit access timeout value for the invoked method)
AccessTimeoutDetails defaultAccessTimeout = lockableComponent.getDefaultAccessTimeout();
// set to the default values
long time = defaultAccessTimeout.getValue();
TimeUnit unit = defaultAccessTimeout.getTimeUnit();
AccessTimeoutDetails accessTimeoutOnMethod = lockableComponent.getAccessTimeout(invokedMethod);
if (accessTimeoutOnMethod != null) {
if (accessTimeoutOnMethod.getValue() < 0) {
if (ROOT_LOGGER.isDebugEnabled()) {
ROOT_LOGGER.debug("Ignoring a negative @AccessTimeout value: " + accessTimeoutOnMethod.getValue() + " and timeout unit: " + accessTimeoutOnMethod.getTimeUnit().name() + ". Will default to timeout value: " + defaultAccessTimeout.getValue() + " and timeout unit: " + defaultAccessTimeout.getTimeUnit().name());
}
} else {
// use the explicit access timeout values specified on the method
time = accessTimeoutOnMethod.getValue();
unit = accessTimeoutOnMethod.getTimeUnit();
}
}
// try getting the lock
boolean success = lock.tryLock(time, unit);
if (!success) {
throw EjbLogger.ROOT_LOGGER.concurrentAccessTimeoutException(lockableComponent.getComponentName(), time + unit.name());
}
try {
// lock obtained. now proceed!
return invocationContext.proceed();
} finally {
lock.unlock();
}
}
use of javax.interceptor.InvocationContext in project tomee by apache.
the class InterceptorStack method invoke.
public Object invoke(final javax.xml.ws.handler.MessageContext messageContext, final Object... parameters) throws Exception {
try {
final InvocationContext invocationContext = new JaxWsInvocationContext(operation, interceptors, beanInstance, targetMethod, messageContext, parameters);
ThreadContext.getThreadContext().set(InvocationContext.class, invocationContext);
return invocationContext.proceed();
} finally {
ThreadContext.getThreadContext().remove(InvocationContext.class);
}
}
Aggregations