Every month we are getting an error from SNDDST saying that it cannot be
ran in jobs with multiple threads. I get that this command cannot run with
multiple threads. But I curious on why we are getting multiple threads in
an interactive session.
The program trying to use this command is vendor code. All of their code
is written in RPG3 and CLP running in the default activation group. We now
own the code and as we make changes to the code, we convert to RPGLE. We
have created service programs, some with named activation groups, others
with named activation groups. We have also introduced SQLRPGLE into some
programs (FYI, when we make changes to the vendor code, we move to a new
library higher in the LIBL, we leave the original code alone, just our
decision to do that). Side note, all programs called interactively is
called by a menu program written in RPG3 by the same vendor, as we convert
the called programs from RPG3 to RPGLE we sometimes add HSPEC
actgrp(*CALLER) other times we do not. When using *CALLER, it's my
understanding that the program run in the default activation group. Not
sure if this matters to anyone trying help me with this situation.
I've been reading articles on the web about multithreading (new concept to
me). I remember once reading that to start a new thread, the program has
to specifically call the spawn routine. I'm certain that none of us at
this shop has done this in any programs (lack of understanding being the
biggest hurdle). I've also read that Only batch immediate jobs and
prestart jobs provide multithread-capable support here:
But that's documentation for V4R5, we are currently on V7R1. But if this is
still the case why are our interactive jobs spawning multiple threads.
Unfortunately, I do not have any job logs to include in this email, however
as I recall the error message was CPFA0A8. Operation not allowed in a job
running multiple threads.
I also came across this website. Multithreaded programs in Java
"The Java™ runtime environment is inherently multithreaded."
So I can see where this could be our issue. Some new emails that we send
out are being sent using RPGMAIL. RPGMAIL uses Java. So if the user did
something to send out an email, I can see this being our culprit. But
there's only one program that I recall that gets sent using RPGMAIL and I
know that it hasn't been sent because I am copied on it. All other RPGMAIL
emails are sent from batch job that are submitted from the Job scheduler
and therefore wouldn't have an effect on any one interactive session.
This doesn't happen for all users, just a select few. The ones that get
the error are different from month to month.
The boss started asking why has this just started. The truth is we really
don't know if it just now started to happen as users used to ignore these
kind of messages. As far as they were concerned the program completed
successfully because accounts receivables had generated an invoice (but no
email was sent).
But if this is new what could be spawning the multiple threads? Is it the
SQL, Activation Groups, or is the Java?
Thanks in advance.