<dependency>
<groupId>org.amdatu.remote</groupId>
<artifactId>org.amdatu.remote.base</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.amdatu.remote</groupId>
<artifactId>org.amdatu.remote.topology.promiscuous</artifactId>
<version>1.0.0</version>
</dependency>
public interface Calculator {
int add(int a, int b);
int subtract(int a, int b);
}
public class CalculatorImpl implements Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
import org.amdatu.remote.RemoteConstants;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.util.tracker.ServiceTracker;
public class Activator implements BundleActivator {
private ServiceRegistration<?> m_registration;
private ServiceTracker<?, ?> m_tracker;
public void start(BundleContext context) throws Exception {
Calculator calculator = new CalculatorImpl();
m_registration = context.registerService(
Calculator.class.getName(), calculator, null);
m_tracker = new ServiceTracker<>(context,
context.createFilter(
"(objectClass=" + Calculator.class.getName() + ")"),
null);
m_tracker.open();
}
public void stop(BundleContext context) throws Exception {
m_tracker.close();
m_registration.unregister();
}
}
import org.amdatu.remote.RemoteServiceAdmin;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent;
import org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
public class RemoteCalculator {
private static final String TARGET_ID = "calculator";
private static final String TARGET_FILTER = "(id=" + TARGET_ID + ")";
private BundleContext m_context;
private RemoteServiceAdmin m_remoteServiceAdmin;
public void init() {
m_context = FrameworkUtil.getBundle(getClass()).getBundleContext();
m_remoteServiceAdmin = getService(m_context,
RemoteServiceAdmin.class,
RemoteConstants.SERVICE_EXPORTED_CONFIGS);
}
public void calculate() {
Calculator calculator = getService(m_context,
Calculator.class, TARGET_FILTER);
int result = calculator.add(5, 3);
System.out.println("Result: " + result);
}
private <T> T getService(BundleContext context,
Class<T> clazz, String filter) {
ServiceReference<T> ref = context.getServiceReference(clazz);
if (ref == null) {
throw new IllegalStateException("Service not found: " + clazz);
}
return context.getService(ref);
}
}