Hello again, Thorsten,

You can ignore my query about identifying the start and end of user sessions.  
Upon further reflection, I realize that this can't be done within the 
webservice.  My webservice is the backend for a website the uses Next.js, and I 
think that this is where the sessions are identified, using cookies or some 
such technique.  I will look into this.

Dan

-----Original Message-----
From: Thorsten Heit <heit_tom...@icloud.com.INVALID> 
Sent: Friday, August 1, 2025 5:32 AM
To: users@tomcat.apache.org
Subject: Re: How to access a REST service

Hi,

> Daniel,
> You might take a look at java’s “ try with” construct

This is an important step, indeed:

>> Here is a fragment of the code from the file HolidaysRESTJSONResource.jar.
>> ---------------------------------------------------------------------
>> ----- public class HolidaysRESTJSONResource {
>>
>>    DataSource dataSource;
>>
>>    public HolidaysRESTJSONResource() {
>>        dataSource = DataSourceSingleton.getInstance().dataSource;
>>    }
>>
>>    @GET
>>    @Path("/countries")
>>    @Produces(MediaType.APPLICATION_JSON)
>>    public String getJsonCountries() {
>>    ...
>>        Connection connection;
>>        try {
>>            connection = dataSource.getConnection();
>>            TempDataStorage.countryList = 
>> GetCountryList.doIt(connection);
>>            connection.close();
>>    ...
>> }

A couple of questions:

1) How often is your class instantiated/created? Is it a singleton? A new one 
per each incoming request?


2) What happens in case of an exception in your try block? Looking at 
the above snipped the connection isn't closed.


>> The constructor for HolidaysRESTJSONResource creates a DataSource by 
>> creating an instance of the following DataSourceSingleton class and 
>> retrieving the value of the DataSource instance variable.  I borrowed 
>> this code from somewhere.  It seems to work.  The MySql database is 
>> called "holidays".

3) Have a look at the version of the database driver you're using. Is 
there perhaps a newer one? If yes, have a look at the release notes and 
check the changes. Perhaps there's a leak in the driver itself...?


>> Back in HolidaysRESTJSONResource, in the method getJsonCountries(), 
>> the DataSource object, called "dataSource", is used to create the 
>> connection object, and this is used in a method call 
>> GetCountryList.doIt() to retrieve a list of countries from the 
>> database.  Then this connection object is closed.  I think that this 
>> is all that is needed to prevent memory leaks.  Is this correct?  I do 
>> this for every such method call that accesses the database.

AFAICT only in case of proper execution wrt to the code snippet 
presented. In case of an exception during the #doIt(...) call this won't 
happen (correctly) and can result in a memory leak (AFAIK).

What happens in case of multiple simultaneously incoming requests? Does 
your database (and driver) allow enough parallel connections so that 
each request is processed correctly?



Regards

Thorsten

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

Reply via email to