Search in sources :

Example 11 with ComponentManager

use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by alipay.

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;
}
Also used : Extensible(com.alipay.sofa.service.api.component.Extensible) ServiceRuntimeException(com.alipay.sofa.runtime.api.ServiceRuntimeException) ComponentManager(com.alipay.sofa.runtime.spi.component.ComponentManager) ComponentName(com.alipay.sofa.runtime.api.component.ComponentName) ComponentInfo(com.alipay.sofa.runtime.spi.component.ComponentInfo) Method(java.lang.reflect.Method) ServiceRuntimeException(com.alipay.sofa.runtime.api.ServiceRuntimeException)

Example 12 with ComponentManager

use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by alipay.

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());
            }
        }
    }
}
Also used : ComponentManager(com.alipay.sofa.runtime.spi.component.ComponentManager) ComponentInfo(com.alipay.sofa.runtime.spi.component.ComponentInfo)

Example 13 with ComponentManager

use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by alipay.

the class ExtensionPointComponent method deactivate.

@Override
public void deactivate() throws ServiceRuntimeException {
    ComponentManager componentManager = sofaRuntimeContext.getComponentManager();
    for (ComponentInfo componentInfo : componentManager.getComponents()) {
        if (componentInfo.getType().equals(ExtensionComponent.EXTENSION_COMPONENT_TYPE)) {
            ExtensionComponent extensionComponent = (ExtensionComponent) componentInfo;
            if (extensionComponent.getExtension().getTargetComponentName().equals(componentName)) {
                componentManager.unregister(componentInfo);
            }
        }
    }
    if (componentStatus != ComponentStatus.ACTIVATED) {
        return;
    }
    // skip deactivate SpringImplementationImpl because it's already deactivated
    if (this.implementation != null && !(implementation instanceof SpringImplementationImpl)) {
        Object target = this.implementation.getTarget();
        if (target instanceof ComponentLifeCycle) {
            ((ComponentLifeCycle) target).deactivate();
        }
    }
    componentStatus = ComponentStatus.RESOLVED;
}
Also used : ComponentManager(com.alipay.sofa.runtime.spi.component.ComponentManager) ComponentInfo(com.alipay.sofa.runtime.spi.component.ComponentInfo) ComponentLifeCycle(com.alipay.sofa.runtime.api.component.ComponentLifeCycle) SpringImplementationImpl(com.alipay.sofa.runtime.spi.spring.SpringImplementationImpl)

Example 14 with ComponentManager

use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by alipay.

the class SofaBootComponentsEndPoint method components.

@ReadOperation
public ApplicationComponents components() {
    ComponentManager componentManager = sofaRuntimeContext.getComponentManager();
    Map<String, Collection<ComponentDisplayInfo>> componentsInfoMap = new HashMap<>();
    Collection<ComponentType> componentTypes = componentManager.getComponentTypes();
    componentTypes.forEach(componentType -> {
        Collection<ComponentInfo> componentInfos = componentManager.getComponentInfosByType(componentType);
        Collection<ComponentDisplayInfo> componentDisplayInfos = componentInfos.stream().map(componentInfo -> new ComponentDisplayInfo(componentInfo.getName().getName(), componentInfo.getApplicationContext().getId())).collect(Collectors.toList());
        componentsInfoMap.put(componentType.getName(), componentDisplayInfos);
    });
    return new ApplicationComponents(componentsInfoMap);
}
Also used : SofaRuntimeContext(com.alipay.sofa.runtime.spi.component.SofaRuntimeContext) ReadOperation(org.springframework.boot.actuate.endpoint.annotation.ReadOperation) ComponentType(com.alipay.sofa.runtime.model.ComponentType) Endpoint(org.springframework.boot.actuate.endpoint.annotation.Endpoint) Collection(java.util.Collection) Map(java.util.Map) ComponentInfo(com.alipay.sofa.runtime.spi.component.ComponentInfo) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) ComponentManager(com.alipay.sofa.runtime.spi.component.ComponentManager) ComponentType(com.alipay.sofa.runtime.model.ComponentType) HashMap(java.util.HashMap) ComponentManager(com.alipay.sofa.runtime.spi.component.ComponentManager) Collection(java.util.Collection) ComponentInfo(com.alipay.sofa.runtime.spi.component.ComponentInfo) ReadOperation(org.springframework.boot.actuate.endpoint.annotation.ReadOperation)

Example 15 with ComponentManager

use of com.alipay.sofa.runtime.spi.component.ComponentManager in project sofa-boot by alipay.

the class ComponentManagerShutdownTest method testNormalShutdown.

@Test
public void testNormalShutdown() {
    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(0, componentManager.size());
    Assert.assertFalse(serviceComponentInfo.isActivated());
    Assert.assertFalse(springComponentInfo.isActivated());
    Assert.assertFalse(applicationContext.isActive());
}
Also used : GenericApplicationContext(org.springframework.context.support.GenericApplicationContext) ComponentManager(com.alipay.sofa.runtime.spi.component.ComponentManager) ComponentInfo(com.alipay.sofa.runtime.spi.component.ComponentInfo) Test(org.junit.Test)

Aggregations

ComponentManager (com.alipay.sofa.runtime.spi.component.ComponentManager)31 ComponentInfo (com.alipay.sofa.runtime.spi.component.ComponentInfo)26 Test (org.junit.Test)14 ComponentName (com.alipay.sofa.runtime.api.component.ComponentName)10 GenericApplicationContext (org.springframework.context.support.GenericApplicationContext)10 JvmBinding (com.alipay.sofa.runtime.service.binding.JvmBinding)8 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)8 ReferenceComponent (com.alipay.sofa.runtime.service.component.ReferenceComponent)6 Binding (com.alipay.sofa.runtime.spi.binding.Binding)4 DefaultImplementation (com.alipay.sofa.runtime.spi.component.DefaultImplementation)4 SofaRuntimeContext (com.alipay.sofa.runtime.spi.component.SofaRuntimeContext)4 ServiceRuntimeException (com.alipay.sofa.runtime.api.ServiceRuntimeException)3 ComponentLifeCycle (com.alipay.sofa.runtime.api.component.ComponentLifeCycle)2 ComponentType (com.alipay.sofa.runtime.model.ComponentType)2 ServiceComponent (com.alipay.sofa.runtime.service.component.ServiceComponent)2 SpringImplementationImpl (com.alipay.sofa.runtime.spi.spring.SpringImplementationImpl)2 SpringContextComponent (com.alipay.sofa.runtime.spring.SpringContextComponent)2 SpringContextImplementation (com.alipay.sofa.runtime.spring.SpringContextImplementation)2 SampleService (com.alipay.sofa.runtime.test.beans.facade.SampleService)2 DefaultSampleService (com.alipay.sofa.runtime.test.beans.service.DefaultSampleService)2