Създаване на дълготраен процес или услуга на Esper

Бих искал да създам дълготраен процес на 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, която ще му позволи да работи „завинаги“.?


person D-Dᴙum    schedule 25.01.2014    source източник


Отговори (1)


Нишките на таймера са демон нишки. Вместо примка използвайте резе като това.

final CountDownLatch shutdownLatch = new CountDownLatch(1);
Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        shutdownLatch.countDown();
    }
});
shutdownLatch.await();
person user650839    schedule 27.01.2014