Можно ли использовать SpringSession (версия 2.0.2 или новее) с Spring 3.2.10? - PullRequest
0 голосов
/ 25 февраля 2020

У нас есть старое унаследованное приложение Spring: Spring 3.2.10, Spring Security 3.2.10. Теперь нам нужно использовать Spring Session с ним. Но когда мы добавляем Spring Session в проект, во время развертывания появляется следующее исключение:

2020-02-25 15:37:45,000 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 844) MSC000001: Failed to start service jboss.deployment.subunit."application.ear"."server.war".undertow-deployment: org.jboss.msc.service.StartException in service jboss.deployment.subunit."application.ear"."server.war".undertow-deployment: java.lang.NoClassDefFoundError: org/springframework/beans/factory/ObjectProvider
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
                at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
                at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
                at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
                at java.lang.Thread.run(Thread.java:748)
                at org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/factory/ObjectProvider
                at java.lang.Class.getDeclaredMethods0(Native Method)
                at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
                at java.lang.Class.getDeclaredMethods(Class.java:1975)
                at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:183)
                at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:220)
                at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:164)
                at org.springframework.context.annotation.ConfigurationClassParser.processImport(ConfigurationClassParser.java:391)
                at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:205)
                at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:164)
                at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:130)
                at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:287)
                at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:225)
                at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630)
                at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)
                at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
                at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
                at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
                at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187)
                at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:216)
                at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:185)
                at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
                at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
                at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)
                at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:250)
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96)
                at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78)
                ... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.ObjectProvider from [Module "deployment.navigator-DEV-SNAPSHOT.ear.server-DEV-SNAPSHOT.war" from Service Module Loader]
                at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
                at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
                at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
                at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
                ... 38 more

Причина этого исключения заключается в том, что ObjectProvidear появился в Spring только начиная с версии 4.3. Но по многим причинам мы не можем обновить версию Spring прямо сейчас. Можно ли как-то использовать Spring Session с Spring 3.2?

Вот фрагмент pom. xml:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-core</artifactId>
    <version>2.1.8.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-jdbc</artifactId>
    <version>2.1.8.RELEASE</version>
</dependency>

А вот мой java config:

@Configuration
@EnableJdbcHttpSession
public class SessionConfig {

    @Autowired
    DataSource dataSource;

    @Bean
    public DataSourceTransactionManager dataSourceTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    public DefaultCookieSerializer cookieSerializer() {
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        defaultCookieSerializer.setCookieName("JSESSIONID");
        return defaultCookieSerializer;
    }

    @SuppressWarnings("unused")
    private static class SessionInitializer extends AbstractHttpSessionApplicationInitializer {
        //
    }
}
...