Проверка в OSGI, если пакет все еще работает нормально
В настоящее время я делаю сторожевой таймер, чтобы проверить, все ли пакеты в конвейере по-прежнему функционируют должным образом. (Это будет в распределенной среде, поэтому сбой может быть сбой сети, сбой программного обеспечения, сбой одного из серверов, ...)
Поскольку пакет может быть связан с N количеством сервисов, N произвольным, проверка должна выполняться рекурсивно с использованием следующей методологии:
START at the first step in the pipeline
Use getServicesInUse to get the services references of the next step
use getBundle() on the gathered ServiceRerefence objects
REPEAT until we arrive at the bundle we want to stop at
Таким образом, теперь я могу получить все объекты связки конвейера (я полагаю), чтобы проверить, правильно ли они работают (или просто они все еще достижимы).
Bundle b = ...
if(b.getState() == Bundle.ACTIVE) ...;
сделает трюк? Конечно, это также связано с необходимыми предложениями catch catch для обнаружения аппаратного / сетевого сбоя.
1 ответ
Можете ли вы уточнить, что вы подразумеваете под "все связки в конвейере"?
Вы правы в том, что пакет может предоставлять и использовать ноль или более сервисов, но если бы я создал сторожевой таймер для системы OSGi, я бы использовал один из двух подходов:
- Если узлы в вашей распределенной системе предоставляют в основном REST-сервисы, я бы написал отдельную "сторожевую" программу, которая отслеживает эти REST-сервисы, чтобы увидеть, продолжают ли они отвечать (на любом из узлов в моей распределенной системе). Вы можете либо сделать "настоящие" звонки, либо просто запросить HEAD и посмотреть, получите ли вы ответ.
- Если узлы в вашей распределенной системе предоставляют в основном сервисы OSGi, я написал бы сторожевой пакет и развернул его на каждом узле. Затем я бы добавил конечную точку REST в мой сторожевой таймер, чтобы позволить мне контролировать его удаленно (другой сторожевой таймер, аналогично подходу № 1).
Проверка активного состояния пакета ничего вам не скажет. Пакеты останутся активными после запуска, но предоставляемые ими сервисы могут не отвечать.