use of com.alipay.sofa.ark.container.registry.ContainerServiceProvider in project sofa-ark by alipay.
the class ServiceRegistrationTest method testMultipleService.
@Test
@SuppressWarnings("unchecked")
public void testMultipleService() throws Exception {
// 非插件发布的服务,优先级别最低
registryService.publishService(ITest.class, new TestObjectA(), new ContainerServiceProvider());
PluginModel pluginA = new PluginModel();
pluginA.setPluginName("plugin A").setPriority("10").setClassPath(new URL[] { classPathURL }).setImportClasses(StringUtils.EMPTY_STRING).setImportPackages(StringUtils.EMPTY_STRING).setExportPackages(ClassUtils.getPackageName(INTERFACE_CLASS)).setExportClasses("").setImportResources(StringUtils.EMPTY_STRING).setExportResources(StringUtils.EMPTY_STRING).setPluginActivator(PluginActivatorA.class.getName()).setPluginClassLoader(new PluginClassLoader(pluginA.getPluginName(), pluginA.getClassPath())).setPluginContext(new PluginContextImpl(pluginA));
PluginModel pluginB = new PluginModel();
pluginB.setPluginName("plugin B").setPriority("1").setClassPath(new URL[] { classPathURL }).setImportClasses(INTERFACE_CLASS).setImportPackages(StringUtils.EMPTY_STRING).setExportPackages("").setExportClasses("").setImportResources(StringUtils.EMPTY_STRING).setExportResources(StringUtils.EMPTY_STRING).setPluginActivator(PluginActivatorB.class.getName()).setPluginClassLoader(new PluginClassLoader(pluginB.getPluginName(), pluginB.getClassPath())).setPluginContext(new PluginContextImpl(pluginB));
PluginModel pluginC = new PluginModel();
pluginC.setPluginName("plugin C").setPriority("100").setClassPath(new URL[] { classPathURL }).setImportClasses(INTERFACE_CLASS).setImportPackages(StringUtils.EMPTY_STRING).setExportPackages("").setExportClasses("").setImportResources(StringUtils.EMPTY_STRING).setExportResources(StringUtils.EMPTY_STRING).setPluginActivator(PluginActivatorC.class.getName()).setPluginClassLoader(new PluginClassLoader(pluginC.getPluginName(), pluginC.getClassPath())).setPluginContext(new PluginContextImpl(pluginC));
pluginManagerService.registerPlugin(pluginA);
pluginManagerService.registerPlugin(pluginB);
pluginManagerService.registerPlugin(pluginC);
classloaderService.prepareExportClassAndResourceCache();
pluginDeployService.deploy();
Class iTest = pluginA.getPluginClassLoader().loadClass(ITest.class.getCanonicalName());
Assert.assertEquals(3, pluginA.getPluginContext().referenceServices(new DefaultServiceFilter().setServiceInterface(iTest)).size());
// 应该获取到优先级别比较高的服务
ServiceReference reference = pluginC.getPluginContext().referenceService(iTest);
PluginServiceProvider provider = (PluginServiceProvider) reference.getServiceMetadata().getServiceProvider();
Assert.assertEquals(pluginB.getPluginName(), provider.getPluginName());
List<ServiceReference> references = pluginC.getPluginContext().referenceServices(new DefaultServiceFilter().setServiceInterface(iTest));
provider = (PluginServiceProvider) references.get(0).getServiceMetadata().getServiceProvider();
Assert.assertEquals(pluginB.getPluginName(), provider.getPluginName());
}
use of com.alipay.sofa.ark.container.registry.ContainerServiceProvider in project sofa-ark by sofastack.
the class InjectionServiceTest method test.
@Test
public void test() {
RegistryService registryService = ArkServiceContainerHolder.getContainer().getService(RegistryService.class);
PluginMockService pluginMockService = new PluginMockService();
registryService.publishService(PluginMockService.class, pluginMockService, new ContainerServiceProvider());
Assert.assertNotNull(pluginMockService.getBizFactoryService());
Assert.assertNotNull(pluginMockService.getBizManagerService());
Assert.assertNull(pluginMockService.getClassLoaderService());
}
use of com.alipay.sofa.ark.container.registry.ContainerServiceProvider in project sofa-ark by sofastack.
the class ServiceRegistrationTest method testMultipleService.
@Test
@SuppressWarnings("unchecked")
public void testMultipleService() throws Exception {
// 非插件发布的服务,优先级别最低
registryService.publishService(ITest.class, new TestObjectA(), new ContainerServiceProvider());
PluginModel pluginA = new PluginModel();
pluginA.setPluginName("plugin A").setPriority("10").setClassPath(new URL[] { classPathURL }).setImportClasses(StringUtils.EMPTY_STRING).setImportPackages(StringUtils.EMPTY_STRING).setExportPackages(ClassUtils.getPackageName(INTERFACE_CLASS)).setExportClasses("").setImportResources(StringUtils.EMPTY_STRING).setExportResources(StringUtils.EMPTY_STRING).setPluginActivator(PluginActivatorA.class.getName()).setPluginClassLoader(new PluginClassLoader(pluginA.getPluginName(), pluginA.getClassPath())).setPluginContext(new PluginContextImpl(pluginA));
PluginModel pluginB = new PluginModel();
pluginB.setPluginName("plugin B").setPriority("1").setClassPath(new URL[] { classPathURL }).setImportClasses(INTERFACE_CLASS).setImportPackages(StringUtils.EMPTY_STRING).setExportPackages("").setExportClasses("").setImportResources(StringUtils.EMPTY_STRING).setExportResources(StringUtils.EMPTY_STRING).setPluginActivator(PluginActivatorB.class.getName()).setPluginClassLoader(new PluginClassLoader(pluginB.getPluginName(), pluginB.getClassPath())).setPluginContext(new PluginContextImpl(pluginB));
PluginModel pluginC = new PluginModel();
pluginC.setPluginName("plugin C").setPriority("100").setClassPath(new URL[] { classPathURL }).setImportClasses(INTERFACE_CLASS).setImportPackages(StringUtils.EMPTY_STRING).setExportPackages("").setExportClasses("").setImportResources(StringUtils.EMPTY_STRING).setExportResources(StringUtils.EMPTY_STRING).setPluginActivator(PluginActivatorC.class.getName()).setPluginClassLoader(new PluginClassLoader(pluginC.getPluginName(), pluginC.getClassPath())).setPluginContext(new PluginContextImpl(pluginC));
pluginManagerService.registerPlugin(pluginA);
pluginManagerService.registerPlugin(pluginB);
pluginManagerService.registerPlugin(pluginC);
classloaderService.prepareExportClassAndResourceCache();
pluginDeployService.deploy();
Class iTest = pluginA.getPluginClassLoader().loadClass(ITest.class.getCanonicalName());
Assert.assertEquals(3, pluginA.getPluginContext().referenceServices(new DefaultServiceFilter().setServiceInterface(iTest)).size());
// 应该获取到优先级别比较高的服务
ServiceReference reference = pluginC.getPluginContext().referenceService(iTest);
PluginServiceProvider provider = (PluginServiceProvider) reference.getServiceMetadata().getServiceProvider();
Assert.assertEquals(pluginB.getPluginName(), provider.getPluginName());
List<ServiceReference> references = pluginC.getPluginContext().referenceServices(new DefaultServiceFilter().setServiceInterface(iTest));
provider = (PluginServiceProvider) references.get(0).getServiceMetadata().getServiceProvider();
Assert.assertEquals(pluginB.getPluginName(), provider.getPluginName());
}
use of com.alipay.sofa.ark.container.registry.ContainerServiceProvider in project sofa-ark by sofastack.
the class ServiceRegistrationTest method testContainerService.
@Test
public void testContainerService() {
registryService.publishService(ITest.class, new TestObjectA(), new ContainerServiceProvider(20000));
registryService.publishService(ITest.class, new TestObjectB(), new ContainerServiceProvider(100));
registryService.publishService(ITest.class, new TestObjectC(), new ContainerServiceProvider(200));
Assert.assertEquals(TestObjectB.OUTPUT, registryService.referenceService(ITest.class).getService().test());
Assert.assertEquals(3, registryService.referenceServices(ITest.class).size());
}
use of com.alipay.sofa.ark.container.registry.ContainerServiceProvider in project sofa-ark by sofastack.
the class ServiceRegistrationTest method testReferenceService.
@Test
public void testReferenceService() {
registryService.publishService(ITest.class, new TestObjectA(), new ContainerServiceProvider());
ServiceReference<ITest> iTestServiceReference = registryService.referenceService(ITest.class);
Assert.assertNotNull(iTestServiceReference);
Assert.assertEquals(TestObjectA.OUTPUT, iTestServiceReference.getService().test());
}
Aggregations