Постоянная проблема конфигурации сеанса в Tomcat

Я пытаюсь настроить Tomcat 8.5.9 для загрузки в режиме постоянного сеанса и сохранения сеанса в MySql. Для этого я следовал процедуре, описанной в документации Tomcat :

  1. Создайте таблицу tomcat_sessions, как указано в документации:
create table tomcat_sessions (
  session_id     varchar(100) not null primary key,
  valid_session  char(1) not null,
  max_inactive   int not null,
  last_access    bigint not null,
  app_name       varchar(255),
  session_data   mediumblob,
  KEY kapp_name(app_name)
);
  1. Во-вторых, я ввел библиотеку mysql-connector-java-5.1.40-bin.jar в classpath tomcat.
  2. Я наконец изменил файл context.xml следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    
        <Manager className="org.apache.catalina.session.PersistentManager"     
        debug="0"
        maxActiveSessions="-1"
        maxIdleBackup="-1"
        minIdleSwap="-1"
        maxIdleSwap="-1"
        processExpiresFrequency="1"
        saveOnRestart='true'
        >
    
            <Store className="org.apache.catalina.session.JDBCStore"        
                connectionName="root"
                connectionPassword="password"
                connectionURL="jdbc:mysql://localhost:3306/tomcat"
                driverName="com.mysql.jdbc.Driver"
                />
    </Manager>
    </Context>
    

Когда я запускаю Tomcat, возникает следующая ошибка:

16-Jan-2017 11:55:04.597 GRAVE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal The session manager failed to start
 org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.session.PersistentManager[/manager]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5206)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1107)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1841)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.session.JDBCStore[org.apache.catalina.session.PersistentManager[/manager]]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.session.PersistentManagerBase.startInternal(PersistentManagerBase.java:847)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 12 more
Caused by: java.lang.NullPointerException
    at org.apache.catalina.session.JDBCStore.open(JDBCStore.java:906)
    at org.apache.catalina.session.JDBCStore.getConnection(JDBCStore.java:839)
    at org.apache.catalina.session.JDBCStore.startInternal(JDBCStore.java:1001)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 14 more
0
задан 16.01.2017, 14:09
0 ответов

Согласно исходному коду, линии 906, где у тебя есть NullPointer, - та, которая setea autocommit:

   // Open a new connection
    Properties props = new Properties();
    if (connectionName != null)
        props.put("user", connectionName);
    if (connectionPassword != null)
        props.put("password", connectionPassword);
    dbConnection = driver.connect(connectionURL, props);
    dbConnection.setAutoCommit(true);
    return dbConnection;

Следовательно, кажется, что Драйвер это находит хорошо, но не может создавать связь. Убедись в том, что url связи, порт, пользователь и passwd правильны.

0
ответ дан 03.12.2019, 17:40