Я хотел бы создать длительный процесс Esper, но я не уверен ни в модели потоков Esper, ни в модель, которую я должен реализовать, чтобы сделать это. Наивно я попробовал следующее:
public class EsperTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();
EPServiceProvider epService = EPServiceProviderManager.getProvider("CoreEngine");
epService.addServiceStateListener(new EPServiceStateListener() {
@Override
public void onEPServiceDestroyRequested(EPServiceProvider epsp) {
System.out.println("Service destroyed");
}
@Override
public void onEPServiceInitialized(EPServiceProvider epsp) {
System.out.println("System initialised");
}
});
epService.initialize();
}
}
Но код, похоже, выполняется до конца метода main()
, и JVM завершается.
Ссылаясь на документацию Esper, раздел 14.7 p456:
В конфигурации по умолчанию каждый экземпляр ядра поддерживает один поток таймера (внутренний таймер), обеспечивающий обработку на основе времени или расписания внутри ядра. Разрешение по умолчанию, с которым работает внутренний таймер, составляет 100 миллисекунд. Внутренний поток таймера можно отключить, и вместо этого приложения могут отправлять внешние события времени экземпляру механизма для выполнения таймера или запланированной обработки с разрешением, требуемым приложением.
Следовательно, я думал, что при создании экземпляра движка («CoreEngine») будет создан по крайней мере один поток (таймер), и если предположить, что это не поток демона, метод main()
не будет завершен, но это, похоже, не так.
Должен ли я реализовать свой собственный бесконечный цикл в main()
или есть конфигурация, которую можно предоставить Esper, которая позволит ему работать «вечно»?