ausgeführt wird Ich mache eine Webanwendung, die an einem bestimmten Punkt einen neuen Thread startet, und dieser Thread führt eine JAR-Datei über die Befehlszeile aus. Die Befehlszeile jar funktioniert gut, wenn sie von außerhalb der Anwendung aufgerufen wird, aber wenn ich sie aus dem Thread aufruft, wird der relative Pfad C: \ eclipse \ (ich führe die Anwendung von Eclipse aus) anstelle des Verzeichnisses, in dem sie gespeichert ist vermasselt seine Konfiguration, da es nach Dateien am falschen Ort sucht.Relativer Pfad wird geändert, wenn von einem Thread
Das jar erstellt eine Protokolldatei, wenn ich versuche, es aufzurufen, habe ich diese Zeile in das Protokoll geschrieben: "10/04/2012 17:09:03 - java.io.FileNotFoundException: C: \ eclipse \ descriptors \ analysis_engine \ AggregateAE.xml " Das Jar befindet sich nicht in C: \ eclipse. Wenn ich es von der Eingabeaufforderung aus anrufe, habe ich keine Probleme, aber wenn es von einem neuen erzeugten Thread aufgerufen wird, habe ich diesen Fehler. Ich habe es in einer Produktionsumgebung versucht und ich habe das gleiche Problem (dieses Mal ist der Basispfad der Server)
In Anbetracht, dass ich nicht alle Pfade ändern kann, was könnte eine Lösung für dieses Problem sein?
EDIT: Dies ist der Thread-Klasse, die das Glas diese
public class UimaThread extends Thread {
private int mode=0;
private String path;
public UimaThread(int mode, String path){
this.mode=mode;
this.path=path;
}
public void run() {
Runtime run = Runtime.getRuntime();
try {
Properties config = ConfigLoader.getConfig();
String uimaPath=config.getProperty("uimaPath")+ControlPanelUtils.getDelimiter(config.getProperty("uimaPath"));
//uimaPath is the absolute path to the jar file, mode and path are just arguments passed to the jar
run.exec("java -jar "+uimaPath+"uimachainfull.jar "+mode+" "+path);
}
}
Der Code läuft nennt, ist:
public void startUima() throws IOException, ServletException {
Properties config = ConfigLoader.getConfig();
UimaThread uimaThread = new UimaThread(2, config.getProperty("docPath"));
uimaThread.start();
}
Ich brauche diese asynchron ausgeführt werden und außerhalb des Servers, ich habe gefragt, wie man das hier in stackoverflow tun kann und Calling an application from a web server asynchronously
Wie rufen Sie diese JAR? Zeigen Sie den Code. Außerdem nehme ich an, dass Sie wissen, dass Java-Web-Apps (JEE-Apps) technisch nicht erlaubt sind, eigene Threads zu spawnen oder auf das Dateisystem zuzugreifen. Einige Container erlauben das, aber ich bin mir ziemlich sicher, dass das gegen die JEE-Spezifikation ist. –
Ich habe den Code veröffentlicht. Ich habe keine Probleme mit Thread-Laichen und Dateisystem. Meine Anwendung muss viel mit dem Zugriff auf das Dateisystem arbeiten. – valepu