【问题标题】:Set VaadinServlet ProductonMode when declared as Bean声明为 Bean 时设置 VaadinServlet ProductonMode
【发布时间】:2017-06-15 15:11:12
【问题描述】:

我们在更大的 OSGI (karaf 4) 应用程序中使用 Vaadin7,并使用蓝图声明 VaadinServlet:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint default-activation="eager" xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<!-- Vaadin servlet serving static Vaadin resources -->
<service interface="javax.servlet.Servlet">
  <service-properties>
    <entry key="servlet-name" value="Vaadin Resources" />
    <entry key="alias" value="/VAADIN-ui" />
    <entry key="contextId" value="app-vaadin" />
  </service-properties>
  <bean class="com.vaadin.server.VaadinServlet" />
</service>

默认情况下,Vaadin 在调试模式下运行,并且需要将 ProductionMode 设置为 true。这可以作为上下文参数完成,但应用程序不使用 web.xml 文件。我尝试将其设置为 bean 的属性,但无法识别。

【问题讨论】:

    标签: java vaadin7 karaf blueprint-osgi


    【解决方案1】:

    您可以扩展VaadinServlet 并使用VaadinServletConfiguration 注释。

    来自文档:

    配置 VaadinServlet 子类的注解。为一个 具有此注解的 VaadinServlet 类,定义的值为 在初始化期间读取并且可以使用 DeploymentConfiguration.getApplicationOrSystemProperty(字符串,字符串) 以及来自 DeploymentConfiguration 中的特定方法。在里面 web.xml 或 @WebServlet 注释中定义的参数采用 优先于此注释中定义的值。

    你可以这样使用它:

    @VaadinServletConfiguration(productionMode = false)
    public class MyAppServlet extends VaadinServlet {
    }
    

    【讨论】:

    • 不确定如何处理,因为没有 JAVA 代码声明 VaadinServlet,它仅在蓝图 XML 中引用。事实上,在不同的包中声明了几个 servlet。上面一个只是处理资源,另一个是启动 UIProvider 类。
    • 您正在使用默认的VaadinServlet 实现(com.vaadin.server.VaadinServlet),这就是为什么它不在您的 Java 代码中。您可以创建自己的 servlet 类扩展默认类(如上例所示,它可能为空),然后在您的蓝图 xml 中设置它。阅读offical docs 可能会帮助您更好地理解它。
    • 谢谢,我确实阅读了很多文档,但设法没有找到该页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2020-04-26
    • 2012-11-27
    • 2013-02-26
    • 1970-01-01
    • 2015-07-14
    • 2011-01-05
    相关资源
    最近更新 更多