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;
}
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);
}
}
}
}
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);
}
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);
}
}
}
}
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);
}
}
}
Aggregations