Allereerst de context van het probleem:
In een webapplicatie (servlets/jsp's) draaiend binnen een Tomcat server wil ik een bepaalde langlopende taak asynchroon buiten de hoofdthread van de applicatie uitvoeren.
De eenvoudigste oplossing hiervoor is om een nieuwe thread aan te maken en deze de taak uit te laten voeren.
Het voordeel is de snelle en nette aanroep waarin eenvoudig variabelen meegegeven kunnen worden. Nadeel is dat binnen Tomcat oid het zelf aanmaken van nieuwe threads nog wel eens problemen op kan leveren. Als de thread in een lus terecht komt bijvoorbeeld.
Een tweede oplossing zou zijn om gebruik te maken van de "java.lang.Runtime.exec()"-methode. Met deze methode kan direct "java <classpath> Myclass var1 var2" aangeroepen worden of een shell-script met daarin classpath en dergelijke. Nadeel is dat de aanroep niet zo mooi is; classpath, javapath ed zullen expliciet meegegeven moeten worden. Ook is deze methode niet erg efficient.
Voordeel is wel dat het process gekillt kan worden vanuit het OS.
Wat is de beste keus of zijn er andere betere methoden?
Graag jullie commentaar.
In een webapplicatie (servlets/jsp's) draaiend binnen een Tomcat server wil ik een bepaalde langlopende taak asynchroon buiten de hoofdthread van de applicatie uitvoeren.
De eenvoudigste oplossing hiervoor is om een nieuwe thread aan te maken en deze de taak uit te laten voeren.
Het voordeel is de snelle en nette aanroep waarin eenvoudig variabelen meegegeven kunnen worden. Nadeel is dat binnen Tomcat oid het zelf aanmaken van nieuwe threads nog wel eens problemen op kan leveren. Als de thread in een lus terecht komt bijvoorbeeld.
Een tweede oplossing zou zijn om gebruik te maken van de "java.lang.Runtime.exec()"-methode. Met deze methode kan direct "java <classpath> Myclass var1 var2" aangeroepen worden of een shell-script met daarin classpath en dergelijke. Nadeel is dat de aanroep niet zo mooi is; classpath, javapath ed zullen expliciet meegegeven moeten worden. Ook is deze methode niet erg efficient.
Voordeel is wel dat het process gekillt kan worden vanuit het OS.
Wat is de beste keus of zijn er andere betere methoden?
Graag jullie commentaar.