0
Background Thread for a Tomcat servlet appと似ていますが、私はJava EE 7固有のソリューションを探しています。Java EE 7以降でコンテナのバックグラウンドスレッドを実行/管理する方法は?
Background Thread for a Tomcat servlet appと似ていますが、私はJava EE 7固有のソリューションを探しています。Java EE 7以降でコンテナのバックグラウンドスレッドを実行/管理する方法は?
これは私が最終的に/ web.xmlのをbeans.xmlのために任意の構成の変更/追加を使用せずにWildFly 11(のJava EE 7)のために思い付いたものです:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.enterprise.concurrent.ManagedThreadFactory;
@Startup
@Singleton
public class IndexingTask implements Runnable {
private static final Logger LOG = LoggerFactory.getLogger(IndexingTask.class);
private Thread taskThread = null;
private final CountDownLatch shutdownLatch = new CountDownLatch(1);
@Resource
private ManagedThreadFactory threadFactory;
@PostConstruct
public void postConstruct() {
taskThread = threadFactory.newThread(this);
taskThread.start();
}
@PreDestroy
public void preDestroy(){
shutdownLatch.countDown();
try {
taskThread.join();
} catch (InterruptedException ex) {
LOG.warn("interrupted while waiting for " + taskThread + " to shut down", ex);
}
}
@Override
public void run() {
LOG.info("started");
try {
while (!shutdownLatch.await(100, TimeUnit.MILLISECONDS)) {
}
} catch (InterruptedException ex) {
LOG.warn("", ex);
}
LOG.info("stopped");
}
}
https://gruust.stream/2017/10/15/how-to-run-manage-a-container-background-thread-in-java-ee-7-
も参照してください。 Java EE 7 containers: initialize bean at startup without adding it to beans.xml?