Search in sources :

Example 31 with DeploymentDescriptor

use of com.alipay.sofa.isle.deployment.DeploymentDescriptor in project sofa-boot by sofastack.

the class IsleBeansEndpoint method getModuleApplicationContexts.

private Map<String, ContextBeans> getModuleApplicationContexts(ApplicationRuntimeModel applicationRuntimeModel) {
    Map<String, ContextBeans> contexts = new HashMap<>();
    List<DeploymentDescriptor> installedModules = applicationRuntimeModel.getInstalled();
    installedModules.forEach(descriptor -> {
        ApplicationContext applicationContext = descriptor.getApplicationContext();
        if (applicationContext instanceof ConfigurableApplicationContext) {
            ContextBeans contextBeans = describing((ConfigurableApplicationContext) applicationContext, descriptor.getSpringParent());
            if (contextBeans != null) {
                contexts.put(descriptor.getModuleName(), contextBeans);
            }
        }
    });
    return contexts;
}
Also used : ConfigurableApplicationContext(org.springframework.context.ConfigurableApplicationContext) ApplicationContext(org.springframework.context.ApplicationContext) ConfigurableApplicationContext(org.springframework.context.ConfigurableApplicationContext) HashMap(java.util.HashMap) DeploymentDescriptor(com.alipay.sofa.isle.deployment.DeploymentDescriptor)

Example 32 with DeploymentDescriptor

use of com.alipay.sofa.isle.deployment.DeploymentDescriptor in project sofa-boot by sofastack.

the class ModelCreatingStage method getAllDeployments.

protected void getAllDeployments(ApplicationRuntimeModel application) throws IOException, DeploymentException {
    Enumeration<URL> urls = appClassLoader.getResources(SofaBootConstants.SOFA_MODULE_FILE);
    if (urls == null || !urls.hasMoreElements()) {
        return;
    }
    while (urls.hasMoreElements()) {
        URL url = urls.nextElement();
        UrlResource urlResource = new UrlResource(url);
        Properties props = new Properties();
        props.load(urlResource.getInputStream());
        DeploymentDescriptorConfiguration deploymentDescriptorConfiguration = new DeploymentDescriptorConfiguration(Collections.singletonList(SofaBootConstants.MODULE_NAME), Collections.singletonList(SofaBootConstants.REQUIRE_MODULE));
        DeploymentDescriptor dd = DeploymentBuilder.build(url, props, deploymentDescriptorConfiguration, appClassLoader);
        if (application.isModuleDeployment(dd)) {
            if (sofaModuleProfileChecker.acceptModule(dd)) {
                validateDuplicateModule(application.addDeployment(dd), dd);
            } else {
                application.addInactiveDeployment(dd);
            }
        }
    }
}
Also used : DeploymentDescriptorConfiguration(com.alipay.sofa.isle.deployment.DeploymentDescriptorConfiguration) UrlResource(org.springframework.core.io.UrlResource) DeploymentDescriptor(com.alipay.sofa.isle.deployment.DeploymentDescriptor) SofaModuleProperties(com.alipay.sofa.isle.spring.config.SofaModuleProperties) Properties(java.util.Properties) URL(java.net.URL)

Example 33 with DeploymentDescriptor

use of com.alipay.sofa.isle.deployment.DeploymentDescriptor in project sofa-boot by sofastack.

the class ModuleLogOutputStage method logInstalledModules.

private void logInstalledModules(StringBuilder stringBuilder, List<DeploymentDescriptor> deploys) {
    long totalTime = 0;
    long realStart = 0;
    long realEnd = 0;
    stringBuilder.append("\n").append("Spring context initialize success module list").append("(").append(deploys.size()).append(") >>>>>>>");
    StringBuilder sb = new StringBuilder();
    for (Iterator<DeploymentDescriptor> i = deploys.iterator(); i.hasNext(); ) {
        DeploymentDescriptor dd = i.next();
        String outTreeSymbol = SYMBOLIC1;
        String innerTreeSymbol1 = SYMBOLIC3;
        String innerTreeSymbol2 = SYMBOLIC4;
        if (!i.hasNext()) {
            outTreeSymbol = SYMBOLIC2;
            innerTreeSymbol1 = SYMBOLIC5;
            innerTreeSymbol2 = SYMBOLIC6;
        }
        sb.append(outTreeSymbol).append(dd.getName()).append(" [").append(dd.getElapsedTime()).append(" ms]\n");
        totalTime += dd.getElapsedTime();
        for (Iterator<String> j = dd.getInstalledSpringXml().iterator(); j.hasNext(); ) {
            String xmlPath = j.next();
            String innerTreeSymbol = innerTreeSymbol1;
            if (!j.hasNext()) {
                innerTreeSymbol = innerTreeSymbol2;
            }
            sb.append(innerTreeSymbol).append(xmlPath).append("\n");
        }
        if (realStart == 0 || dd.getStartTime() < realStart) {
            realStart = dd.getStartTime();
        }
        if (realEnd == 0 || (dd.getStartTime() + dd.getElapsedTime()) > realEnd) {
            realEnd = dd.getStartTime() + dd.getElapsedTime();
        }
    }
    stringBuilder.append(" [totalTime = ").append(totalTime).append(" ms, realTime = ").append(realEnd - realStart).append(" ms]\n").append(sb);
}
Also used : DeploymentDescriptor(com.alipay.sofa.isle.deployment.DeploymentDescriptor)

Example 34 with DeploymentDescriptor

use of com.alipay.sofa.isle.deployment.DeploymentDescriptor in project sofa-boot by sofastack.

the class SpringContextInstallStage method installSpringContext.

protected void installSpringContext(ApplicationRuntimeModel application, SpringContextLoader springContextLoader) {
    ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
    for (DeploymentDescriptor deployment : application.getResolvedDeployments()) {
        if (deployment.isSpringPowered()) {
            SofaLogger.info("Start install " + application.getAppName() + "'s module: " + deployment.getName());
            try {
                Thread.currentThread().setContextClassLoader(deployment.getClassLoader());
                springContextLoader.loadSpringContext(deployment, application);
            } catch (Throwable t) {
                SofaLogger.error(ErrorCode.convert("01-11001", deployment.getName()), t);
                application.addFailed(deployment);
            } finally {
                Thread.currentThread().setContextClassLoader(oldClassLoader);
            }
        }
    }
}
Also used : DeploymentDescriptor(com.alipay.sofa.isle.deployment.DeploymentDescriptor)

Example 35 with DeploymentDescriptor

use of com.alipay.sofa.isle.deployment.DeploymentDescriptor in project sofa-boot by sofastack.

the class SpringContextInstallStage method refreshSpringContextParallel.

private void refreshSpringContextParallel(List<DeploymentDescriptor> rootDeployments, int totalSize, final ApplicationRuntimeModel application, final ThreadPoolExecutor executor) {
    if (rootDeployments == null || rootDeployments.size() == 0) {
        return;
    }
    final CountDownLatch latch = new CountDownLatch(totalSize);
    List<Future> futures = new CopyOnWriteArrayList<>();
    for (final DeploymentDescriptor deployment : rootDeployments) {
        refreshSpringContextParallel(deployment, application, executor, latch, futures);
    }
    try {
        latch.await();
    } catch (InterruptedException e) {
        throw new RuntimeException(ErrorCode.convert("01-11004"), e);
    }
    for (Future future : futures) {
        try {
            future.get();
        } catch (Throwable e) {
            throw new RuntimeException(ErrorCode.convert("01-11005"), e);
        }
    }
}
Also used : DeploymentDescriptor(com.alipay.sofa.isle.deployment.DeploymentDescriptor) Future(java.util.concurrent.Future) CountDownLatch(java.util.concurrent.CountDownLatch) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList)

Aggregations

DeploymentDescriptor (com.alipay.sofa.isle.deployment.DeploymentDescriptor)38 DeploymentDescriptorConfiguration (com.alipay.sofa.isle.deployment.DeploymentDescriptorConfiguration)12 URL (java.net.URL)12 Properties (java.util.Properties)12 Test (org.junit.Test)12 ApplicationRuntimeModel (com.alipay.sofa.isle.ApplicationRuntimeModel)10 SofaModuleProperties (com.alipay.sofa.isle.spring.config.SofaModuleProperties)8 ConfigurableApplicationContext (org.springframework.context.ConfigurableApplicationContext)8 FileDeploymentDescriptor (com.alipay.sofa.isle.deployment.impl.FileDeploymentDescriptor)6 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)6 UrlResource (org.springframework.core.io.UrlResource)6 DefaultModuleDeploymentValidator (com.alipay.sofa.isle.deployment.impl.DefaultModuleDeploymentValidator)4 BeanLoadCostBeanFactory (com.alipay.sofa.isle.spring.factory.BeanLoadCostBeanFactory)4 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)4 BeanFactory (org.springframework.beans.factory.BeanFactory)4 DefaultListableBeanFactory (org.springframework.beans.factory.support.DefaultListableBeanFactory)4 ApplicationContext (org.springframework.context.ApplicationContext)4 GenericApplicationContext (org.springframework.context.support.GenericApplicationContext)4 BeanStat (com.alipay.sofa.boot.startup.BeanStat)2 NamedThreadFactory (com.alipay.sofa.boot.util.NamedThreadFactory)2