Search in sources :

Example 21 with SofaRuntimeManager

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

the class RuntimeConfiguration method sofaRuntimeManager.

@Bean
@ConditionalOnMissingBean
public static SofaRuntimeManager sofaRuntimeManager(Environment environment, BindingConverterFactory bindingConverterFactory, BindingAdapterFactory bindingAdapterFactory) {
    String appName = environment.getProperty(SofaBootConstants.APP_NAME_KEY);
    ClientFactoryInternal clientFactoryInternal = new ClientFactoryImpl();
    SofaRuntimeManager sofaRuntimeManager = new StandardSofaRuntimeManager(appName, Thread.currentThread().getContextClassLoader(), clientFactoryInternal);
    sofaRuntimeManager.getComponentManager().registerComponentClient(ReferenceClient.class, new ReferenceClientImpl(sofaRuntimeManager.getSofaRuntimeContext(), bindingConverterFactory, bindingAdapterFactory));
    sofaRuntimeManager.getComponentManager().registerComponentClient(ServiceClient.class, new ServiceClientImpl(sofaRuntimeManager.getSofaRuntimeContext(), bindingConverterFactory, bindingAdapterFactory));
    SofaFramework.registerSofaRuntimeManager(sofaRuntimeManager);
    return sofaRuntimeManager;
}
Also used : ClientFactoryImpl(com.alipay.sofa.runtime.client.impl.ClientFactoryImpl) ClientFactoryInternal(com.alipay.sofa.runtime.spi.client.ClientFactoryInternal) ReferenceClientImpl(com.alipay.sofa.runtime.service.client.ReferenceClientImpl) StandardSofaRuntimeManager(com.alipay.sofa.runtime.component.impl.StandardSofaRuntimeManager) ServiceClientImpl(com.alipay.sofa.runtime.service.client.ServiceClientImpl) SofaRuntimeManager(com.alipay.sofa.runtime.spi.component.SofaRuntimeManager) StandardSofaRuntimeManager(com.alipay.sofa.runtime.component.impl.StandardSofaRuntimeManager) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) Bean(org.springframework.context.annotation.Bean)

Example 22 with SofaRuntimeManager

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

the class HealthCheckerProcessorParallelTest method testComponentHealthCheckerFailedFirst.

@Test
public void testComponentHealthCheckerFailedFirst() {
    SofaRuntimeManager manager = new StandardSofaRuntimeManager("testComponentHealthCheckerFailedFirst", Thread.currentThread().getContextClassLoader(), null);
    manager.getComponentManager().register(new TestComponent("component1", true));
    manager.getComponentManager().register(new TestComponent("component2", true));
    manager.getComponentManager().register(new TestComponent("component3", false));
    manager.getComponentManager().register(new TestComponent("component4", true));
    manager.getComponentManager().register(new TestComponent("component5", false));
    ComponentHealthChecker componentHealthChecker = new ComponentHealthChecker(new SofaRuntimeContext(manager, manager.getComponentManager(), null));
    int i = 0;
    for (Map.Entry<String, Object> entry : componentHealthChecker.isHealthy().getDetails().entrySet()) {
        if (i < 2) {
            Assert.assertEquals(entry.getValue().toString(), "failed");
        } else {
            Assert.assertEquals(entry.getValue().toString(), "passed");
        }
        ++i;
    }
}
Also used : ComponentHealthChecker(com.alipay.sofa.healthcheck.impl.ComponentHealthChecker) StandardSofaRuntimeManager(com.alipay.sofa.runtime.component.impl.StandardSofaRuntimeManager) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) SofaRuntimeManager(com.alipay.sofa.runtime.spi.component.SofaRuntimeManager) StandardSofaRuntimeManager(com.alipay.sofa.runtime.component.impl.StandardSofaRuntimeManager) SofaRuntimeContext(com.alipay.sofa.runtime.spi.component.SofaRuntimeContext) Test(org.junit.Test)

Example 23 with SofaRuntimeManager

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

the class MultiApplicationHealthIndicator method health.

@Override
public Health health() {
    boolean allPassed = true;
    Health.Builder builder = new Health.Builder();
    for (SofaRuntimeManager sofaRuntimeManager : SofaFramework.getRuntimeSet()) {
        Biz biz = DynamicJvmServiceProxyFinder.getBiz(sofaRuntimeManager);
        if (biz == null) {
            continue;
        }
        if (!sofaRuntimeManager.isLivenessHealth()) {
            allPassed = false;
            builder.withDetail(String.format("Biz: %s health check", biz.getIdentity()), "failed");
        } else {
            builder.withDetail(String.format("Biz: %s health check", biz.getIdentity()), "passed");
        }
    }
    if (allPassed) {
        return builder.up().build();
    } else {
        return builder.down().build();
    }
}
Also used : Biz(com.alipay.sofa.ark.spi.model.Biz) Health(org.springframework.boot.actuate.health.Health) SofaRuntimeManager(com.alipay.sofa.runtime.spi.component.SofaRuntimeManager)

Example 24 with SofaRuntimeManager

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

the class DynamicJvmServiceProxyFinder method findServiceProxy.

public ServiceProxy findServiceProxy(ClassLoader clientClassloader, Contract contract) {
    ServiceComponent serviceComponent = findServiceComponent(clientClassloader, contract);
    if (serviceComponent == null) {
        return null;
    }
    SofaRuntimeManager sofaRuntimeManager = serviceComponent.getContext().getSofaRuntimeManager();
    Biz biz = getBiz(sofaRuntimeManager);
    if (biz == null) {
        return null;
    }
    JvmBinding referenceJvmBinding = (JvmBinding) contract.getBinding(JvmBinding.JVM_BINDING_TYPE);
    JvmBinding serviceJvmBinding = (JvmBinding) serviceComponent.getService().getBinding(JvmBinding.JVM_BINDING_TYPE);
    boolean serialize;
    if (serviceJvmBinding != null) {
        serialize = referenceJvmBinding.getJvmBindingParam().isSerialize() || serviceJvmBinding.getJvmBindingParam().isSerialize();
    } else {
        // Service provider don't intend to publish JVM service, serialize is considered to be true in this case
        serialize = true;
    }
    return new DynamicJvmServiceInvoker(clientClassloader, sofaRuntimeManager.getAppClassLoader(), serviceComponent.getService().getTarget(), contract, biz.getIdentity(), serialize);
}
Also used : Biz(com.alipay.sofa.ark.spi.model.Biz) ServiceComponent(com.alipay.sofa.runtime.service.component.ServiceComponent) SofaRuntimeManager(com.alipay.sofa.runtime.spi.component.SofaRuntimeManager) JvmBinding(com.alipay.sofa.runtime.service.binding.JvmBinding)

Example 25 with SofaRuntimeManager

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

the class DynamicJvmServiceProxyFinder method findServiceComponent.

public ServiceComponent findServiceComponent(ClassLoader clientClassloader, Contract contract) {
    ServiceComponent serviceComponent = null;
    if (hasFinishStartup && SofaRuntimeProperties.isDynamicJvmServiceCacheEnable()) {
        serviceComponent = cacheSearching(contract);
        if (serviceComponent != null) {
            return serviceComponent;
        }
    }
    String interfaceType = contract.getInterfaceType().getCanonicalName();
    String uniqueId = contract.getUniqueId();
    for (SofaRuntimeManager sofaRuntimeManager : SofaFramework.getRuntimeSet()) {
        if (sofaRuntimeManager.getAppClassLoader().equals(clientClassloader)) {
            continue;
        }
        String version = ReplayContext.get();
        if (ReplayContext.PLACEHOLDER.equals(version)) {
            version = null;
        }
        Biz biz = getBiz(sofaRuntimeManager);
        // if null , check next
        if (biz == null) {
            continue;
        }
        // https://github.com/sofastack/sofa-boot/issues/532
        if (hasFinishStartup && biz.getBizState() != BizState.DEACTIVATED && biz.getBizState() != BizState.ACTIVATED) {
            continue;
        }
        // if specified version , but version do not match ,check next
        if (version != null && !version.equals(biz.getBizVersion())) {
            continue;
        }
        // https://github.com/sofastack/sofa-boot/issues/532
        if (hasFinishStartup && version == null && biz.getBizState() != BizState.ACTIVATED) {
            continue;
        }
        // match biz
        serviceComponent = findServiceComponent(uniqueId, interfaceType, sofaRuntimeManager.getComponentManager());
        if (serviceComponent != null) {
            return serviceComponent;
        }
    }
    return null;
}
Also used : Biz(com.alipay.sofa.ark.spi.model.Biz) ServiceComponent(com.alipay.sofa.runtime.service.component.ServiceComponent) SofaRuntimeManager(com.alipay.sofa.runtime.spi.component.SofaRuntimeManager)

Aggregations

SofaRuntimeManager (com.alipay.sofa.runtime.spi.component.SofaRuntimeManager)33 StandardSofaRuntimeManager (com.alipay.sofa.runtime.component.impl.StandardSofaRuntimeManager)15 ClientFactoryImpl (com.alipay.sofa.runtime.client.impl.ClientFactoryImpl)11 ClientFactoryInternal (com.alipay.sofa.runtime.spi.client.ClientFactoryInternal)11 ConditionalOnMissingBean (org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean)10 Bean (org.springframework.context.annotation.Bean)10 ReferenceClientImpl (com.alipay.sofa.runtime.service.client.ReferenceClientImpl)9 ServiceClientImpl (com.alipay.sofa.runtime.service.client.ServiceClientImpl)9 ServiceComponent (com.alipay.sofa.runtime.service.component.ServiceComponent)8 Biz (com.alipay.sofa.ark.spi.model.Biz)6 Test (org.junit.Test)6 ComponentHealthChecker (com.alipay.sofa.healthcheck.impl.ComponentHealthChecker)4 JvmBinding (com.alipay.sofa.runtime.service.binding.JvmBinding)4 ComponentInfo (com.alipay.sofa.runtime.spi.component.ComponentInfo)4 SofaRuntimeContext (com.alipay.sofa.runtime.spi.component.SofaRuntimeContext)4 HashMap (java.util.HashMap)4 LinkedHashMap (java.util.LinkedHashMap)4 Map (java.util.Map)4 ApplicationRuntimeModel (com.alipay.sofa.isle.ApplicationRuntimeModel)2 DefaultModuleDeploymentValidator (com.alipay.sofa.isle.deployment.impl.DefaultModuleDeploymentValidator)2