[Esper Manual 4.10.0 번역] 섹션 14.2 서비스 제공 인터페이스

EPServiceProvider 인터페이스는 엔진 인스턴스를 나타낸다. Esper 엔진의 각각의 인스턴스는 완벽하게 다른 엔진 인스턴스와 독립적이며 자기 자신의 고유한 관리 및 실행 인터페이스를 가지고 있다.

Esper 엔진의 인스턴스는 EPServiceProviderManager 클래스의 정적 메서드를 통해서 얻을 수 있다. getDefaultProvider 메서드와 getProvider(String providerURI) 메서드는 Esper 엔진의 인스턴스를 반환한다. getProvider(String providerURI) 메서드는 서로 다른 Provider URI 값을 통해서 복수의 인스턴스를 얻을때 사용된다. EPServiceProviderManager는 Provider URI가 이전의 Provider URI 값과 비교하여 동일하면 같은 Provider URI의 인스턴스를 반환하고 Provider URI가 이전에 없던 것일 경우 새 엔진 인스턴스를 만든다.

아래의 코드조각 기본 Esper 엔진을 전달한다. 기본엔진을 얻기 위한 그 다음의 메서드 요청은 동일한 인스턴스를 반환한다

이 코드조각은 “RFIDProcessor1″이라는 Provider URI의 Esper 엔진을 반환한다.동일한 Provider URI의 엔진을 얻기 위한 그 다음의 요청은 동일한 인스턴스를 반환한다.

getProvider 메서드는 각 URI에 해당하는 기존에 저장된 엔진 인스턴스를 반환하기 때문에 애플리케이션 내에서 정적으로 엔진 인스턴스를 임시 저장할 필요가 없다.

기존의 Esper 엔진 인스턴스는 EPServiceProvider 인스턴스의 initialize 메서드를 통해서 리셋이 가능하다. 이 명령은 모든 문장을 중지하여 제거한 후에 해당하는 URI의 엔진 인스턴스 된 경우 엔진을 기존에 제공된 설정으로 리셋한다. 만약 기존의 설정이 없으면, 기본 설정이 적용된다.

initialize을 실행한 후에 애플리케이션은 반드시 새롭게 관리, 실행 서비스를 획득해야 한다. 초기화 전에 갖고 있던 어떠한 관리, 실행 서비스도 유효하지 않고 정의되지 않은 행동을 갖고 있게 된다.

다음의 코드 조각이 전형적인 사용 순서이다.

기존의 Esper 엔진 인스턴스는 EPServiceProvider 인스턴스의 destroy 메서드를 통해서 제거된다. 이 명령은 인스턴스에 의해서 점유된 모든 리소스를 해제하면서 모든 문장들을 중지하고 제거한다. destroy한 후에 엔진은 더이상 사용되지 않는다.

애플리케이션 안에서 엔진 인스턴스의 제거 및 초기화 할 때 콜백을 받기 위해서EPServiceStateListener 인터페이스를 구현할 수도 있다. 구현한 리스너는 addServiceStateListener 메서드를 통해서 등록한다. EPStatementStateListener는 문장이 생성되거나 시작, 중지, 제거될 때의 콜백을 받기 위해서 사용된다. 리스너는 addStatementStateListener 메서드를 통해서 등록한다.

인스턴스를 제거할 때 애플리케이션은 반드시 엔진으로 이벤트를 보내는 스레드가 그 작업을 반드시 마무리 된 것인지 확인해 두어야 한다. 좀 더 일반적으로, 엔진은 제거 명령중이나 후에 사용되어서는 안된다.

엔진 인스턴스는 완벽하게 독립적이기 때문에 애플리케이션에서 한 엔진 인스턴스에서 발생한 이벤트 빈 인스턴스를 다른 엔진 인스턴스에 보낼 수 없다. 왜냐하면 이벤트 타입의 공간을 두 엔진 인스턴스가 공유하지 않기 때문이다.