Ejemplo n.º 1
0
  public ConnectorWork registerRequest(AtomicRequestMessage message)
      throws TeiidComponentException {
    checkStatus();
    AtomicRequestID atomicRequestId = message.getAtomicRequestID();
    LogManager.logDetail(
        LogConstants.CTX_CONNECTOR, new Object[] {atomicRequestId, "Create State"}); // $NON-NLS-1$

    final ConnectorWorkItem item = new ConnectorWorkItem(message, this);
    ConnectorWork proxy =
        (ConnectorWork)
            Proxy.newProxyInstance(
                ConnectorWork.class.getClassLoader(),
                new Class[] {ConnectorWork.class},
                new InvocationHandler() {
                  @Override
                  public Object invoke(Object proxy, Method method, Object[] args)
                      throws Throwable {
                    ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
                    try {
                      Thread.currentThread()
                          .setContextClassLoader(getExecutionFactory().getClass().getClassLoader());
                      return method.invoke(item, args);
                    } catch (InvocationTargetException e) {
                      throw e.getTargetException();
                    } finally {
                      Thread.currentThread().setContextClassLoader(originalCL);
                    }
                  }
                });

    Assertion.isNull(
        requestStates.put(atomicRequestId, proxy), "State already existed"); // $NON-NLS-1$
    return proxy;
  }