У нас есть веб-сервис Java SOAP, который вызывается клиентским приложением. Службе необходимо разобрать сообщение -> проверить его и отправить подтверждение клиенту. С другой стороны, должен быть вызван другой компонент, который будет выполнять транзакцию базы данных. Я думаю использовать интерфейс java.lang.Runnable
как часть компонента обработки, который будет выполнять транзакцию БД асинхронно. Тем временем подтверждение было бы отправлено клиенту. Ниже приведен тестовый код, который я написал. Можете ли вы сказать, будут ли возникать какие-либо проблемы в случае появления нескольких запросов от клиента или следует добавить синхронизацию в блок кода для вызова БД.Асинхронный вызов компонента из Java webservice
public class MessageProcessing implements Runnable{
private String inputMsg;
public MessageProcessing(String sampleMessage) {
this.inputMsg = sampleMessage;
}
public void sendToSocket() {
performDBCall();
}
private void performDBCall() {
//TODO Code for DB Call
}
@Override
public void run() {
System.out.println("Inside Child Thread");
sendToSocket();
}
Каждый запрос от клиента запустит новый поток MessageProcessing? Теперь он не является потокобезопасным, но синхронизация 'performDBCall()' сама по себе не будет иметь никакого значения здесь, вам нужно подумать и иметь надлежащий объект блокировки для блокировки. До этого вам нужно решить, какие операции с БД вы делаете, и действительно ли они должны быть синхронизированы. –
@RP да каждый запрос от клиента запустит новый поток MessageProcessing. – Saurav
Затем, какие операции с БД вы делаете? Если они чувствительны к потоку, вам необходимо иметь отдельный совместно используемый объект монитора и синхронизировать его с этим объектом. Следующая ссылка предоставит вам некоторую идею. Http://www.tutorialspoint.com/java/java_thread_synchronization.htm –