Вызовите хранимую процедуру через DBAdapter неблокирующим способом
Я хотел бы понять, как можно вызвать через BPEL хранимую процедуру неблокирующим способом. Меня беспокоит то, что у меня есть хранимая процедура (в DBAdpater), которую я вызываю, но она занимает так много времени (около 30 минут), и я не могу ждать, пока она не закончится.
Я пытаюсь установить в составном приложении свойство invoke "nonBlockingInvoke", но оно не работает, адаптер блокируется до получения ответа.
Благодарю.
1 ответ
Nonblockinginvoke предназначен для использования в FLOW, когда вы хотите отдельный поток выполнения для ветви Sync Invoke, чтобы он не блокировал другие потоки. ПОТОК - это кооперативная параллель - не совсем параллельная. Синхронный вызов все еще блокируется во время вызова. Узнайте больше здесь.
В любом случае, одним из решений вашей проблемы является создание нового композита, который вызывает Async, который использует адаптер DB для выполнения хранимого процесса. Итак, ваша новая служба вызывает другую службу как асинхронную, поэтому она не будет блокироваться - но служба, вызывающая адаптер db, блокирует, но на этом этапе ваш вызывающий объект свободен. Неплохо было бы обернуть вызовы адаптера БД в их собственный композит, чтобы отделить / изолировать истинную реализацию сервиса от интерфейса сервиса БД - что может привести к ошибкам.