我刚从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
接收这两个类,但它收到的是抽象类AbstractSecurityWebApplicationInitializer
和AbstractAnnotationConfigDispatcherServletInitializer
。这就是应用程序未初始化的原因。似乎问题是weblogic在查找WebApplicationInitializer
时扫描的类。在12.1.2中,相同的方法(和相同的应用程序)接收6个类,其中4个是抽象的(它们属于spring),其中2个是我自己的clases。
我曾考虑使用web.xml来避免这个问题,但我想解决它。有解决方案吗谢谢!
我不知道升级是否是个好主意。第一天,第一个问题。接下来几个月我能发现什么?