use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by sofastack.
the class ExtensionComponent method activate.
@Override
public void activate() throws ServiceRuntimeException {
if (componentStatus != ComponentStatus.RESOLVED) {
return;
}
ComponentManager componentManager = sofaRuntimeContext.getComponentManager();
ComponentName extensionPointComponentName = extension.getTargetComponentName();
ComponentInfo extensionPointComponentInfo = componentManager.getComponentInfo(extensionPointComponentName);
if (extensionPointComponentInfo == null || !extensionPointComponentInfo.isActivated()) {
return;
}
loadContributions(((ExtensionPointComponent) extensionPointComponentInfo).getExtensionPoint(), extension);
Object target = extensionPointComponentInfo.getImplementation().getTarget();
try {
if (target instanceof Extensible) {
((Extensible) target).registerExtension(extension);
} else {
Method method = ReflectionUtils.findMethod(target.getClass(), "registerExtension", Extension.class);
if (method == null) {
throw new RuntimeException(ErrorCode.convert("01-01001", target.getClass().getCanonicalName()));
}
ReflectionUtils.invokeMethod(method, target, extension);
}
} catch (Throwable t) {
throw new ServiceRuntimeException(ErrorCode.convert("01-01000", extensionPointComponentInfo.getName()), t);
}
componentStatus = ComponentStatus.ACTIVATED;
}
use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by sofastack.
the class ExtensionComponent method resolve.
@Override
public boolean resolve() {
if (componentStatus != ComponentStatus.REGISTERED) {
return false;
}
ComponentManager componentManager = sofaRuntimeContext.getComponentManager();
ComponentName extensionPointComponentName = extension.getTargetComponentName();
ComponentInfo extensionPointComponentInfo = componentManager.getComponentInfo(extensionPointComponentName);
if (extensionPointComponentInfo != null && extensionPointComponentInfo.isActivated()) {
componentStatus = ComponentStatus.RESOLVED;
return true;
}
return false;
}
use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by sofastack.
the class ExtensionPointComponent method activate.
@Override
public void activate() throws ServiceRuntimeException {
super.activate();
ComponentManager componentManager = sofaRuntimeContext.getComponentManager();
for (ComponentInfo componentInfo : componentManager.getComponents()) {
if (componentInfo.getType().equals(ExtensionComponent.EXTENSION_COMPONENT_TYPE) && !componentInfo.isResolved()) {
ExtensionComponent extensionComponent = (ExtensionComponent) componentInfo;
if (extensionComponent.getExtension().getTargetComponentName().equals(componentName)) {
componentManager.resolvePendingResolveComponent(componentInfo.getName());
}
}
}
}
use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by sofastack.
the class ComponentManagerShutdownTest method testSkipAllComponentShutdown.
@Test
public void testSkipAllComponentShutdown() {
SofaRuntimeProperties.setSkipAllComponentShutdown(Thread.currentThread().getContextClassLoader(), true);
ComponentManager componentManager = initComponentManager();
ComponentInfo serviceComponentInfo = componentManager.getComponentInfosByType(SERVICE_COMPONENT_TYPE).stream().findFirst().get();
ComponentInfo springComponentInfo = componentManager.getComponentInfosByType(SPRING_COMPONENT_TYPE).stream().findFirst().get();
GenericApplicationContext applicationContext = (GenericApplicationContext) springComponentInfo.getImplementation().getTarget();
Assert.assertEquals(2, componentManager.size());
Assert.assertTrue(serviceComponentInfo.isActivated());
Assert.assertTrue(springComponentInfo.isActivated());
Assert.assertTrue(applicationContext.isActive());
componentManager.shutdown();
Assert.assertEquals(2, componentManager.size());
Assert.assertTrue(serviceComponentInfo.isActivated());
Assert.assertTrue(springComponentInfo.isActivated());
Assert.assertTrue(applicationContext.isActive());
SofaRuntimeProperties.setSkipAllComponentShutdown(Thread.currentThread().getContextClassLoader(), false);
}
use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by sofastack.
the class SofaBindingTest method testServiceBinding.
@Test
public void testServiceBinding() {
ComponentManager componentManager = sofaRuntimeContext.getComponentManager();
ServiceComponent serializeFalseViaAnnotation = (ServiceComponent) componentManager.getComponentInfo(ComponentNameUtil.getServiceComponentName(SampleService.class, "serializeFalseViaAnnotation"));
ServiceComponent defaultSerializeTrueViaAnnotation = (ServiceComponent) componentManager.getComponentInfo(ComponentNameUtil.getServiceComponentName(SampleService.class, "defaultSerializeTrueViaAnnotation"));
ServiceComponent defaultElement = (ServiceComponent) componentManager.getComponentInfo(ComponentNameUtil.getServiceComponentName(SampleService.class, "default-element"));
ServiceComponent element = (ServiceComponent) componentManager.getComponentInfo(ComponentNameUtil.getServiceComponentName(SampleService.class, "element"));
ServiceComponent noneUniqueId = (ServiceComponent) componentManager.getComponentInfo(ComponentNameUtil.getServiceComponentName(SampleService.class, ""));
Assert.assertNotNull(serializeFalseViaAnnotation);
Assert.assertNotNull(defaultSerializeTrueViaAnnotation);
Assert.assertNotNull(defaultElement);
Assert.assertNotNull(element);
Assert.assertNotNull(noneUniqueId);
JvmBinding jvmBinding;
jvmBinding = (JvmBinding) serializeFalseViaAnnotation.getService().getBinding(JvmBinding.JVM_BINDING_TYPE);
Assert.assertFalse(jvmBinding.getJvmBindingParam().isSerialize());
jvmBinding = (JvmBinding) defaultSerializeTrueViaAnnotation.getService().getBinding(JvmBinding.JVM_BINDING_TYPE);
Assert.assertTrue(jvmBinding.getJvmBindingParam().isSerialize());
jvmBinding = (JvmBinding) defaultElement.getService().getBinding(JvmBinding.JVM_BINDING_TYPE);
Assert.assertTrue(jvmBinding.getJvmBindingParam().isSerialize());
jvmBinding = (JvmBinding) element.getService().getBinding(JvmBinding.JVM_BINDING_TYPE);
Assert.assertFalse(jvmBinding.getJvmBindingParam().isSerialize());
jvmBinding = (JvmBinding) noneUniqueId.getService().getBinding(JvmBinding.JVM_BINDING_TYPE);
Assert.assertTrue(jvmBinding.getJvmBindingParam().isSerialize());
}
Aggregations