jboss servlet启动依赖

时间:2017-01-16 07:27:02

标签: servlets jboss wildfly

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

是的,您可以使用参数val = new MyClass(); val.A = 1; val.B = "Hi"; val.SomeMethod(); val.AnotherMethod(); web.xml中执行此操作。它表示加载servlet的顺序,具有较大数字的servlet在具有较小数字的servlet之后加载。

load-on-startup

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

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