public interface MessageEvent {
String getMessage();
void setMessage(String message);
}
public interface MessageEventListener {
void onMessageEvent(MessageEvent event);
}
public class MessageEventImpl implements MessageEvent {
private String message;
@Override
public String getMessage() {
return message;
}
@Override
public void setMessage(String message) {
this.message = message;
}
}
public class MessageEventListenerImpl implements MessageEventListener {
@Override
public void onMessageEvent(MessageEvent event) {
System.out.println("Received message: " + event.getMessage());
}
}
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="MessageEventImplComponent" activate="activate">
<implementation class="com.example.MessageEventImpl"/>
<service>
<provide interface="com.example.MessageEvent"/>
</service>
</scr:component>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="MessageEventListenerImplComponent" activate="activate">
<implementation class="com.example.MessageEventListenerImpl"/>
<reference bind="bindMessageEvent" unbind="unbindMessageEvent" interface="com.example.MessageEvent"/>
</scr:component>
MessageEvent messageEvent = new MessageEventImpl();
messageEvent.setMessage("Hello, OSGi!");
ServiceTracker<MessageEventListener, MessageEventListener> tracker =
new ServiceTracker<>(context, MessageEventListener.class, null);
tracker.open();
MessageEventListener[] listeners = tracker.getServices();
if (listeners != null) {
for (MessageEventListener listener : listeners) {
listener.onMessageEvent(messageEvent);
}
}
tracker.close();