Все,Java-программа, которая вызывает асинхронную внешнюю программу?
Первоначально у меня был сценарий оболочки, называемый SQLLoader (инструмент для загрузки данных Oracles).
Проблема заключалась в том, что SQLLoader вводит простой текстовый пароль в качестве входных данных, поэтому я решил создать приложение Java для вызова SQLLoader, передающего дешифрованный пароль в командную строку.
например.
SQLLDR пользователь/пасс @ контроль DbServer = ../sqlloader.ctl журнал = sqlloader.log данные = mydata.csv
Так что с моей Java обертку он стал это в моем сценарии оболочки
java -jar sqlloader.jar sqlloader.ctl mydata.csv
Однако новая проблема возникла, когда SQLLoader жаловался, что загрузочного файла не было. После некоторой царапины головы было обнаружено, что последующая команда в моем сценарии оболочки, казалось, выполнялась, пока мое приложение Java все еще работало. Поэтому он вел себя асинхронно.
Следующая команда перемещала входной файл, который использовал sqlloader, прежде чем он сможет получить возможность использовать его. Поэтому я поставил команду спящего режима за 20 секунд, чтобы запустить мое приложение Java.
java -jar sqlloader.jar sqlloader.ctl mydata.csv
echo $?
sleep 20
if [ $? -ne 0 ]
then
echo "SQLLoader failed during execution, please check the log : "
mv mydata.csv
else
echo "SQLLoader successfully processed file : "
mv mydata.csv
fi
Кто-нибудь знает, почему Unix ведет себя таким образом, делает Java выполнить мой SQLLoader как другой пользователь/нить?
Это мой Java-код:
Runtime Rt;
Process Prc;
Prc = Rt.exec("sqlldr user/[email protected] control=../sqlloader.ctl log=sqlloader.log data=mydata.csv);
system.exit(0);
Я проверил время выполнения класса для чего про то, что Асинхронный но не смог найти что-нибудь
http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html
Любые теории или предложения?
Благодаря
Что вы делаете в своем коде после exec? – Ingo
system.exit (0); это моя последняя строка в java-программе – kaleeway
Это может быть не в тему, но ...Каково намерение шифровать пароль? Вы действительно жестко задаете пароль в Java String, как ваш пример кода? Если это так, хакер может распаковать файл 'jar' и заглянуть в файл' .class', пароль будет просто открытым. Java 'Runtime.exec' является низкоуровневым и сложным для обработки, и должен быть более простой способ. – miaout17