diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java index 60eb8bfbf..7c693de2c 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java @@ -116,4 +116,13 @@ public abstract class ModuleProvider { throw new ServiceNotProvidedException("Provide more service implementations than Module requirements."); } } + + public T getService(Class serviceType) throws ServiceNotProvidedException { + Service serviceImpl = services.get(serviceType); + if (serviceImpl != null) { + return (T)serviceImpl; + } + + throw new ServiceNotProvidedException("Service " + serviceType.getName() + " should not be provided, based on module define."); + } } diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/BaseModuleA.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/BaseModuleA.java index 8ea63822c..c5a0a4c10 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/BaseModuleA.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/BaseModuleA.java @@ -31,7 +31,7 @@ public class BaseModuleA extends Module { } public interface ServiceABusiness1 extends Service { - + void print(); } public interface ServiceABusiness2 extends Service { diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java index 44ae24d1f..f066d9301 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleAProvider.java @@ -50,6 +50,9 @@ public class ModuleAProvider extends ModuleProvider { public class Business1 implements BaseModuleA.ServiceABusiness1 { + @Override public void print() { + System.out.println("ModuleA.Business1.print()"); + } } public class Business2 implements BaseModuleA.ServiceABusiness2 { diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java index 2d96c8c25..fda8a4f34 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/module/ModuleManagerTest.java @@ -25,7 +25,7 @@ import org.junit.Test; */ public class ModuleManagerTest { @Test - public void testInit() throws ServiceNotProvidedException, ModuleNotFoundException, ProviderNotFoundException { + public void testInit() throws ServiceNotProvidedException, ModuleNotFoundException, ProviderNotFoundException, DuplicateProviderException { ApplicationConfiguration configuration = new ApplicationConfiguration(); configuration.addModule("Test").addProviderConfiguration("TestModule-Provider", null); configuration.addModule("BaseA").addProviderConfiguration("P-A",null); @@ -33,5 +33,8 @@ public class ModuleManagerTest { ModuleManager manager = new ModuleManager(); manager.init(configuration); + + BaseModuleA.ServiceABusiness1 serviceABusiness1 = manager.find("BaseA").provider().getService(BaseModuleA.ServiceABusiness1.class); + serviceABusiness1.print(); } }