Vaadin推送:推送不可用

时间:2018-02-20 08:04:49

标签: push vaadin

我有一个Maven项目,我在pom.xml中添加了vaadin-push作为依赖项。

第一个问题是在MainUI类中,当我添加注释typeof(Resources).GetMethod("LoadAll", System.Reflection.BindingFlags.Static, new Type[] { typeof(System.String),typeof(System.Type)}, null); 时,它无法识别@Push(PushMode.MANUAL),所以我被PushMode困住了。当我添加它时,我在访问UI时收到错误消息:

@Push

我尝试按照vaadin website on push上的说明操作,所以我添加了一个web.xml(之前我没有)。我不确定它是否被使用。我更愿意仅通过注释来配置它。

{"timestamp":1519112562626,"status":500,"error":"Internal Server Error","exception":"com.vaadin.server.ServiceException","message":"java.lang.IllegalStateException: Push is not available. See previous log messages for more information.","path":"/bp/list"}

我真正希望实现的是在Rest请求上更新UI,我认为Rest部分已经与Push分开了:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
  id="WebApp_ID" version="3.0"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <servlet>
    <servlet-name>Business Process UI</servlet-name>
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>

    <init-param>
        <param-name>UI</param-name>
        <param-value>com.oursys.bpspkpibpcheck.view.MainUI</param-value>
    </init-param>

    <!-- Enable server push -->
    <init-param>
      <param-name>pushmode</param-name>
      <param-value>automatic</param-value>
    </init-param>
    <async-supported>true</async-supported>
  </servlet>
</web-app>

的pom.xml。我删除了vaadin-push,因为它告诉我我正在覆盖自动配置的那个。

public class UILister {

    private static HashMap<UUID,MainUI> uiByUuid = new HashMap<UUID,MainUI>();

    public static void closeUIConnectorFrame(UUID uuid) {
        MainUI ui = uiByUuid.get(uuid);
        if(ui != null) {
            ui.access(new Runnable() {
                @Override
                public void run() {
                    ui.closeConnectorFrame();
                    ui.push();
                }}
            );
        }
    }

    public static void addUI(UUID uuid, MainUI mainUI) {
        uiByUuid.put(uuid, mainUI);
    }
}

1 个答案:

答案 0 :(得分:1)

在你的pom中,添加

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-push</artifactId>
    </dependency>

您不需要在此处指定<version>,因为vaadin-bom(物料清单)的版本是托管,它们为每个版本声明了正确的版本工件(这样可以更容易避免与同一框架的不同版本存在冲突的依赖关系),但导入BOM并不能自行添加依赖项。

       <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-bom</artifactId>
            <version>${vaadin.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
  

我删除了vaadin-push,因为它告诉我我正在覆盖自动配置的那个。

自动配置的 是指BOM的托管版本。例如,当使用vaadin-push标记向<version>添加依赖项时,Eclipse会发出以下警告:

  

覆盖vaadin-push的托管版本8.1.1