사용자가 코드를 플러그인하여 센서를 모니터링 할 수있는 시스템을 작성 중입니다.OSGI serviceChanged 메서드
다른 번들의 변경 사항을 수신하는 기본 수신기를 작성하려고합니다. 나는 ServiceListener를 찾았는데, 이는 내 원인으로보기에 편리하다. 내 질문은 : serviceListener에서 serviceChanged()를 호출 할 때가? 나는 인터넷에서 그것을 찾고 있었지만 아무것도 찾을 수 없었다.
감사합니다.
package be.pxl.smartcampus.MonitorListener;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceEvent;
import be.pxl.smartcampus.util.Monitor;
import be.pxl.smartcampus.util.Data;
public class Activator implements BundleActivator, ServiceListener {
public void start(BundleContext context) {
context.addServiceListener(this);
}
public void stop(BundleContext context) {
context.removeServiceListener(this);
}
public void serviceChanged(ServiceEvent event) {
if (event.getType() == ServiceEvent.MODIFIED) {
Monitor monitor = (Monitor) (event.getServiceReference());
Data data = monitor.getData();
System.out.println("SERVICE CHANGED CALLED");
// TO DO: MAKE API CALL
}
}
}
import be.pxl.smartcampus.util.Data;
import be.pxl.smartcampus.util.Monitor;
import org.osgi.framework.BundleContext;
import java.util.Hashtable;
public class Activator extends Monitor {
private Data data = new Data();
private Hashtable<String, Data> hash = new Hashtable<String, Data>();
public void start(BundleContext bundleContext) {
hash.put("first", data);
bundleContext.registerService(Activator.class.getName(), this, hash);
changeData();
}
private void changeData() {
hash.put("second", data);
}
public void stop(BundleContext bundleContext) {
}
}
답변 해 주셔서 감사합니다. serviceListeners를 사용하고 있지만 작동하지 않습니다. 내 질문을 편집했습니다. 보시다시피 저는 소품이 수정되었을 때 약간의 코드를 실행하고 싶습니다. 그러나 hash.put ("second", data)이 실행되면 serviceChanged 이벤트가 호출되지 않습니까? –