barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

суббота, 14 декабря 2013 г.

WSO2 ESB: редеплой сервиса, использующего VFS TransportReceiver

Проблема

Сделал редеплой прокси-сервиса (нажатием на соотв. кнопку в веб-консоли или просто изменив xml-ку конфигурации прокси и сохранив изменения, не суть), использующегося VFS в качестве входящего транспорта. После этого в логах стали наблюдаться ошибки вида:
2013-10-16 21:10:01,598 [-] [evfs-Worker-18] DEBUG VFSTransportListener Error receiving message
org.apache.axis2.AxisFault: The <Proxy_service_name> service, which is not valid, does not belong to the <Proxy_service_name> service group.
at org.apache.axis2.context.ServiceGroupContext.getServiceContext(ServiceGroupContext.java:143)
...
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:168)
at org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:328)
at org.apache.synapse.transport.vfs.VFSTransportListener.processFile(VFSTransportListener.java:498)
...
2013-10-16 21:10:01,613 [-] [evfs-Worker-18] ERROR VFSTransportListener Error processing File URI : file:////10.xxx.yyy.zzz/some/path/file12345.pdf
org.apache.axis2.AxisFault: Transport out has not been set
at org.apache.axis2.engine.AxisEngine.sendFault(AxisEngine.java:522)
at org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:336)
at org.apache.synapse.transport.vfs.VFSTransportListenerExtendable.processFile(VFSTransportListener.java:498)
at ...
Причина

Причина здесь вероятнее всего в том, что в момент редеплоя прокси-сервиса его входящий транспорт находился в процессе обработки файлов, находящихся в его входящей директории, и после передеплоя сервиса не произошло прозрачного для транспорта переключения со старой версии прокси-сервиса на новую версию. Такая ситуация чревата чем, что все файлы, которые транспорт обработал после редеплоя прокси-сервиса будут обработаны как ошибочные (будут удалены / перемещены в соотв. директорию в зависимости от настроек прокси-сервиса).

Выводы

Чтобы безболезненно редеплоить прокси-сервис, использующий VFS-транспорт в качестве входящего, нужно либо чтобы во входящей директории не было файлов для обработки, либо, по крайней мере, чтобы транспорт находился в состоянии ожидания следующего момента просмотра входящей папки, а не в цикле ее просмотра.

Комментариев нет:

Отправить комментарий