В настоящее время я работаю с eXist-db, и я хочу выполнить сценарий командной строки, чтобы запустить eXist-db (/bin/startup.sh), дождаться его создания базы данных, чтобы я мог получить коллекцию из него.
//start database
try {
Runtime.getRuntime().exec(path + start);
} catch (IOException ex) {
return false;
}
//get collection
col = DatabaseManager.getCollection(URI + "/db", username, password);
Я хочу подождать с getCollection, пока база данных не будет создана (может быть вызвана), или после определенного количества времени ожидания, если база данных не инициализируется, я хотел бы ее убить (скажем, максимум одна минута). Как лучше всего решить эту проблему? Используя сон / ожидание несколько раз и пытаясь вызвать базу данных? Как то так?
Process pr = null;
try {
pr = Runtime.getRuntime().exec(path + start);
} catch (IOException ex) {
return false;
}
for (int i = 0; i < 60; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
pr.destroy();
return false;
}
try {
dbDetected = initCollection();
} catch (XMLDBException ex) {
if (ex.errorCode != ErrorCodes.VENDOR_ERROR ||
"Failed to read server's response: Connection refused (Connection refused))"
.compareTo(ex.getMessage()) != 0 ) {
pr.destroy();
return false;
}
}
А что касается уничтожения части, я хотел бы подтвердить предположение, что достаточно сохранить процесс и уничтожить его с помощью функции Process.destroy()
(основываясь на предположении, что сценарий для базы данных занимает слишком много времени в обычном режиме выполнения, в конце моего приложения я бы использовал предоставленный скрипт eXist-db /bin/shutdown.sh).