All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.as.clustering.naming.NamespaceContextExecutor Maven / Gradle / Ivy

Go to download

The code in this module is not explicitly related to clustering, but rather contains resuable code used by clustering modules and any modules that integrate with clustering.

There is a newer version: 34.0.0.Final
Show newest version
/*
 * Copyright The WildFly Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.jboss.as.clustering.naming;

import java.util.concurrent.Callable;
import java.util.function.Supplier;

import org.jboss.as.naming.context.NamespaceContextSelector;
import org.wildfly.clustering.context.ContextualExecutor;
import org.wildfly.common.function.ExceptionRunnable;
import org.wildfly.common.function.ExceptionSupplier;

/**
 * A contextual executor that applies namespace context that was active when this object was constructed.
 * @author Paul Ferraro
 */
public class NamespaceContextExecutor implements ContextualExecutor {

    private final NamespaceContextSelector selector = NamespaceContextSelector.getCurrentSelector();

    @Override
    public void execute(Runnable runner) {
        if (this.selector != null) {
            NamespaceContextSelector.pushCurrentSelector(this.selector);
        }
        try {
            runner.run();
        } finally {
            if (this.selector != null) {
                NamespaceContextSelector.popCurrentSelector();
            }
        }
    }

    @Override
    public  void execute(ExceptionRunnable runner) throws E {
        if (this.selector != null) {
            NamespaceContextSelector.pushCurrentSelector(this.selector);
        }
        try {
            runner.run();
        } finally {
            if (this.selector != null) {
                NamespaceContextSelector.popCurrentSelector();
            }
        }
    }

    @Override
    public  T execute(Callable caller) throws Exception {
        if (this.selector != null) {
            NamespaceContextSelector.pushCurrentSelector(this.selector);
        }
        try {
            return caller.call();
        } finally {
            if (this.selector != null) {
                NamespaceContextSelector.popCurrentSelector();
            }
        }
    }

    @Override
    public  T execute(Supplier supplier) {
        if (this.selector != null) {
            NamespaceContextSelector.pushCurrentSelector(this.selector);
        }
        try {
            return supplier.get();
        } finally {
            if (this.selector != null) {
                NamespaceContextSelector.popCurrentSelector();
            }
        }
    }

    @Override
    public  T execute(ExceptionSupplier supplier) throws E {
        if (this.selector != null) {
            NamespaceContextSelector.pushCurrentSelector(this.selector);
        }
        try {
            return supplier.get();
        } finally {
            if (this.selector != null) {
                NamespaceContextSelector.popCurrentSelector();
            }
        }
    }

    @Override
    public Runnable contextualize(Runnable runner) {
        return (this.selector != null) ? ContextualExecutor.super.contextualize(runner) : runner;
    }

    @Override
    public  ExceptionRunnable contextualize(ExceptionRunnable runner) {
        return (this.selector != null) ? ContextualExecutor.super.contextualize(runner) : runner;
    }

    @Override
    public  Callable contextualize(Callable caller) {
        return (this.selector != null) ? ContextualExecutor.super.contextualize(caller) : caller;
    }

    @Override
    public  Supplier contextualize(Supplier supplier) {
        return (this.selector != null) ? ContextualExecutor.super.contextualize(supplier) : supplier;
    }

    @Override
    public  ExceptionSupplier contextualize(ExceptionSupplier supplier) {
        return (this.selector != null) ? ContextualExecutor.super.contextualize(supplier) : supplier;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy