【问题标题】:jboss servlet startup dependanciesjboss servlet 启动依赖
【发布时间】:2017-05-30 23:53:15
【问题描述】:

我有一个通过包 jar (ServletA) 提供的 servlet,它依赖于 ServletB 从数据库加载的参数。我遇到的问题是 Jboss 似乎为 servlet 的初始化生成了单独的线程。虽然在日志中我可以看到由 load-on-startup 定义的顺序是正确的,但似乎 ServletB 读取数据库属性所花费的时间导致 ServletA 失败,因为它的初始化启动并且自 ServletB 以来无法获取属性还在忙。

ServletA 是一个单例,它的初始化运行一次,如果失败,则无法恢复。我无法控制 ServletA,因此无法更改此行为。

在 web.xml 或 Jboss (wildfly) 中是否有定义 servlet 启动依赖项的设置?我试图找到一种方法让 ServletA 在初始化之前等待 ServletB 的 init() 完成。

【问题讨论】:

    标签: servlets jboss wildfly


    【解决方案1】:

    在 web.xml 或 Jboss (wildfly) 中是否有定义 servlet 启动依赖项的设置?我试图找到一种方法让 ServletA 在初始化之前等待 ServletB 的 init() 完成。

    是的,您可以在web.xml 中使用参数load-on-startup 执行此操作。它表示加载servlet的顺序,编号较大的servlet在编号较小的servlet之后加载。

    <servlet>
        <servlet-name>ServletA</servlet-name>
        <display-name>ServletA</display-name>
        <servlet-class>com.stackoverflow.ServletA</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
     <servlet>
        <servlet-name>ServletB</servlet-name>
        <display-name>ServletB</display-name>
        <servlet-class>com.stackoverflow.ServletB</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    

    但是,根据servlet specs 的第 10.12 节,load-on-startup 仅确定在每个 servlet 上调用 init() 方法的顺序。它保证在调用第一个 servlet init 之后调用下一个 servlet init。但它不保证下一个 init 会在第一个 init 的完成之后被调用。

    为实现您的目标,您可以在 servletB 的 init 方法末尾设置一个标志,然后在 servletA 的 init 方法中等待该标志被设置。例如。在 servletB 的 init 方法末尾的临时文件夹中写入一个 0 字节文件,然后在 servletA 的 init 方法中等待该文件被创建。

    【讨论】:

    • 我的启动时加载类似于您上面定义的内容。 servlet 的启动顺序是正确的。然而,虽然 ServletB 首先启动,但从数据库中读取属性需要一些时间。当它仍在读取时,ServletA 开始初始化并失败。
    • @Phuthib,根据servlet specs 的第 10.12 节,load-on-startup 仅确定在每个 servlet 上调用 init() 方法的顺序。它保证在调用第一个 init 之后调用下一个 servlet init。但它不保证在第一个 init 完成后会调用下一个 init。
    • 为了达到你的目的,你可以在 servletB 的 init 方法的末尾设置一个标志,然后在 servletA 的 init 方法中等待该标志被设置。
    • 感谢您的回复,毕竟解决方案是启动时加载。我的代码仍在 ServletB 中失败。
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2019-09-02
    • 2015-09-17
    • 1970-01-01
    • 2012-04-21
    • 2015-02-19
    相关资源
    最近更新 更多