Я думаю, что есть, вероятно, столько вариантов решения, сколько найдется людей, которые предложат одно, но вот один из них.
Я бы не открывал DAO до УДАЛЕННОГО доступа, я бы оставил это как ПАКЕТ (и доступ к нему осуществлялся только некоторым бизнес-объектом в том же пакете). У меня также был бы какой-то фасад, стоящий перед этой партией, который обрабатывает удаленные вызовы, а также такие вещи, как проверка того, разрешено ли входящий вызов удаленно выполнять вызов. Вы не хотите, чтобы кто-то вставлял вещи в вашу базу данных! Фасад должен иметь дело с аутентичной стороной вещей, тогда, если все ОК передают вызов бизнес-объекту, который затем использует DAO для доступа к БД.
У меня не было бы того, что можно попробовать / поймать в вашем DAO. Лучший способ сообщить вызывающему коду о том, что что-то пошло не так, - создать исключение. Затем вызывающий код может решить, что с ним делать (нужно ли каким-то образом с ним справиться, игнорировать его или повторно направить его на обработку ошибок по всему миру).