I don't believe Data Queues use connection pooling like JDBC would for a database. However I think you can have an IBMi/AS400 object connection pool that can be re-used. And those connections are used to start/connect-send/receive-disconnect from the data queue service jobs.
When you use a data queue you grab an existing connection or start a new IBMi connection, instantiate the data queue, do work and disconnect it. See this article link from the docs for a short code example: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzahh/dtaq.htm
To me it sounds like whoever did the app coding is possibly starting new connections and then never closing them perhaps. Then at the end of the thread/interaction the running IBMi background data queue job is left running and orphaned. Thus the never-ending stream of new jobs.
Would be hard to say without seeing code. But the sample I referenced should be easy to follow.
Hope this helps.
date: Wed, 8 Jan 2020 15:30:46 +0000
from: Dawn May <dawnmayican@xxxxxxxxxxx>
subject: Data Queue Prestart Server Job (QZHQSSRV) Reuse
I am working with an application that has a Linux web front end (Tomcat) that communicates to the IBM i via data queues using the Java toolbox.
The data queue server jobs (QZHQSSRV) are never reused.
This has been verified by reviewing the PRESTART_JOB_REUSE_COUNT column returned by the QSYS2.ACTIVE_JOB_INFO() service. PRESTART_JOB_REUSE_COUNT is always 1. In addition, the number of CPF1124/CPF1164 messages is nearly identical to the number of CPIAD09 (User &4 from client &8 connected to job) messages logged to the history log.
There are hundreds to thousands of connections each hour and each connection results in a new job. I?d like to have the jobs be reused to reduce the overhead of a new job for every connection.
I also need to verify that the implementation of connection pooling is done correctly and I?m not sure if this is related.
Are these data queue server jobs supposed to be reused?
The prestart job entries are shipped with MAXUSE(200), so I assumed they should be able to be reused, but is my assumption incorrect?
Is the application supposed to open/close connections in a specific manner that determines whether the job is ended or reused?
The application has configured connection pooling, but the MaxUseTime and MaxLifeTime values are only 5 minutes, which seem small to me.
Could these values play a factor in why jobs are not reused?
I have tried to do this investigation via Internet searches, but I have found no information about reusing these jobs.
The closest thing I stumbled upon was this old thread in this mailing list:
But that talked about ending the jobs and I want to know how to reuse the jobs.
I do not have much experience with the Java toolbox interfaces using the data queue server jobs, so any information that may be helpful would be appreciated.