首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制部署web应用程序在Tomcat上失败

强制部署web应用程序在Tomcat上失败
EN

Stack Overflow用户
提问于 2022-07-22 07:36:25
回答 1查看 114关注 0票数 3

我们正在研究将一些web JSF应用程序从Payara 5迁移到Tomcat 9 (TomEE 8)的可能性。我们使用Java 11和Java 7/8,我们的应用程序使用RMI连接到后端服务器。目前,在Payara 5中,当连接我们到后端服务器的代码失败(由于服务器不可用或web.xml中定义的凭据无效而引发异常)时,部署失败。

请参阅这段代码:

代码语言:javascript
复制
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,我们注意到,通过检查日志或尝试前端并获取错误,后端是不正常的。参见下面的图片,其中NullPointerException是由connectToBackendServer()方法抛出的。

我们充分意识到这不是最好的方法,因为后端在成功部署之后可能会失败,但至少我们正在讨论来自web.xml的配置错误的情况。

我们能用Tomcat 9(TomEE 8)实现类似的功能吗?

提前谢谢大家!

。。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 08:17:41

将逻辑移动到ServletContextListener,并从contextInitialized()抛出运行时异常。在许多服务器上,这将导致部署失败,对应用程序的任何请求都将返回error 500。不过,规范不需要这种精确的行为,因此服务器之间的结果略有不同。

这是一个使用失败部署的ServletContextListener的示例实现:

代码语言:javascript
复制
package com.example;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;

@WebListener
public class ExampleServletContextListener implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent e) {
        try {
            callThatFailsAndThrowsAnException();

            catch (Exception e) {
                throw new UnavailableException("Something went very wrong - I'm bailing out.");
            }
    }

    @Override
    public void contextDestroyed(ServletContextEvent e) {
        /* Application shutdown */
    }
}

@WebListener向容器注册上下文侦听器。如果您使用的是JakartaEE/JavaEE的旧版本,并且注释不可用,则可以在web.xml中注册上下文侦听器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73076742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档