본 내용은 실전 OSGi&SpringDM(위키북스) 책의 일부 내용입니다
Event Admin 서비스 사용
1. 기본 계념
화이트보드 패턴을 이용하여 이벤트 메시지를 전달 한다.
1-1. Event Object 속성
//이벤트 필터링을 이름 같은 것(일반적으로 kr/bit/uhealth 와 같이 계층구조를 가짐)
String Topic
//이벤트에 대한 추가 속성(속성 종류는 charter5-p114 참조)
Hashtable properties
2. Event Admin 구현
2-2. 이벤트 핸들러로 이벤트 받기
Manifest.mf의 Import-Package에 org.osgi.service.event 추가
2-2-1. 인터페이스
public interface EventHandler {
void handleEvnet(Event event);
}
2-2-2. 구현체
public class Activator implements BundleActivator, EventHandler {
//모든 이벤트 받음
final static String[] topics = new String[]{"*"};
public void start(BundleContext context) throws Exception {
Dictionary<String, Object> prop = new Hashtable<String,Object>();
prop.put(EventContants.EVENT_TOPIC, topics);
context.registerService(EventHandler.class.getName(), this, prop);
}
public void stop(BundleContext context) throws Exception {
...
}
//인터페이스 구현체
public void handleEvent(Event event) {
System.out.println("\r\n[Event Received] Topic : " + event.getTopic());
for(String key : event.getPropertyNames()){
System.out.println("\t[Property] " + key + " : " + event.getProperty(key));
}
}
}
2-2-3. 이벤트 필터링
//모든 이벤트 받기
final static String[] topics = new String[]{"*"};
//세부항목 이벤트 받기
final static String[] topics = new String[]{"org/osgi/framework/ServiceEvent/*"};
//세부 선택항목 이벤트 받기
final static String[] topics = new String[]{"org/osgi/framework/ServiceEvent/REGISTERED", "org/osgi/framework/ServiceEvent/STARTED"};
//그 밖에 필터 방법 http://www.ietf.org/rfc/rfc2254.txt 참조
2-3. 이벤트 보내기
ServiceTracker tracker = new ServiceTracker(context, EventAdmin.class.getName(), null);
tracker.open();
Properties props = new Properties();
props.put("key", "value");
EventAdmin ea = (EventAdmin) tracker.getService();
if(ea != null) {
//동기 전송: sendEvent, 비동기 전송: postEvent
ea.sendEvent(new Event("com/foo/bar", props));
}
3. EventAdmin을 구현한 jar파일
Maven을 사용한다면 dependency를 추가 하거나 아니며 EventAdmin을 구현 jar파일이 필요
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.eventadmin</artifactId>
<version>1.0.0</version>
</dependency>