将嵌入式tomcat 5迁移到tomcat 7

时间:2013-11-19 16:52:56

标签: tomcat

尝试将嵌入式Tomcat 5迁移到嵌入式Tomcat 7.在启动时获取NPE。

我扩展了Embedded类,并以正确的顺序执行所有建议的初始化。

NPE出现在这里:

Caused by: java.lang.NullPointerException
    at org.apache.catalina.core.ApplicationContext.populateSessionTrackingModes(ApplicationContext.java:1187)
    at org.apache.catalina.core.ApplicationContext.<init>(ApplicationContext.java:126)
    at org.apache.catalina.core.StandardContext.getServletContext(StandardContext.java:2344)
    at org.apache.catalina.core.StandardContext.postWorkDirectory(StandardContext.java:6283)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5251)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

以下是抛出异常的方法的tomcat 7源:

private void populateSessionTrackingModes() {
    // URL re-writing is always enabled by default
    defaultSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);
    supportedSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);

    if (context.getCookies()) {
        defaultSessionTrackingModes.add(SessionTrackingMode.COOKIE);
        supportedSessionTrackingModes.add(SessionTrackingMode.COOKIE);
    }

    // SSL not enabled by default as it can only used on its own
    // Context > Host > Engine > Service
    Service s = ((Engine) context.getParent().getParent()).getService();
    Connector[] connectors = s.findConnectors();
    // Need at least one SSL enabled connector to use the SSL session ID.
    for (Connector connector : connectors) {
        if (Boolean.TRUE.equals(connector.getAttribute("SSLEnabled"))) {
            supportedSessionTrackingModes.add(SessionTrackingMode.SSL);
            break;
        }
    }
}

问题出现在这里:

Service s = ((Engine) context.getParent().getParent()).getService();

服务变量s为空。看来需要在Engine类上设置服务对象。

这是Tomcat 7中的新功能吗? 不确定需要配置什么来避免服务的这个空值。

1 个答案:

答案 0 :(得分:0)

服务是将引擎与一个或多个连接器链接的对象。创建org.apache.catalina.core.StandardService的默认实例并使用它。使用addConnector()向其添加连接器,并使用addContainer()将引擎添加到其中。