Отображение сообщения о состоянии в верхней части представлений 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 />

Надеюсь, это поможет.

Другие вопросы по тегам