<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); } }


上一篇:
下一篇:
切换中文