我们正在研究将一些Web JSF应用程序从Payara 5迁移到Tomcat 9的可能性(TomEE 8)。我们使用Java 11和Java EE 7/8。我们的应用程序使用RMI连接到后端服务器。目前,在Payara 5中,当连接到后端服务器的代码失败时(由于服务器不可用或web.xml中定义的凭据无效而引发异常),则部署失败。
看这段代码:
public class MainServlet extends HttpServlet {
//constructor, variables etc.
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
//read configurations from web.xml
try {
connectToBackendServer();
catch (Exception e) {
throw new UnavailableException("Cannot connect to Backend Server");
}
}
//other methods
}
上面的代码使得部署在Payara 5上失败,但是Tomcat 9允许部署。使用Tomcat,我们通过检查日志或者尝试前端并获得错误来注意后端不正常。请参见下图,其中我们的 connectToBackendServer() 方法抛出了NullPointerException。
我们完全知道这不是最好的方法,因为在成功部署之后,后端可能会失败,但至少我们涵盖了来自 web.xml 的配置错误的情况。
我们能否使用Tomcat 9(TomEE 8)实现类似的功能?
提前感谢大家!
..
1条答案
按热度按时间k75qkfdt1#
将您的逻辑移到
ServletContextListener
,并从contextInitialized()
抛出运行时异常。在许多服务器上,这将导致部署失败,并且对应用程序的任何请求都将返回error 500
。不过规范并不要求这种行为,因此结果在服务器之间略有不同。这是一个使用
ServletContextListener
的示例实现,该实现的部署失败:@WebListener
向容器注册上下文侦听器。如果您使用的是旧版本的JakartaEE/JavaEE并且注解不可用,则可以改为在web.xml
中注册上下文侦听器。