Everyone, I wasn't resisting using the try-with-resources construct, only when I tried to do this, I was getting compiler errors. But I evidently wasn't doing it right, because I tried it again and this time it worked.
Following is the new code for getting the list of countries. It uses this construct and in addition has an extra catch clause for any kind of exception. I have done this in all six places where a connection is being created. I restarted Glassfish earlier today and dropped in the new .war file. It has been running for 6-8 hours now. The log files show no evidence of any exceptions being thrown. The current contents of the JDBC monitor page are copied below. I don't know how to interpret most of this, but I do note that the number of connections released equals the number acquired. Also, I have set the Connection Leak Timeout to be 10 seconds, and the NumPotentialConnLeak is still at 0. In addition, I did some further experimenting with the pool size, and now I find that if I set the minimum back to 8 and the maximum to 32, which are the defaults, the system keeps running and doesn't output that "can't allocate more connections" message. For me this is very puzzling. Did my code changes have anything to do with this? Anyway, my interpretation of all this is as before, that there are no memory leaks. Is this correct? I'm trying to upgrade to the current version of Glassfish, but haven't gotten this working yet. Dan ----------------------------------------------------------------------------- @Path("holidaysandevents") public class HolidaysRESTJSONResource { @Context private UriInfo context; DataSource dataSource; public HolidaysRESTJSONResource() { dataSource = DataSourceSingleton.getInstance().dataSource; } @GET @Path("/countries") @Produces(MediaType.APPLICATION_JSON) public String getJsonCountries() { if (TempDataStorage.countryList == null) { // Connection connection = null; try (Connection connection = dataSource.getConnection()){ // connection = dataSource.getConnection(); TempDataStorage.countryList = GetCountryList.doIt(connection); } catch (SQLException e) { System.out.println("Sql Exception" + e.getStackTrace()); } catch (Exception e) { System.out.println("Other Exception" + e.getStackTrace()); } //finally { // if (connection != null) { // try { // connection.close(); // } catch (SQLException e) { // System.out.println(e.getStackTrace()); // } // } // } } StringListWrapper listWrapper = new StringListWrapper(); listWrapper.setTheList(TempDataStorage.countryList); return new Gson().toJson(listWrapper); } --------------------------------------------------------------------------------- Resource Monitoring Click Configure Monitoring and enable monitoring for a component or service by selecting either LOW or HIGH. See the Online Help for more information. Instance Name: server Resource : HolidaysConnectionPool Application : Monitor (14 Statistics) Collapse Group JDBC Connection Pool Statistics : HolidaysConnectionPool NumConnCreated 20 count Aug 18, 2025 5:47:56 PM Aug 19, 2025 12:37:57 AM -- The number of physical connections that were created since the last reset. NumConnFree 1count Aug 18, 2025 5:47:56 PM Aug 19, 2025 1:48:33 AM High Water Mark: 3 count Low Water Mark: 0 count The total number of free connections in the pool as of the last sampling. NumConnReleased 325 count Aug 18, 2025 5:47:56 PM Aug 19, 2025 1:48:33 AM -- Number of logical connections released to the pool. NumPotentialConnLeak 0 count Aug 18, 2025 5:47:56 PM -- -- Number of potential connection leaks NumConnFailedValidation 0 count Aug 18, 2025 5:47:56 PM -- -- The total number of connections in the connection pool that failed validation from the start time until the last sample time. ConnRequestWaitTime 0millisecond Aug 18, 2025 5:47:56 PM Aug 19, 2025 1:48:33 AM High Water Mark: 921 millisecond Low Water Mark: 0 millisecond The longest and shortest wait times of connection requests. The current value indicates the wait time of the last request that was serviced by the pool. NumConnAcquired 325 count Aug 18, 2025 5:47:56 PM Aug 19, 2025 1:48:33 AM -- Number of logical connections acquired from the pool. AverageConnWaitTime 12 millisecond Aug 18, 2025 5:47:56 PM Aug 19, 2025 1:49:00 AM -- Average wait-time-duration per successful connection request NumConnDestroyed 19 count Aug 18, 2025 5:47:56 PM Aug 19, 2025 12:37:57 AM -- Number of physical connections that were destroyed since the last reset. NumConnSuccessfullyMatched 0 count Aug 18, 2025 5:47:56 PM -- -- Number of connections succesfully matched NumConnNotSuccessfullyMatched 0 count Aug 18, 2025 5:47:56 PM -- -- Number of connections rejected during matching NumConnUsed 0count Aug 18, 2025 5:47:56 PM Aug 19, 2025 1:48:33 AM High Water Mark: 2 count Low Water Mark: 0 count Provides connection usage statistics. The total number of connections that are currently being used, as well as information about the maximum number of connections that were used (the high water mark). WaitQueueLength 0 count Aug 18, 2025 5:47:56 PM -- -- Number of connection requests in the queue waiting to be serviced. NumConnTimedOut 0 count Aug 18, 2025 5:47:56 PM -- -- The total number of connections in the pool that timed out between the start time and the last sample time. -----Original Message----- From: Robert Turner <rtur...@e-djuster.ca.INVALID> Sent: Monday, August 18, 2025 11:13 AM To: Tomcat Users List <users@tomcat.apache.org> Subject: Re: [EXTERNAL EMAIL] How to access a REST service For instance, what happens when the year parameter for the "calender" request is not a number? Or if parameters are missing? Have you tested these situations? On Mon, Aug 18, 2025 at 10:52 AM Robert Turner <rtur...@e-djuster.ca> wrote: > Daniel, > > You have a leak - this we are certain of. You just don't yet know what > causes it (it's clearly not a "standard use case" and the robots are > likely triggering it). > > If I have my bets it is an unhandled unchecked exception (I'd even > guess that it is likely a NumberFormatException) while processing one > of your operations. Since you are reluctant to move your code to > "try-with-resources" handling of the resource objects (which would > make the code easier to read and avoid this problem), you will > continue to see the problem unless you ensure that you are catching all > exceptions (e.g. > Throwable) (which is a bad practice in general). > > The 388 connection cound is the existing leaked connections from > previous operations since you last started the Glassfish server and > pool. I did suggest you restart Glassfish after adjusting that > parameter to reset the numbers and the systems. > > From my testing, I am very confident that the different versions will > not behave differently in the context of your application. > > Please have some confidence that we do know what we are talking about. > Your problem is common and not unique. > > If I get some time, and with your permission, I might try to look at > your server operations and see if I can trigger it for you... but if > you share the code for all the operations (no need to share the DB > queries, just the Java code), I bet we can find it quickly. However, > us solving it for you avoids you benefiting from the learning experience. > > Robert > > > On Mon, Aug 18, 2025 at 10:44 AM Daniel Schwartz > <d...@danielgschwartz.com> > wrote: > >> Chris, >> >> I thought it was you. I too have a job and family, and this is only >> a side project, so my time also is limited. >> >> Anyway, I'm wondering if there really is a problem, or whether this >> is just normal Glassfish behavior. Yesterday I changed the Glassfish >> settings so that leak monitoring is activated, and today I got: >> >> NumPotentialConnLeak 0 count Aug 8, 2025 3:18:57 PM -- -- >> Number of potential connection leaks >> >> Also, this value: >> >> NumConnUsed 388count Aug 4, 2025 2:47:24 AM Aug 18, 2025 >> 2:34:54 PM High Water Mark: 390 count Low Water Mark: 0 count >> Provides connection usage statistics. The total number of connections >> that are currently being used, as well as information about the >> maximum number of connections that were used (the high water mark). >> >> Has remained unchanged at 388. >> >> There has been suspicion that my system has a memory leak, but all >> indications are that this is not happening. >> >> I'm currently trying to upgrade to the current version of Glassfish >> to see if this behaves differently, but haven't gotten it working yet. >> >> Dan >> >> >> -----Original Message----- >> From: Christopher Schultz <ch...@christopherschultz.net> >> Sent: Monday, August 18, 2025 10:29 AM >> To: users@tomcat.apache.org >> Subject: Re: [EXTERNAL EMAIL] How to access a REST service >> >> Daniel, >> >> On 8/16/25 10:57 PM, Daniel Schwartz wrote: >> > There was a Chris too, but I think he made his recommendation and >> > left. >> I'm still here, but I do have a job and a family. Rob, Robert and >> Chuck were making plenty of noise so I decided to reduce the clutter. >> >> > I'm coming to think that his advice was the best, namely, to just >> > live with the current situation as long as it is working. >> I gave no such advice. I think you should chase this down until you >> understand the cause and have it fixed. >> >> -chris >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >> For additional commands, e-mail: users-h...@tomcat.apache.org >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org