You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Miguel Vidal <ri...@gmail.com> on 2024/02/08 20:49:46 UTC

Persistent Manager Implementation Question

 demo4.zip
<https://drive.google.com/file/d/1XOUHhw59Djk2XmdFEmkBsusnHf5_yNE7/view?usp=drive_web>
Hello,

Specifications
Windows 10
Tomcat 8.5
this is a configuration question .
the tomcat specification that works :
https://tomcat.apache.org/tomcat-8.0-doc/config/manager.html

Im trying to configure correctly in 2 different applications : Persistent
Manager Implementation using a mysqldb as a datasource.

In one of them that is a legacy project i have some dependencies as

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.framework.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.framework.version}</version>
</dependency>

and it is already doing the registry of the sessions in my bd.
but in the other app im using a spring boot with the same configuration.
I'm not able to see any registration of the sessions in my db. After the
deploy of my app in a tomcat server and hit any resource example
/test/resource im able to see the response correctly but i just want to
know if this  Persistent Manager Implementation is only for legacy apps? or
why is running in one and in the other is not.

this is my xml for both

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/nose" docBase="nose"
reloadable="true" useHttpOnly="true"  cookies="${uses.cookies}" >

        <Manager
className="org.apache.catalina.session.PersistentManager"
maxInactiveInterval="3600" debug="0" saveOnRestart="true"
maxActiveSessions="-1" minIdleSwap="1" maxIdleSwap="2"
maxIdleBackup="1" >
            <Store className="org.apache.catalina.session.JDBCStore"
                   dataSourceName="jdbc/tomcat"
                   driverName="com.mysql.jdbc.Driver"
                   sessionAppCol="app_name"
                   sessionDataCol="session_data"
                   sessionIdCol="session_id"
                   sessionLastAccessedCol="last_access"
                   sessionMaxInactiveCol="max_inactive"
                   sessionTable="tomcat_sessions"
                   sessionValidCol="valid_session"
            />
        </Manager>

    <Resource
            name="jdbc/tomcat"
            auth="Container"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            initialSize="${jdbc.pool.initialSize}"
            maxActive="${jdbc.pool.maxActive}"
            maxIdle="${jdbc.pool.maxIdle}"
            minIdle="${jdbc.pool.minIdle}"
            suspectTimeout="${jdbc.pool.suspectTimeout}"
            maxWait="${jdbc.pool.maxWait}"
            timeBetweenEvictionRunsMillis="${jdbc.pool.timeBetweenEvictionRunsMillis}"
            minEvictableIdleTimeMillis="${jdbc.pool.minEvictableIdleTimeMillis}"
            validationQuery="select 1"
            validationInterval="${jdbc.pool.validationInterval}"
            testOnBorrow="true"
            removeAbandoned="true"
            removeAbandonedTimeout="${jdbc.pool.removeAbandonedTimeout}"
            logAbandoned="true"
            jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
            testWhileIdle="true"
            username="${jdbc.username}"
            password="${jdbc.password}"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://${jdbc.host}:${jdbc.port}/tomcat?autoReconnect=true"/>
    jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
    org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
    org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"

these 2  are the guides where i learn the mayority how to do it
https://svn.apache.org/repos/asf/tomcat/archive/tc4.1.x/trunk/container/catalina/docs/JDBCStore-howto.html
https://gerrytan.wordpress.com/2013/08/21/tomcat-7-jdbc-session-persistence/

im going to attach the code that im trying to know why is not working.

Re: Persistent Manager Implementation Question

Posted by Miguel Vidal <ri...@gmail.com>.
hey one question regarding this topic I'm facing an issue where my old app
is doing a creation of multiple sessions but just one is the correct one or
at least is who contains the data and works fine. the others sessions that
are created contains random data that im not sure yet what information
contains. I saw that some dependencies as javamelody create or trigger the
creation of sessions.

<!-- <dependency>-->
<!-- <groupId>net.bull.javamelody</groupId>-->
<!-- <artifactId>javamelody-core</artifactId>-->
<!-- <version>1.91.0</version>-->
<!-- </dependency>-->

these are the blobs  that were encrypted :
¬í sr java.lang.Long;‹ä Ì #ß J valuexr java.lang.Number†¬• ”à‹  xp   Â*jƒsq
~     Â*¼£sr java.lang.Integer â ¤÷ ‡8 I valuexq ~   sr java.lang.BooleanÍ
r€Õœúî Z valuexp sq ~ sq ~     Â*¼¥t  E822F1886161BDE64BBAF294330834E0ppsq
~   t
testAttributet testValue

¬í sr java.lang.Long;‹ä Ì #ß J valuexr java.lang.Number†¬• ”à‹  xp    –âsq
~      –ãsr java.lang.Integer â ¤÷ ‡8 I valuexq ~   sr java.lang.BooleanÍ
r€Õœúî Z valuexp sq ~ sq ~      ™nt  07CED191BB6F3412FF9CF706F8A6CCD3ppsq
~   t org.apache.struts.action.LOCALEsr java.util.Locale~ø `œ0ùì I
hashcodeL countryt Ljava/lang/String;L
extensionsq ~ L languageq ~ L scriptq ~ L variantq ~ xpÿÿÿÿt USt  t enq ~ q
~ x

The first one is the new application where i was setting a testAttribute a
"testvalue"
but the other one is what im trying to figure out which process is doing
that.
I already turn on the logger with
org.apache.catalina.session.level = ALL
java.util.logging.ConsoleHandler.level=ALL

I can see how the sessions are being moved to stored but is there any way
to print what is saving? or to undo the encript i have a method where im
hitting the bd and getting the data

@GetMapping("/checkB")
public Map<String, String> checkB() {

    logger.log(Level.INFO, "Msg");

    Map<String, String> response = new HashMap<>();
    try {
        String sql = "SELECT session_data FROM tomcat_sessions WHERE
session_id='130B672C9914E98D4C11FAC8ECA621F8'"; // add your condition
here
        String serializedData = jdbcTemplate.queryForObject(sql, String.class);
        Object deserializedObject = deserializeData(serializedData);
        // Handle the deserialized object as needed

        response.put("status", "success");
        response.put("message", "Session data deserialized successfully.");
    } catch (Exception e) {
        e.printStackTrace();
        response.put("status", "error");
        response.put("message", "Failed to deserialize session data.");
    }
    return response;
}

private Object deserializeData(String serializedData) throws Exception {
    // Decode Base64 encoded serialized data
    byte[] serializedBytes = Base64.getDecoder().decode(serializedData);

    // Deserialize the data using ObjectInputStream
    ByteArrayInputStream bis = new ByteArrayInputStream(serializedBytes);
    ObjectInputStream ois = new ObjectInputStream(bis);
    Object deserializedObject = ois.readObject();

    // Close the input streams
    ois.close();
    bis.close();

    return deserializedObject;
}

but it fails on the function of the decode() . Is there any way to do that?

Any help is appreciate it Thanks!

El lun, 12 feb 2024 a las 9:52, Miguel Vidal (<ri...@gmail.com>)
escribió:

> Yes both are pointing the same configuration because i was doing some
> testing how it works all of this about session, i wasnt able to get it to
> work in a new application just using spring boot , but i just did it on
> friday. what i was missing it was use the session and not only a getter or
> endpoint without any use of the session.
>  it seems to get it to  work that you need to use the session, the
> configuration is already working
>         <Manager className="org.apache.catalina.session.PersistentManager"
> maxInactiveInterval="3600" debug="0" saveOnRestart="true"
> maxActiveSessions="-1" minIdleSwap="1" maxIdleSwap="2" maxIdleBackup="1" >
>             <Store className="org.apache.catalina.session.JDBCStore"
>                    dataSourceName="jdbc/tomcat"
>                    driverName="com.mysql.jdbc.Driver"
>                    sessionAppCol="app_name"
>                    sessionDataCol="session_data"
>                    sessionIdCol="session_id"
>                    sessionLastAccessedCol="last_access"
>                    sessionMaxInactiveCol="max_inactive"
>                    sessionTable="tomcat_sessions"
>                    sessionValidCol="valid_session"
>             />
>        </Manager>
>
>         <Resource
>             name="jdbc/tomcat"
>             auth="Container"
>             type="javax.sql.DataSource"
>             factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>             validationQuery="select 1"
>             testOnBorrow="true"
>             removeAbandoned="true"
>             logAbandoned="true"
>             jdbcInterceptors=
> "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
>             testWhileIdle="true"
>             username="root"
>             password="admin"
>             driverClassName="com.mysql.jdbc.Driver"
>             url="jdbc:mysql://localhost:3306/tomcat?autoReconnect=true"/>
>
> jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
>     org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
>     org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
> with this configuration my both application are working fine
>
> and also i created in the new application how to test it :
>
> @GetMapping("/create")
> public String testSession(HttpSession session) {
>     // Add a session attribute
>     session.setAttribute("testAttribute", "testValue");
>
>     // Get the session ID
>     String sessionId = session.getId();
>
>     return "Session created with ID: " + sessionId + " and attribute added";
> }
>
> @GetMapping("/getse")
> public String getSessionAttribute(HttpSession session) {
>     // Get the session ID
>
>     String sessionId = session.getId();
>
>     // Retrieve session attribute
>     String attributeValue = (String) session.getAttribute("testAttribute");
>
>     if (attributeValue != null) {
>         return "Session ID: " + sessionId + ", Attribute value: " + attributeValue;
>     } else {
>         return "Session ID: " + sessionId + ", Attribute not found";
>     }
> }
>
> and also added a filter to validate to create it correctly
>
> @Component
> public class SessionValidationFilter extends OncePerRequestFilter {
>
>     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
>         String requestURI = request.getRequestURI();
>
>         // Exclude the create-session endpoint from filtering
>         if (requestURI.equals("/demo/create")) {
>             filterChain.doFilter(request, response);
>             return;
>         }
>
>         HttpSession session = request.getSession(false); // Do not create session if it doesn't exist
>
>         if (session != null && session.getId() != null) {
>             // Session is valid, proceed with the request
>             filterChain.doFilter(request, response);
>         } else {
>             // Session is invalid, return an error response
>             response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Session expired or not authenticated");
>         }
>     }
> }
>
>
> El lun, 12 feb 2024 a las 9:18, Christopher Schultz (<
> chris@christopherschultz.net>) escribió:
>
>> Miguel,
>>
>> On 2/8/24 15:49, Miguel Vidal wrote:
>> > Im trying to configure correctly in 2 different applications :
>> Persistent
>> > Manager Implementation using a mysqldb as a datasource.
>>
>> Do you have both PersistentManager configurations pointing at the same
>> database and same set of tables? I think it will be rare to have session
>> id collisions, but configuring both applications to use the same storage
>> may cause very difficult to discover bugs under high usage.
>>
>> It will also increase lock contention needlessly across the two
>> applications.
>>
>> -chris
>>
>> > In one of them that is a legacy project i have some dependencies as
>> >
>> > <dependency>
>> >      <groupId>org.springframework</groupId>
>> >      <artifactId>spring-core</artifactId>
>> >      <version>${spring.framework.version}</version>
>> > </dependency>
>> >
>> > <dependency>
>> >      <groupId>org.springframework</groupId>
>> >      <artifactId>spring-context</artifactId>
>> >      <version>${spring.framework.version}</version>
>> > </dependency>
>> >
>> > and it is already doing the registry of the sessions in my bd.
>> > but in the other app im using a spring boot with the same configuration.
>> > I'm not able to see any registration of the sessions in my db. After the
>> > deploy of my app in a tomcat server and hit any resource example
>> > /test/resource im able to see the response correctly but i just want to
>> > know if this  Persistent Manager Implementation is only for legacy
>> apps? or
>> > why is running in one and in the other is not.
>> >
>> > this is my xml for both
>> >
>> > <?xml version="1.0" encoding="UTF-8"?>
>> > <Context antiJARLocking="true" path="/nose" docBase="nose"
>> > reloadable="true" useHttpOnly="true"  cookies="${uses.cookies}" >
>> >
>> >          <Manager
>> > className="org.apache.catalina.session.PersistentManager"
>> > maxInactiveInterval="3600" debug="0" saveOnRestart="true"
>> > maxActiveSessions="-1" minIdleSwap="1" maxIdleSwap="2"
>> > maxIdleBackup="1" >
>> >              <Store className="org.apache.catalina.session.JDBCStore"
>> >                     dataSourceName="jdbc/tomcat"
>> >                     driverName="com.mysql.jdbc.Driver"
>> >                     sessionAppCol="app_name"
>> >                     sessionDataCol="session_data"
>> >                     sessionIdCol="session_id"
>> >                     sessionLastAccessedCol="last_access"
>> >                     sessionMaxInactiveCol="max_inactive"
>> >                     sessionTable="tomcat_sessions"
>> >                     sessionValidCol="valid_session"
>> >              />
>> >          </Manager>
>> >
>> >      <Resource
>> >              name="jdbc/tomcat"
>> >              auth="Container"
>> >              type="javax.sql.DataSource"
>> >              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>> >              initialSize="${jdbc.pool.initialSize}"
>> >              maxActive="${jdbc.pool.maxActive}"
>> >              maxIdle="${jdbc.pool.maxIdle}"
>> >              minIdle="${jdbc.pool.minIdle}"
>> >              suspectTimeout="${jdbc.pool.suspectTimeout}"
>> >              maxWait="${jdbc.pool.maxWait}"
>> >
>> timeBetweenEvictionRunsMillis="${jdbc.pool.timeBetweenEvictionRunsMillis}"
>> >
>> minEvictableIdleTimeMillis="${jdbc.pool.minEvictableIdleTimeMillis}"
>> >              validationQuery="select 1"
>> >              validationInterval="${jdbc.pool.validationInterval}"
>> >              testOnBorrow="true"
>> >              removeAbandoned="true"
>> >
>> removeAbandonedTimeout="${jdbc.pool.removeAbandonedTimeout}"
>> >              logAbandoned="true"
>> >
>> jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
>> >              testWhileIdle="true"
>> >              username="${jdbc.username}"
>> >              password="${jdbc.password}"
>> >              driverClassName="com.mysql.jdbc.Driver"
>> >
>> url="jdbc:mysql://${jdbc.host}:${jdbc.port}/tomcat?autoReconnect=true"/>
>> >
>> jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
>> >      org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
>> >      org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
>> >
>> > these 2  are the guides where i learn the mayority how to do it
>> >
>> https://svn.apache.org/repos/asf/tomcat/archive/tc4.1.x/trunk/container/catalina/docs/JDBCStore-howto.html
>> >
>> https://gerrytan.wordpress.com/2013/08/21/tomcat-7-jdbc-session-persistence/
>> >
>> > im going to attach the code that im trying to know why is not working.
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>

Re: Persistent Manager Implementation Question

Posted by Miguel Vidal <ri...@gmail.com>.
Yes both are pointing the same configuration because i was doing some
testing how it works all of this about session, i wasnt able to get it to
work in a new application just using spring boot , but i just did it on
friday. what i was missing it was use the session and not only a getter or
endpoint without any use of the session.
 it seems to get it to  work that you need to use the session, the
configuration is already working
        <Manager className="org.apache.catalina.session.PersistentManager"
maxInactiveInterval="3600" debug="0" saveOnRestart="true" maxActiveSessions=
"-1" minIdleSwap="1" maxIdleSwap="2" maxIdleBackup="1" >
            <Store className="org.apache.catalina.session.JDBCStore"
                   dataSourceName="jdbc/tomcat"
                   driverName="com.mysql.jdbc.Driver"
                   sessionAppCol="app_name"
                   sessionDataCol="session_data"
                   sessionIdCol="session_id"
                   sessionLastAccessedCol="last_access"
                   sessionMaxInactiveCol="max_inactive"
                   sessionTable="tomcat_sessions"
                   sessionValidCol="valid_session"
            />
       </Manager>

        <Resource
            name="jdbc/tomcat"
            auth="Container"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            validationQuery="select 1"
            testOnBorrow="true"
            removeAbandoned="true"
            logAbandoned="true"
            jdbcInterceptors=
"org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
            testWhileIdle="true"
            username="root"
            password="admin"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/tomcat?autoReconnect=true"/>

jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
    org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
    org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
with this configuration my both application are working fine

and also i created in the new application how to test it :

@GetMapping("/create")
public String testSession(HttpSession session) {
    // Add a session attribute
    session.setAttribute("testAttribute", "testValue");

    // Get the session ID
    String sessionId = session.getId();

    return "Session created with ID: " + sessionId + " and attribute added";
}

@GetMapping("/getse")
public String getSessionAttribute(HttpSession session) {
    // Get the session ID

    String sessionId = session.getId();

    // Retrieve session attribute
    String attributeValue = (String) session.getAttribute("testAttribute");

    if (attributeValue != null) {
        return "Session ID: " + sessionId + ", Attribute value: " +
attributeValue;
    } else {
        return "Session ID: " + sessionId + ", Attribute not found";
    }
}

and also added a filter to validate to create it correctly

@Component
public class SessionValidationFilter extends OncePerRequestFilter {

    protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain) throws
ServletException, IOException {
        String requestURI = request.getRequestURI();

        // Exclude the create-session endpoint from filtering
        if (requestURI.equals("/demo/create")) {
            filterChain.doFilter(request, response);
            return;
        }

        HttpSession session = request.getSession(false); // Do not
create session if it doesn't exist

        if (session != null && session.getId() != null) {
            // Session is valid, proceed with the request
            filterChain.doFilter(request, response);
        } else {
            // Session is invalid, return an error response
            response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
"Session expired or not authenticated");
        }
    }
}


El lun, 12 feb 2024 a las 9:18, Christopher Schultz (<
chris@christopherschultz.net>) escribió:

> Miguel,
>
> On 2/8/24 15:49, Miguel Vidal wrote:
> > Im trying to configure correctly in 2 different applications : Persistent
> > Manager Implementation using a mysqldb as a datasource.
>
> Do you have both PersistentManager configurations pointing at the same
> database and same set of tables? I think it will be rare to have session
> id collisions, but configuring both applications to use the same storage
> may cause very difficult to discover bugs under high usage.
>
> It will also increase lock contention needlessly across the two
> applications.
>
> -chris
>
> > In one of them that is a legacy project i have some dependencies as
> >
> > <dependency>
> >      <groupId>org.springframework</groupId>
> >      <artifactId>spring-core</artifactId>
> >      <version>${spring.framework.version}</version>
> > </dependency>
> >
> > <dependency>
> >      <groupId>org.springframework</groupId>
> >      <artifactId>spring-context</artifactId>
> >      <version>${spring.framework.version}</version>
> > </dependency>
> >
> > and it is already doing the registry of the sessions in my bd.
> > but in the other app im using a spring boot with the same configuration.
> > I'm not able to see any registration of the sessions in my db. After the
> > deploy of my app in a tomcat server and hit any resource example
> > /test/resource im able to see the response correctly but i just want to
> > know if this  Persistent Manager Implementation is only for legacy apps?
> or
> > why is running in one and in the other is not.
> >
> > this is my xml for both
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <Context antiJARLocking="true" path="/nose" docBase="nose"
> > reloadable="true" useHttpOnly="true"  cookies="${uses.cookies}" >
> >
> >          <Manager
> > className="org.apache.catalina.session.PersistentManager"
> > maxInactiveInterval="3600" debug="0" saveOnRestart="true"
> > maxActiveSessions="-1" minIdleSwap="1" maxIdleSwap="2"
> > maxIdleBackup="1" >
> >              <Store className="org.apache.catalina.session.JDBCStore"
> >                     dataSourceName="jdbc/tomcat"
> >                     driverName="com.mysql.jdbc.Driver"
> >                     sessionAppCol="app_name"
> >                     sessionDataCol="session_data"
> >                     sessionIdCol="session_id"
> >                     sessionLastAccessedCol="last_access"
> >                     sessionMaxInactiveCol="max_inactive"
> >                     sessionTable="tomcat_sessions"
> >                     sessionValidCol="valid_session"
> >              />
> >          </Manager>
> >
> >      <Resource
> >              name="jdbc/tomcat"
> >              auth="Container"
> >              type="javax.sql.DataSource"
> >              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
> >              initialSize="${jdbc.pool.initialSize}"
> >              maxActive="${jdbc.pool.maxActive}"
> >              maxIdle="${jdbc.pool.maxIdle}"
> >              minIdle="${jdbc.pool.minIdle}"
> >              suspectTimeout="${jdbc.pool.suspectTimeout}"
> >              maxWait="${jdbc.pool.maxWait}"
> >
> timeBetweenEvictionRunsMillis="${jdbc.pool.timeBetweenEvictionRunsMillis}"
> >
> minEvictableIdleTimeMillis="${jdbc.pool.minEvictableIdleTimeMillis}"
> >              validationQuery="select 1"
> >              validationInterval="${jdbc.pool.validationInterval}"
> >              testOnBorrow="true"
> >              removeAbandoned="true"
> >              removeAbandonedTimeout="${jdbc.pool.removeAbandonedTimeout}"
> >              logAbandoned="true"
> >
> jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
> >              testWhileIdle="true"
> >              username="${jdbc.username}"
> >              password="${jdbc.password}"
> >              driverClassName="com.mysql.jdbc.Driver"
> >
> url="jdbc:mysql://${jdbc.host}:${jdbc.port}/tomcat?autoReconnect=true"/>
> >
> jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
> >      org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
> >      org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
> >
> > these 2  are the guides where i learn the mayority how to do it
> >
> https://svn.apache.org/repos/asf/tomcat/archive/tc4.1.x/trunk/container/catalina/docs/JDBCStore-howto.html
> >
> https://gerrytan.wordpress.com/2013/08/21/tomcat-7-jdbc-session-persistence/
> >
> > im going to attach the code that im trying to know why is not working.
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>

Re: Persistent Manager Implementation Question

Posted by Christopher Schultz <ch...@christopherschultz.net>.
Miguel,

On 2/8/24 15:49, Miguel Vidal wrote:
> Im trying to configure correctly in 2 different applications : Persistent
> Manager Implementation using a mysqldb as a datasource.

Do you have both PersistentManager configurations pointing at the same 
database and same set of tables? I think it will be rare to have session 
id collisions, but configuring both applications to use the same storage 
may cause very difficult to discover bugs under high usage.

It will also increase lock contention needlessly across the two 
applications.

-chris

> In one of them that is a legacy project i have some dependencies as
> 
> <dependency>
>      <groupId>org.springframework</groupId>
>      <artifactId>spring-core</artifactId>
>      <version>${spring.framework.version}</version>
> </dependency>
> 
> <dependency>
>      <groupId>org.springframework</groupId>
>      <artifactId>spring-context</artifactId>
>      <version>${spring.framework.version}</version>
> </dependency>
> 
> and it is already doing the registry of the sessions in my bd.
> but in the other app im using a spring boot with the same configuration.
> I'm not able to see any registration of the sessions in my db. After the
> deploy of my app in a tomcat server and hit any resource example
> /test/resource im able to see the response correctly but i just want to
> know if this  Persistent Manager Implementation is only for legacy apps? or
> why is running in one and in the other is not.
> 
> this is my xml for both
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <Context antiJARLocking="true" path="/nose" docBase="nose"
> reloadable="true" useHttpOnly="true"  cookies="${uses.cookies}" >
> 
>          <Manager
> className="org.apache.catalina.session.PersistentManager"
> maxInactiveInterval="3600" debug="0" saveOnRestart="true"
> maxActiveSessions="-1" minIdleSwap="1" maxIdleSwap="2"
> maxIdleBackup="1" >
>              <Store className="org.apache.catalina.session.JDBCStore"
>                     dataSourceName="jdbc/tomcat"
>                     driverName="com.mysql.jdbc.Driver"
>                     sessionAppCol="app_name"
>                     sessionDataCol="session_data"
>                     sessionIdCol="session_id"
>                     sessionLastAccessedCol="last_access"
>                     sessionMaxInactiveCol="max_inactive"
>                     sessionTable="tomcat_sessions"
>                     sessionValidCol="valid_session"
>              />
>          </Manager>
> 
>      <Resource
>              name="jdbc/tomcat"
>              auth="Container"
>              type="javax.sql.DataSource"
>              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>              initialSize="${jdbc.pool.initialSize}"
>              maxActive="${jdbc.pool.maxActive}"
>              maxIdle="${jdbc.pool.maxIdle}"
>              minIdle="${jdbc.pool.minIdle}"
>              suspectTimeout="${jdbc.pool.suspectTimeout}"
>              maxWait="${jdbc.pool.maxWait}"
>              timeBetweenEvictionRunsMillis="${jdbc.pool.timeBetweenEvictionRunsMillis}"
>              minEvictableIdleTimeMillis="${jdbc.pool.minEvictableIdleTimeMillis}"
>              validationQuery="select 1"
>              validationInterval="${jdbc.pool.validationInterval}"
>              testOnBorrow="true"
>              removeAbandoned="true"
>              removeAbandonedTimeout="${jdbc.pool.removeAbandonedTimeout}"
>              logAbandoned="true"
>              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
>              testWhileIdle="true"
>              username="${jdbc.username}"
>              password="${jdbc.password}"
>              driverClassName="com.mysql.jdbc.Driver"
>              url="jdbc:mysql://${jdbc.host}:${jdbc.port}/tomcat?autoReconnect=true"/>
>      jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
>      org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
>      org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
> 
> these 2  are the guides where i learn the mayority how to do it
> https://svn.apache.org/repos/asf/tomcat/archive/tc4.1.x/trunk/container/catalina/docs/JDBCStore-howto.html
> https://gerrytan.wordpress.com/2013/08/21/tomcat-7-jdbc-session-persistence/
> 
> im going to attach the code that im trying to know why is not working.
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Persistent Manager Implementation Question

Posted by Mark Thomas <ma...@apache.org>.
Try turning on ALL logging for the org.apache.catalina.session package.

Mark


On 08/02/2024 20:49, Miguel Vidal wrote:
>   demo4.zip
> <https://drive.google.com/file/d/1XOUHhw59Djk2XmdFEmkBsusnHf5_yNE7/view?usp=drive_web>
> Hello,
> 
> Specifications
> Windows 10
> Tomcat 8.5
> this is a configuration question .
> the tomcat specification that works :
> https://tomcat.apache.org/tomcat-8.0-doc/config/manager.html
> 
> Im trying to configure correctly in 2 different applications : Persistent
> Manager Implementation using a mysqldb as a datasource.
> 
> In one of them that is a legacy project i have some dependencies as
> 
> <dependency>
>      <groupId>org.springframework</groupId>
>      <artifactId>spring-core</artifactId>
>      <version>${spring.framework.version}</version>
> </dependency>
> 
> <dependency>
>      <groupId>org.springframework</groupId>
>      <artifactId>spring-context</artifactId>
>      <version>${spring.framework.version}</version>
> </dependency>
> 
> and it is already doing the registry of the sessions in my bd.
> but in the other app im using a spring boot with the same configuration.
> I'm not able to see any registration of the sessions in my db. After the
> deploy of my app in a tomcat server and hit any resource example
> /test/resource im able to see the response correctly but i just want to
> know if this  Persistent Manager Implementation is only for legacy apps? or
> why is running in one and in the other is not.
> 
> this is my xml for both
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <Context antiJARLocking="true" path="/nose" docBase="nose"
> reloadable="true" useHttpOnly="true"  cookies="${uses.cookies}" >
> 
>          <Manager
> className="org.apache.catalina.session.PersistentManager"
> maxInactiveInterval="3600" debug="0" saveOnRestart="true"
> maxActiveSessions="-1" minIdleSwap="1" maxIdleSwap="2"
> maxIdleBackup="1" >
>              <Store className="org.apache.catalina.session.JDBCStore"
>                     dataSourceName="jdbc/tomcat"
>                     driverName="com.mysql.jdbc.Driver"
>                     sessionAppCol="app_name"
>                     sessionDataCol="session_data"
>                     sessionIdCol="session_id"
>                     sessionLastAccessedCol="last_access"
>                     sessionMaxInactiveCol="max_inactive"
>                     sessionTable="tomcat_sessions"
>                     sessionValidCol="valid_session"
>              />
>          </Manager>
> 
>      <Resource
>              name="jdbc/tomcat"
>              auth="Container"
>              type="javax.sql.DataSource"
>              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
>              initialSize="${jdbc.pool.initialSize}"
>              maxActive="${jdbc.pool.maxActive}"
>              maxIdle="${jdbc.pool.maxIdle}"
>              minIdle="${jdbc.pool.minIdle}"
>              suspectTimeout="${jdbc.pool.suspectTimeout}"
>              maxWait="${jdbc.pool.maxWait}"
>              timeBetweenEvictionRunsMillis="${jdbc.pool.timeBetweenEvictionRunsMillis}"
>              minEvictableIdleTimeMillis="${jdbc.pool.minEvictableIdleTimeMillis}"
>              validationQuery="select 1"
>              validationInterval="${jdbc.pool.validationInterval}"
>              testOnBorrow="true"
>              removeAbandoned="true"
>              removeAbandonedTimeout="${jdbc.pool.removeAbandonedTimeout}"
>              logAbandoned="true"
>              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
>              testWhileIdle="true"
>              username="${jdbc.username}"
>              password="${jdbc.password}"
>              driverClassName="com.mysql.jdbc.Driver"
>              url="jdbc:mysql://${jdbc.host}:${jdbc.port}/tomcat?autoReconnect=true"/>
>      jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
>      org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
>      org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"
> 
> these 2  are the guides where i learn the mayority how to do it
> https://svn.apache.org/repos/asf/tomcat/archive/tc4.1.x/trunk/container/catalina/docs/JDBCStore-howto.html
> https://gerrytan.wordpress.com/2013/08/21/tomcat-7-jdbc-session-persistence/
> 
> im going to attach the code that im trying to know why is not working.
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org