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

ru.tinkoff.kora.http.server.undertow.XnioLifecycle Maven / Gradle / Ivy

package ru.tinkoff.kora.http.server.undertow;

import io.undertow.Undertow;
import org.xnio.Xnio;
import org.xnio.XnioWorker;
import ru.tinkoff.kora.application.graph.Lifecycle;
import ru.tinkoff.kora.application.graph.ValueOf;
import ru.tinkoff.kora.application.graph.Wrapped;
import ru.tinkoff.kora.http.server.common.HttpServerConfig;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public final class XnioLifecycle implements Lifecycle, Wrapped {

    private final XnioWorker worker;

    public XnioLifecycle(ValueOf configValue) throws ExecutionException, InterruptedException {
        var threads = configValue.get().blockingThreads();
        var ioThreads = configValue.get().ioThreads();
        var f = new CompletableFuture();
        var t = new Thread(() -> {
            try {
                var worker = Xnio.getInstance(Undertow.class.getClassLoader())
                    .createWorkerBuilder()
                    .setCoreWorkerPoolSize(1)
                    .setMaxWorkerPoolSize(threads)
                    .setWorkerIoThreads(ioThreads)
                    .setWorkerKeepAlive(60 * 1000)
                    .setDaemon(false)
                    .setWorkerName("kora-undertow")
                    .build();
                f.complete(worker);
            } catch (Throwable e) {
                f.completeExceptionally(e);
            }
        });
        t.setDaemon(false);
        t.start();
        this.worker = f.get();
    }

    @Override
    public void init() throws Exception {

    }

    @Override
    public void release() throws Exception {
        worker.shutdown();
        worker.awaitTermination();
    }

    @Override
    public XnioWorker value() {
        return this.worker;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy