Search in sources :

Example 6 with InvocationContext

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();
    }
}
Also used : TimeUnit(java.util.concurrent.TimeUnit) Method(java.lang.reflect.Method) InvocationContext(javax.interceptor.InvocationContext) Lock(java.util.concurrent.locks.Lock) ReadWriteLock(java.util.concurrent.locks.ReadWriteLock)

Example 7 with InvocationContext

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);
    }
}
Also used : InvocationContext(javax.interceptor.InvocationContext)

Aggregations

InvocationContext (javax.interceptor.InvocationContext)7 Method (java.lang.reflect.Method)2 Meter (com.codahale.metrics.Meter)1 Timer (com.codahale.metrics.Timer)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 TimeUnit (java.util.concurrent.TimeUnit)1 Lock (java.util.concurrent.locks.Lock)1 ReadWriteLock (java.util.concurrent.locks.ReadWriteLock)1 Collectors (java.util.stream.Collectors)1 Stream (java.util.stream.Stream)1 Inject (javax.inject.Inject)1 AroundInvoke (javax.interceptor.AroundInvoke)1 Interceptor (javax.interceptor.Interceptor)1 IndyMetricsManager (org.commonjava.indy.IndyMetricsManager)1 IndyMetrics (org.commonjava.indy.measure.annotation.IndyMetrics)1 Measure (org.commonjava.indy.measure.annotation.Measure)1