import user.commons.remotestore.FtpDirectoryLister;\r
import user.commons.remotestore.RemoteStoreProtocol;\r
\r
+\r
+/* DO NOT REMOVE!\r
+import user.jobengine.server.steps.TestLib;\r
+*/\r
public class CancelableStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
int count = 10;\r
@StepEntry\r
public Object[] execute(int param) throws Exception {\r
try {\r
+ TestLib t = new TestLib();\r
\r
Marker marker = MarkerManager.getMarker("MEDIAPROFILE");\r
getJobRuntime().setRelated("TESZT" + param);\r
\r
/* DO NOT REMOVE!\r
import user.jobengine.server.steps.FileSearchFilterOptions;\r
- */\r
+*/\r
\r
public class PathItemsCollectorStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
\r
@Override\r
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
- if (filterOptions.acceptFile(file))\r
+ if (filterOptions.acceptFile(file)) {\r
files.add(file.toString());\r
- logger.info(file);\r
+ logger.info(file.getFileName());\r
+ }\r
return FileVisitResult.CONTINUE;\r
}\r
\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+public class TestLib {\r
+\r
+ public void hello() {\r
+ System.out.println("Hello from lib");\r
+ }\r
+}\r
Import-Package: org.apache.commons.io.filefilter;version="2.2.0",
org.apache.commons.io.output;version="2.2.0",
org.apache.ibatis.jdbc;version="3.5.2",
+ org.codehaus.groovy.control;version="3.0.3",
org.junit
package hu.user.mediacube.executors.tests.data;\r
\r
+\r
public class TestChild extends TestParent {\r
\r
@Override\r
public void hello() {\r
super.hello();\r
System.out.println("Hello from child");\r
+ \r
+ TestLib lib = new TestLib();\r
+ lib.hello();\r
}\r
}\r
--- /dev/null
+package hu.user.mediacube.executors.tests.data;\r
+\r
+public class TestLib {\r
+\r
+ public void hello() {\r
+ System.out.println("Hello from lib");\r
+ }\r
+}\r
\r
@Test\r
public void test9995() throws Exception {\r
- String file = "/opt/test/TestChild.java";\r
-\r
- \r
GroovyClassLoader cl = new GroovyClassLoader(this.getClass().getClassLoader()) {\r
- \r
+\r
@Override\r
public Class loadClass(String name, boolean lookupScriptFiles, boolean preferClassOverScript, boolean resolve)\r
throws ClassNotFoundException, CompilationFailedException {\r
- // TODO Auto-generated method stub\r
return super.loadClass(name, lookupScriptFiles, preferClassOverScript, resolve);\r
}\r
- \r
+\r
};\r
\r
try {\r
+ cl.parseClass(new File("/opt/test/TestParent.java"));\r
\r
- Class<?> myClass = cl.parseClass(new File(file));\r
+ cl.parseClass(new File("/opt/test/TestLib.java"));\r
+\r
+ Class[] loadedClasses = cl.getLoadedClasses();\r
+ Class<?> myClass = cl.parseClass(new File("/opt/test/TestChild.java"));\r
System.out.println(myClass.getCanonicalName());\r
- Method method = myClass.getMethod("execute");\r
+ Method method = myClass.getMethod("hello");\r
method.invoke(myClass.newInstance());\r
System.out.println("done");\r
} catch (Throwable e) {\r
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
import groovy.lang.GroovyClassLoader;\r
-import groovy.lang.GroovyCodeSource;\r
import user.commons.configuration.IConfiguration;\r
import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.server.ast.Encoder;\r
private final List<JobTemplate> templates = Collections.synchronizedList(new ArrayList<JobTemplate>());\r
private final Map<String, BasicDBObject> schedules = new LinkedHashMap<String, BasicDBObject>();\r
\r
- private URLClassLoader stepsClassLoader = null;\r
-\r
public synchronized void bindSystemConfiguration(Object service) {\r
if (service instanceof IConfiguration) {\r
systemConfig = (IConfiguration) service;\r
\r
boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java") || stepUnitName.toLowerCase().endsWith(".groovy");\r
\r
- if (stepsClassLoader == null) {\r
- String stepClassesDir = systemConfig.getConfig(DIR_CLASSES);\r
- Path path = Paths.get(stepClassesDir);\r
- URL[] urls = { path.toUri().toURL() };\r
- stepsClassLoader = URLClassLoader.newInstance(urls, getClass().getClassLoader());\r
- }\r
+ String stepClassesDir = systemConfig.getConfig(DIR_CLASSES);\r
+ Path path = Paths.get(stepClassesDir);\r
+ URL[] urls = { path.toUri().toURL() };\r
+ URLClassLoader stepsClassLoader = URLClassLoader.newInstance(urls, Thread.currentThread().getContextClassLoader());\r
\r
Class<IJobStep> stepClass = null;\r
\r
if (isGroovyClass) {\r
- try (GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader)) {\r
+ try {\r
+ GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader);\r
String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
stepClass = (Class<IJobStep>) parseClassHierarchy(gcl, stepsDir, stepUnitName);\r
} catch (Exception e) {\r
return result;\r
List<String> lines = Files.readAllLines(path);\r
\r
+ String packageName = null;\r
for (String line : lines) {\r
String trimmedLine = line.trim();\r
+ if (trimmedLine.startsWith("package")) {\r
+ String[] tokens = trimmedLine.split(" ");\r
+ packageName = tokens[1].trim().replace(";", "");\r
+ }\r
\r
- if (trimmedLine.startsWith("import")) {\r
+ if (trimmedLine.startsWith("import") && trimmedLine.contains(packageName)) {\r
String[] tokens = trimmedLine.split("\\.");\r
String name = tokens[tokens.length - 1];\r
name = name.replace(";", "");\r
break;\r
}\r
}\r
- GroovyCodeSource x = new GroovyCodeSource(path.toFile());\r
- result = cl.parseClass(x, true);\r
+ result = cl.parseClass(path.toFile());\r
return result;\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;
jobRuntime.setStatus(JobStatus.EXECUTING);
jobRuntime.NotifyUpdate();
-
- step = createStep();
-
jobRuntime.incrementPriority();
- Object[] outputs = step.run(jobEngine, jobRuntime, inputs);
+ Object[] outputs = null;
+ try {
+ step = createStep();
+ outputs = step.run(jobEngine, jobRuntime, inputs);
+ } finally {
+ if (step != null) {
+ ClassLoader cl = step.getClass().getClassLoader();
+ if (cl instanceof GroovyClassLoader) {
+ URLClassLoader parentCl = (URLClassLoader) cl.getParent();
+ GroovyClassLoader groovyCl = (GroovyClassLoader) cl;
+ groovyCl.close();
+ parentCl.close();
+ }
+ }
+ }
//TODO itt lekezelni a remote notification-t