Как использовать последнюю версию платформы Vaadin4Spring EventBus с Maven?

У меня есть проект Spring Boot с Vaadin, я хотел бы интегрировать платформу Vaadin4Spring EventBus:

https://github.com/peholmst/vaadin4spring/tree/master/spring-vaadin-eventbus

Автор говорит:

Обратите внимание, что API Event Bus изменился в версии 0.0.5.

Однако, если я добавлю зависимость Maven в свой pom.xml:

    ...
    <dependency>
        <groupId>org.vaadin.spring</groupId>
        <artifactId>spring-vaadin-eventbus</artifactId>
        <version>LATEST</version>
    </dependency>
    ...

Maven загружает версию 0.0.4.RELEASE. Я попытался явно установить следующие версии:

    ...
    <dependency>
        <groupId>org.vaadin.spring</groupId>
        <artifactId>spring-vaadin-eventbus</artifactId>
        <version>0.0.5</version>
    </dependency>
    ...

    ...
    <dependency>
        <groupId>org.vaadin.spring</groupId>
        <artifactId>spring-vaadin-eventbus</artifactId>
        <version>0.0.5.RELEASE</version>
    </dependency>
    ...

    ...
    <dependency>
        <groupId>org.vaadin.spring</groupId>
        <artifactId>spring-vaadin-eventbus</artifactId>
        <version>0.0.5-SNAPSHOT</version>
    </dependency>
    ...

Я также попытался установить весь аддон Spring4Vaadin в качестве зависимости:

<dependency>
  <groupId>org.vaadin.spring</groupId>
  <artifactId>spring-boot-vaadin</artifactId>
  <version>LATEST</version>
</dependency>
...


<dependency>
  <groupId>org.vaadin.spring</groupId>
  <artifactId>spring-boot-vaadin</artifactId>
  <version>0.0.5</version>
</dependency>
...

<dependency>
  <groupId>org.vaadin.spring</groupId>
  <artifactId>spring-boot-vaadin</artifactId>
  <version>0.0.5-SNAPSHOT</version>
</dependency>    
...

<dependency>
  <groupId>org.vaadin.spring</groupId>
  <artifactId>spring-boot-vaadin</artifactId>
  <version>0.0.5.RELEASE</version>
</dependency>

Но ни один из них не работал.

В принципе, я не могу сделать это:

 @Autowired
 EventBus.ApplicationEventBUs appEventBus;

 @Autowired
 EventBus.UIEventBus UIEventBus;
 ...

Потому что, как сказано в README.md на GitHub:

Обратите внимание, что API шины событий изменился в версии 0.0.5. С этого момента вы должны объявить, какую шину событий вводить, используя определенный интерфейс (ранее все было EventBus, и вы использовали аннотацию, чтобы указать, какую шину получить). Причинами этого изменения были

Таким образом, в версии 0.0.4.RELEASE (которую Maven считает ПОСЛЕДНЕЙ) внутренние интерфейсы ApplicationEventBus и UIEventBus не определены.

Итак, как я могу использовать настоящую последнюю версию аддона?


person tonix    schedule 28.02.2015    source источник
comment
версия 0.0.4.RELEASE — самая новая на Центральный Мейвен.   -  person khmarbaise    schedule 28.02.2015
comment
@khmarbaise Как мне тогда использовать внутренние интерфейсы? Скачать исходники и скомпилировать?   -  person tonix    schedule 01.03.2015
comment
Похоже, что это единственная возможность, потому что сопровождающие еще не опубликовали новую версию в Central... возможно, давая подсказку о проблеме в проекте, это может ускорить процесс...   -  person khmarbaise    schedule 01.03.2015
comment
Да, я действительно хотел, чтобы вы сказали, теперь версия 0.0.5-SNAPSHOT является той, с которой нужно работать.   -  person tonix    schedule 01.03.2015


Ответы (1)


Ввод ответа, который я разместил на форумах vaadin, а также здесь:

Аддоны Vaadin имеют хорошую реализацию шины событий. Проверьте https://github.com/peholmst/vaadin4spring/tree/master/samples/eventbus-sample

Я сделал это, используя приложение Vaadin с поддержкой Spring (НЕ spring boot), но, я думаю, оно может работать и без Spring. Короткие шаги: 1. Добавьте следующую зависимость

<dependency>
    <groupId>org.vaadin.spring.addons</groupId>
    <artifactId>vaadin-spring-addon-eventbus</artifactId>
    <version>0.0.7.RELEASE</version>
</dependency>
  1. Импортируйте EventBusConfiguration.class в вашу конфигурацию Spring (может не потребоваться, если Spring Boot используется с @EnableAutoConfiguration)

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

    
    @Autowired
    private EventBus.UIEventBus uiEventBus;
    

  3. Опубликовать событие по мере необходимости, например:

    
    uiEventBus.publish(this, new RefreshMainViewEvent(this, "Usage details updated"));
     

  4. Подпишитесь на событие в другом классе компонентов

    
    @PostConstruct
    public void afterPropertiesSet() {
    uiEventBus.subscribe(this, false); }

  5. Добавьте действие, которое должно быть выполнено по событию (здесь в том же классе):

    
    @EventBusListenerMethod
    public void closeSymmUsageWindow(RefreshMainViewEvent event) {
        logger.debug("Received {}", event);
        //blah
    }
    

person Deepak    schedule 29.12.2016