<?xml version="1.0" encoding="UTF-8"?>\r
<executors>\r
+ <executor className="TestForkCancelableStep.java" maxConcurrent="1" />\r
+ <executor className="CancelableStep.java" maxConcurrent="50" />\r
+ <executor className="CopyForArchiveNEXIOMaterialsStep.java" maxConcurrent="1" />\r
+ <executor className="DeleteNEXIOMaterialsStep.java" maxConcurrent="1" />\r
+\r
<executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.ArchiveMaterialSubmitStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.BatchRetrieveForkStep" maxConcurrent="10" />\r
- <executor className="user.jobengine.server.steps.CancelableStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CheckLOWRESIntegrity" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CheckMORPHEUSMissingMaterialsStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CheckTRAFFICMissingMaterialsStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CleanupMountedLocationStep" maxConcurrent="10" />\r
<executor className="user.jobengine.server.steps.ProjectCleanupMountedLocationStep" maxConcurrent="1" />\r
- <executor className="user.jobengine.server.steps.CopyForArchiveNEXIOMaterialsStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CopyForArchiveNEXIORecordingsStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CreateArchiveItemStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.CreateMissingLowresStep" maxConcurrent="1" />\r
- <executor className="user.jobengine.server.steps.DeleteNEXIOMaterialsStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.DetectMissingLengthStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.DeleteFileStep" maxConcurrent="100" />\r
<executor className="user.jobengine.server.steps.DownloadRecordingFromNexioStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.TranscodeFFAStranStep" maxConcurrent="2" />\r
<executor className="user.jobengine.server.steps.TranscodeSELENIOStep" maxConcurrent="2" />\r
<executor className="user.jobengine.server.steps.TSMBackupStep" maxConcurrent="1" />\r
- <executor className="user.jobengine.server.steps.TSMExtendedRetrieveStep" maxConcurrent="1" />\r
+ <executor className="user.jobengine.server.steps.TSMExtendedRetrieveStep" maxConcurrent="2" />\r
<executor className="user.jobengine.server.steps.TSMRestoreStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.TSMSystemRestoreStep" maxConcurrent="1" />\r
<executor className="user.jobengine.server.steps.TSMRetrieveMissingMaterialStep" maxConcurrent="1" />\r
{\r
- "joblist": [{\r
- "active": true,\r
- "cronexpression": "0/2 * * * * ?",\r
- "template": "cancelable.xml"\r
- },\r
- {\r
- "active": true,\r
- "executeimmediate": true,\r
- "name" : "OCTOPUS adatok szinkronizálása",\r
- "template": "sync-octopus.xml",\r
- "cronexpression": "0/30 * * * * ?",\r
- "parameters": [\r
- {"name": "includeArchived", "value": false, "type": "java.lang.Boolean"},\r
- {"name": "address", "value": "http://10.10.1.11/api/v1", "type": "java.lang.String"},\r
- {"name": "user", "value": "mam", "type": "java.lang.String"},\r
- {"name": "pwd", "value": "napocska", "type": "java.lang.String"}\r
- ]\r
- } \r
- ]\r
-}
\ No newline at end of file
+ "joblist": [\r
+ {\r
+ "active": false,\r
+ "cronexpression": "0/2 * * * * ?",\r
+ "template": "cancelable.xml",\r
+ "parameters": [\r
+ {\r
+ "name": "param",\r
+ "value": 100,\r
+ "type": "java.lang.Integer"\r
+ }\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "template": "test-fork-cancelable.xml",\r
+ "parameters": [\r
+ {\r
+ "name": "count",\r
+ "value": 2,\r
+ "type": "java.lang.Integer"\r
+ }\r
+ ]\r
+ },\r
+ {\r
+ "active": true,\r
+ "executeimmediate": true,\r
+ "name": "OCTOPUS adatok szinkronizálása",\r
+ "template": "sync-octopus.xml",\r
+ "cronexpression": "0/30 * * * * ?",\r
+ "parameters": [\r
+ {\r
+ "name": "includeArchived",\r
+ "value": false,\r
+ "type": "java.lang.Boolean"\r
+ },\r
+ {\r
+ "name": "address",\r
+ "value": "http://10.10.1.11/api/v1",\r
+ "type": "java.lang.String"\r
+ },\r
+ {\r
+ "name": "user",\r
+ "value": "mam",\r
+ "type": "java.lang.String"\r
+ },\r
+ {\r
+ "name": "pwd",\r
+ "value": "napocska",\r
+ "type": "java.lang.String"\r
+ }\r
+ ]\r
+ }\r
+ ]\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+public class CancelableStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(int param) throws Exception {\r
+ logger.info(getMarker(), "Executing with param {}", param);\r
+ for (int i = 0; i < 10; i++) {\r
+ if (getJobRuntime().isWaitingCancel())\r
+ break;\r
+ Thread.sleep(1000);\r
+ int progress = (i + 1) * 100 / 10;\r
+ setProgress(progress);\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.IJob;\r
+import user.commons.JobStatus;\r
+import user.commons.ListUtils;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class TestForkCancelableStep extends JobStep {\r
+ private static final String CHILD_TEMPLATE = "cancelable.xml";\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(int count) throws Exception {\r
+ getJobRuntime().forkPrepare();\r
+ for (int i = 0; i < count; i++) {\r
+ if (getJobRuntime().isWaitingCancel())\r
+ break;\r
+ IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
+ IJobRuntime r = (IJobRuntime) e.getSource();\r
+\r
+ if (r.isDisableRetry())\r
+ return;\r
+\r
+ if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) {\r
+ long id = ((IJob) e.getSource()).getId();\r
+ logger.info("Cleanup occured because status is {} {}", e.getStatus(), id);\r
+ }\r
+\r
+ }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
+\r
+ runtime.setRelated("TEST" + runtime.getId());\r
+ }\r
+\r
+ getJobRuntime().forkWaitComplete();\r
+ return null;\r
+ }\r
+}\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="false" useSessionLog="true">\r
+<jobtemplate multiInstance="true" useSessionLog="true">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="param" type="java.lang.Integer" />\r
+ </parameters>\r
+ </declarations>\r
<commands>\r
- <calljobstep id="step1" type="user.jobengine.server.steps.CancelableStep" weight="1" />\r
+ <calljobstep id="step1" type="CancelableStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="param" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
</commands>\r
</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="count" type="java.lang.Integer" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="TestForkCancelableStep.java" weight="1" >\r
+ <inputs>\r
+ <input>\r
+ <parameter name="count" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
private static final Logger logger = LogManager.getLogger();\r
\r
@StepEntry\r
- public Object[] execute() throws Exception {\r
- logger.info(getMarker(), "Executing");\r
+ public Object[] execute(int param) throws Exception {\r
+ logger.info(getMarker(), "Executing with param {}", param);\r
for (int i = 0; i < 10; i++) {\r
- logger.info(getMarker(), "Executing {}", i);\r
if (getJobRuntime().isWaitingCancel())\r
break;\r
- Thread.sleep(1000);\r
+ Thread.sleep(10);\r
int progress = (i + 1) * 100 / 10;\r
setProgress(progress);\r
}\r
public class TestForkCancelableStep extends JobStep {\r
private static final String CHILD_TEMPLATE = "cancelable.xml";\r
private static final Logger logger = LogManager.getLogger();\r
- int count = 5;\r
\r
@StepEntry\r
- public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- jobRuntime.forkPrepare();\r
+ public Object[] execute(int count) throws Exception {\r
+ getJobRuntime().forkPrepare();\r
for (int i = 0; i < count; i++) {\r
if (getJobRuntime().isWaitingCancel())\r
break;\r
- //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
- // IJobRuntime runtime = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, "JOB " + i, ListUtils.asMap("param", i));\r
IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
IJobRuntime r = (IJobRuntime) e.getSource();\r
+\r
if (r.isDisableRetry())\r
return;\r
- if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
- logger.info("Cleanup occured because status is {} {}", e.getStatus(), ((IJob) e.getSource()).getId());\r
+\r
+ if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) {\r
+ long id = ((IJob) e.getSource()).getId();\r
+ logger.info("Cleanup occured because status is {} {}", e.getStatus(), id);\r
+ }\r
+\r
}, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
\r
runtime.setRelated("TEST" + runtime.getId());\r
}\r
\r
- jobRuntime.forkWaitComplete();\r
- logger.info("Done");\r
+ getJobRuntime().forkWaitComplete();\r
return null;\r
}\r
}\r
private final Map<String, BasicDBObject> schedules = new LinkedHashMap<String, BasicDBObject>();\r
private URLClassLoader stepsClassLoader;\r
private boolean resetStepClassLoader;\r
+ private GroovyClassLoader groovyClassLoader;\r
\r
public synchronized void bindSystemConfiguration(Object service) {\r
if (service instanceof IConfiguration) {\r
return gcl;\r
}\r
\r
+ private GroovyClassLoader createGroovyClassLoader(URLClassLoader stepsClassLoader) throws FileNotFoundException {\r
+ String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
+\r
+ Set<File> sharedFiles = getJavaFileList(Paths.get(stepsDir, "shared"), null);\r
+ Set<File> libFiles = getJavaFileList(Paths.get(stepsDir), null);\r
+ libFiles.addAll(sharedFiles);\r
+\r
+ GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader) {\r
+\r
+ @Override\r
+ protected CompilationUnit createCompilationUnit(CompilerConfiguration config, CodeSource source) {\r
+ CompilationUnit result = new CompilationUnit(config, source, this);\r
+ libFiles.forEach(f -> result.addSource(f));\r
+ //loadStepSources(result, Paths.get(stepsDir, "shared"));\r
+ //loadStepSources(result, Paths.get(stepsDir));\r
+ return result;\r
+ }\r
+\r
+ };\r
+ return gcl;\r
+ }\r
+\r
@SuppressWarnings("unchecked")\r
@Override\r
public IJobStep createJobStep(String stepUnitName) throws Exception {\r
\r
boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java")\r
|| stepUnitName.toLowerCase().endsWith(".groovy");\r
- logger.info("Looking for {} step classloader requirement", stepUnitName);\r
+ logger.info("Looking for {} step ClassLoader requirement", stepUnitName);\r
\r
- if (stepsClassLoader == null)\r
- stepsClassLoader = createParentClassLoader();\r
- else {\r
- if (resetStepClassLoader) {\r
+ if (resetStepClassLoader) {\r
+ logger.info("Processing ClassLoader reset");\r
+ if (groovyClassLoader != null) {\r
+ groovyClassLoader.close();\r
+ groovyClassLoader = null;\r
+ }\r
+\r
+ if (stepsClassLoader != null) {\r
stepsClassLoader.close();\r
- stepsClassLoader = createParentClassLoader();\r
+ stepsClassLoader = null;\r
}\r
+\r
+ resetStepClassLoader = false;\r
+ }\r
+\r
+ if (stepsClassLoader == null) {\r
+ logger.info("Creating parent ClassLoader");\r
+ stepsClassLoader = createParentClassLoader();\r
+ }\r
+\r
+ if (groovyClassLoader == null) {\r
+ logger.info("Creating Groovy ClassLoader");\r
+ groovyClassLoader = createGroovyClassLoader(stepsClassLoader);\r
}\r
\r
Class<IJobStep> stepClass = null;\r
\r
if (isGroovyClass) {\r
- logger.info("Creating GroovyClassLoader");\r
- GroovyClassLoader gcl = createGroovyClassLoader(stepsClassLoader, stepUnitName);\r
- stepClass = (Class<IJobStep>) loadClassFromSourceCode(gcl, stepUnitName);\r
+ //kozos classloader hasznalata\r
+ //GroovyClassLoader gcl = createGroovyClassLoader(stepsClassLoader, stepUnitName);\r
+\r
+ stepClass = (Class<IJobStep>) loadClassFromSourceCode(groovyClassLoader, stepUnitName);\r
} else\r
stepClass = (Class<IJobStep>) stepsClassLoader.loadClass(stepUnitName);\r
\r
\r
result = gcl.parseClass(path.toFile());\r
if (result != null)\r
- logger.info("Successfully loaded {}", className);\r
+ logger.info("Class for {} successfully loaded", className);\r
return result;\r
}\r
\r
&& file.getFileName().toString().endsWith(".java");\r
try (Stream<Path> stream = Files.list(path)) {\r
stream.filter(filter).forEach(p -> {\r
- if (!excludeFileName.equals(p.getFileName().toString()))\r
+ if (excludeFileName != null && !excludeFileName.equals(p.getFileName().toString()))\r
result.add(p.toFile());\r
\r
});\r
package user.jobengine.server;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import groovy.lang.GroovyClassLoader;
import user.commons.JobStatus;
import user.commons.cluster.ClusteredJob;
import user.jobengine.server.messages.JobStepCompletedMessage;
step = createStep();
outputs = step.run(jobEngine, jobRuntime, inputs);
} finally {
+
+ /*
+ //kozos loader hasznalata!
if (step != null) {
ClassLoader cl = step.getClass().getClassLoader();
if (cl instanceof GroovyClassLoader) {
-
+
GroovyClassLoader stepClassLoader = (GroovyClassLoader) cl;
stepClassLoader.close();
-
- // URLClassLoader stepParentClassLoader = (URLClassLoader) cl.getParent();
- // stepParentClassLoader.close();
- } else if (cl instanceof URLClassLoader) {
- // URLClassLoader stepClassLoader = (URLClassLoader) cl;
- // stepClassLoader.close();
-
}
}
+ */
}
//TODO itt lekezelni a remote notification-t
boolean result = false;
if (getMaxConcurrent() < workers.size()) {
workers.remove(worker);
- logger.info("Worker {} is retired, max {} current {}", getStepUnitName(), getMaxConcurrent(), workers.size());
+ logger.info("Worker {} is retired, max {} current {}", getStepUnitName(), getMaxConcurrent(),
+ workers.size());
result = true;
}
sizable="true" position="left,top" viewModel="@id('vm') @init('user.jobengine.zk.model.MetadataDetailsModel')" forward="onCancel=closeButton.onClick">\r
\r
<script>\r
+ \r
+ //AIzaSyDlKynTrgF_WcFy3b2R9116-WkHg8Y0O_k\r
+ //https://www.google.com/intl/en/chrome/demos/speech.html\r
if ('webkitSpeechRecognition' in window) {\r
console.log('speech recognition API supported')\r
} else {\r
-version=2.7.7\r
+version=2.7.8\r
+#!!!2.7.8 Classloader mechanizmus atalakitasa, metadata editor history\r
#!!!2.7.7 Folyamat inditas dblclik tiltas\r
#2.7.6 TSM Metadata provider, javitott GroovyClassLoader\r
#2.7.5 ArchiveItem disableProxy, MediaFile disableProxy\r