Отображение сообщения о состоянии в верхней части представлений Grails всякий раз, когда какая-либо служба отключалась
Я занимаюсь разработкой приложения Grails с несколькими сервисами и Quartz Jobs. В Grails Quartz Jobs я внедряю некоторые сервисы, которые отправляют запросы на сервер и выполняют некоторые операции в зависимости от результата, возвращаемого с сервера.
Теперь, иногда этот сервер выходит из строя по некоторым причинам, и служба, которая связывается с этим сервером, получает исключение connectionException. Поскольку все это происходит на заднем плане, и пользователь не знает об этом. Я хочу показать сообщение пользователю (независимо от того, на какой странице GSP в данный момент находится пользователь, когда сервер вышел из строя) в верхней части GSP, когда моя служба обнаруживает, что сервер не работает.
И это сообщение исчезнет, когда мой сервис начнет связь с сервером (когда сервер запущен). Насколько я знаю, здесь можно использовать FLASH, но это сохраняется в пределах одного запроса, но я хочу показать это сообщение, пока сервер не станет доступным.
Какие есть варианты для достижения этой цели в Grails? Какой будет лучший вариант?
Заранее спасибо:)
1 ответ
Создайте службу статуса, которая хранит свойство volatile stats, настройте его так, чтобы он отражал статус при его изменении, и используйте библиотеку тегов, чтобы прочитать статус и включить его в свой макет /GSP.
Вот очень быстрый пример того,
Первый Сервис:
// MyStatusService
package com.example
class MyStatusService {
boolean isServerDown = false
...
}
Тогда в вашем коде:
// From within your code, setting the status
def myStatusService // assumes you can inject it
...
myStatusService.isServerDown = true // or false depending on your code
...
Библиотека тегов:
// MyStatus TagLibrary
package com.example
class MyStatusTagLib {
def myStatusService
static namespace = "myStatus"
def checkStatus = { attrs ->
if (myStatusService.isServerDown) {
out << "Server is down message here."
}
}
}
Затем, наконец, в вашем GSP или даже в вашем макете:
<myStatus:checkStatus />
Надеюсь, это поможет.