我有一个通过包jar(ServletA)提供的servlet,它取决于ServletB从数据库加载的参数。我遇到的问题是Jboss似乎为servlet的初始化产生了单独的线程。在日志中我可以看到load-on-startup定义的顺序是正确的,看起来ServletB读取数据库属性所花费的时间导致ServletA失败,因为它的初始化启动并且因为ServletB而无法获取属性仍然很忙。
ServletA是一个单例,它的初始化运行一次,如果失败,则无法恢复。我无法控制ServletA,因此无法改变此行为。
web.xml或Jboss(wildfly)中是否有设置来定义servlet启动依赖?我试图让ServletA在初始化之前等待ServletB的init()完成。
答案 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方法中等待创建该文件。