Weblogic 12.1.3中未检测到WebApplicationInitializer

时间:2014-10-14 21:12:24

标签: java spring spring-mvc servlet-3.0 weblogic12c

我刚从weblogic 12.1.2升级 - > 12.1.3并且我遇到了使应用程序正常工作的问题。

我已经检测到问题出在哪里,我不确定是否存在配置错误的问题,或者它是否是weblogic 12.1.3中的错误(在12.1.2中它完美无缺)。

spring-web-3.2.1.SNAPSHOT中有一个类:

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {

    public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
        throws ServletException {

        List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>();

        if (webAppInitializerClasses != null) {
            for (Class<?> waiClass : webAppInitializerClasses) {
                // Be defensive: Some servlet containers provide us with invalid classes,
                // no matter what @HandlesTypes says...
                if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&
                    WebApplicationInitializer.class.isAssignableFrom(waiClass)) {
                    try {
                        initializers.add((WebApplicationInitializer) waiClass.newInstance());
                    } catch (Throwable ex) {
                        throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
                    }
                }
            }
        }

        if (initializers.isEmpty()) {
            servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
            return;
        }

        AnnotationAwareOrderComparator.sort(initializers);
        servletContext.log("Spring WebApplicationInitializers detected on classpath: " + initializers);

        for (WebApplicationInitializer initializer : initializers) {
            initializer.onStartup(servletContext);
        }
    }
}

我们可以看到,如果实现WebApplicationInitializer的类是抽象的,那么该类将被忽略,并且不会调用它的方法onStartup

在Web应用程序中,我有这个类:

@Order(1)
public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer

@Order(2)
public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer

SpringServletContainerInitializer接收这两个类,但它收到的是抽象类AbstractSecurityWebApplicationInitializerAbstractAnnotationConfigDispatcherServletInitializer。这就是应用程序未初始化的原因。似乎问题是weblogic在查找WebApplicationInitializer时扫描的类。在12.1.2中,相同的方法(和相同的应用程序)接收6个类,其中4个是抽象的(它们属于spring),其中2个是我自己的clases。

我曾考虑使用web.xml来避免这个问题,但我想解决它。有解决方案吗谢谢!

我不知道升级是否是个好主意。第一天,第一个问题。接下来几个月我能发现什么?

0 个答案:

没有答案