У меня есть собственный класс композитора/контроллера, который расширяет GenericForwardComposer. Внутри этого класса у меня есть несколько методов, которые используются для инициализации компонентов пользовательского интерфейса данными. Это очень длительная операция, и для ее завершения требуется время. Из-за проблем с производительностью я пытаюсь асинхронно загрузить эти данные с помощью очередей событий. Таким образом, он не будет блокировать доступ пользователей к другим функциям, пока процесс работает в фоновом режиме.
В моем пользовательском классе есть метод инициализации, который запускает обработку. Этот метод вызывает несколько других методов, которые выполняют большую часть работы.
Я думал, что могу использовать очереди событий как таковые:
public class MyWidgetController extends GenericForwardComposer
{
public void init(final Component comp)
{
//other method logic ...
EventQueue queue = EventQueues.lookup("myQueue", EventQueues.SESSION, true);
queue.subscribe(this); //not sure
queue.publish(new Event("onInitPrimaryLoad", componentA, ""));
queue.publish(new Event("onInitSecondaryLoad", componentB, ""));
}
@ViewEvent(componentID = "componentA", eventName = "onInitPrimaryLoad")
public void onInitPrimary( final Event event){ //logic }
@ViewEvent(componentID = "componentB", eventName = "onInitSecondaryLoad")
public void onInitSecondary( final Event event){ //logic }
//other class methods…
}
Не уверен, что все это правильно. На самом деле не нужен метод обратного вызова, поскольку сами события (публикация) загружают компоненты пользовательского интерфейса данными. Приложение работает без проблем, но я не уверен, правильно ли я это реализую.
Любые советы или исправления приветствуются