Example usage for javax.resource.spi.work WorkEvent WORK_STARTED

List of usage examples for javax.resource.spi.work WorkEvent WORK_STARTED

Introduction

In this page you can find the example usage for javax.resource.spi.work WorkEvent WORK_STARTED.

Prototype

int WORK_STARTED

To view the source code for javax.resource.spi.work WorkEvent WORK_STARTED.

Click Source Link

Document

Indicates Work instance has started execution.

Usage

From source file:org.mule.work.WorkerContext.java

public void run() {
    if (isTimedOut()) {
        // In case of a time out, one releases the start and end latches
        // to prevent a dead-lock.
        startLatch.countDown();//from   ww  w. jav  a 2s  . c o  m
        endLatch.countDown();
        return;
    }
    // Implementation note: the work listener is notified prior to release
    // the start lock. This behavior is intentional and seems to be the
    // more conservative.
    workListener.workStarted(new WorkEvent(this, WorkEvent.WORK_STARTED, worker, null));
    startLatch.countDown();
    // Implementation note: we assume this is being called without an
    // interesting TransactionContext,
    // and ignore/replace whatever is associated with the current thread.
    try {
        if (executionContext == null || executionContext.getXid() == null) {
            // TODO currently unused, see below
            // ExecutionContext context = new ExecutionContext();
            final ClassLoader originalCl = Thread.currentThread().getContextClassLoader();
            try {
                // execute with the application-specific classloader in the context
                Thread.currentThread().setContextClassLoader(executionClassLoader);
                worker.run();
            } finally {
                Thread.currentThread().setContextClassLoader(originalCl);

                // ExecutionContext returningContext = new
                // ExecutionContext();
                // if (context != returningContext) {
                // throw new WorkCompletedException("Wrong
                // TransactionContext on return from work done");
                // }
            }
            // TODO should we commit the txContext to flush any leftover
            // state???
        } else {
            worker.run();
        }
        workListener.workCompleted(new WorkEvent(this, WorkEvent.WORK_COMPLETED, worker, null));
    } catch (Throwable e) {
        workException = (WorkException) (e instanceof WorkCompletedException ? e
                : new WorkCompletedException("Unknown error", WorkCompletedException.UNDEFINED).initCause(e));
        workListener.workCompleted(new WorkEvent(this, WorkEvent.WORK_REJECTED, worker, workException));
    } finally {
        RequestContext.clear();
        TransactionCoordination.getInstance().clear();
        endLatch.countDown();
    }
}