package tech.powerjob.worker.processor.impl; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import tech.powerjob.common.enums.ProcessorType; import tech.powerjob.worker.common.WorkerRuntime; import tech.powerjob.worker.container.OmsContainer; import tech.powerjob.worker.container.OmsContainerFactory; import tech.powerjob.worker.extension.processor.ProcessorBean; import tech.powerjob.worker.extension.processor.ProcessorDefinition; import tech.powerjob.worker.extension.processor.ProcessorFactory; import java.util.Set; /** * 加载容器处理器 * * @author tjq * @since 2023/1/17 */ @Slf4j public class JarContainerProcessorFactory implements ProcessorFactory { private final WorkerRuntime workerRuntime; public JarContainerProcessorFactory(WorkerRuntime workerRuntime) { this.workerRuntime = workerRuntime; } @Override public Set supportTypes() { return Sets.newHashSet(ProcessorType.EXTERNAL.name()); } @Override public ProcessorBean build(ProcessorDefinition processorDefinition) { String processorInfo = processorDefinition.getProcessorInfo(); String[] split = processorInfo.split("#"); String containerName = split[0]; String className = split[1]; log.info("[ProcessorFactory] try to load processor({}) in container({})", className, containerName); OmsContainer omsContainer = OmsContainerFactory.fetchContainer(Long.valueOf(containerName), workerRuntime); if (omsContainer != null) { return new ProcessorBean() .setProcessor(omsContainer.getProcessor(className)) .setClassLoader(omsContainer.getContainerClassLoader()) .setStable(false) ; } else { log.warn("[ProcessorFactory] load container failed. processor info : {}", processorInfo); } return null; } }