One of the enhancements in the IBM i 7.2 release is the ability to configure an HTTP server to specify the subsystem in which it runs. Given that more and more work is driven through a Web server, I’m sure many of you will agree this is a great enhancement. The IBM i 7.2 announcement has the following:
The ability to run HTTP server jobs in a custom subsystem. Jobs are no longer tied to QHTTPSVR. This ensures HTTP server jobs have their own dedicated memory pool as needed.
But it doesn’t tell you how to do it, nor does it give you a clue where to find that information. I wasn’t able to find it in the IBM i 7.2 Knowledge Center (until I learned enough to know what specifically to search for). Even the HTTP Server section on “What’s new for IBM i 7.2” did not mention the capability to configure the subsystem the server is to run in.
I was determined to figure this out without asking an IBMer, so I went to the Internet Configurations with Navigator for i to see if I could find it on the GUI. There was nothing obvious there, so I started to explore and opened up the directive index – nothing related to subsystems under “S”…. a search on “sub” however, did find “HTTPSubsystemDesc” and there were the four directives for the subsystem configuration information:
- • HTTPRoutingData - specifies the user defined routing data for HTTP server jobs.
- • HTTPStartJobDesc - specifies the user created job description that defines how HTTP server jobs should be run.
- • HTTPStartJobQueue - specifies the user created job queue to which the HTTP server jobs will be submitted.
- • HTTPSubsystemDesc - specifies the user created subsystem that the HTTP server runs in.
Now that I knew the directive names, I could find documentation in the Knowledge Center. There is an interesting interplay between the various directives and the behavior of where the jobs run. Copied directly from the Knowledge Center:
Note: To make HTTP server run in subsystem other than QHTTPSVR, at least HTTPStartJobQueue directive is required to be specified and the desired subsystem is MUST in active status before starting HTTP server. If only HTTPSubsystemDesc directive is specified, only the specified subsystem is started and HTTP server jobs still run under QHTTPSVR. If only HTTPStartJobQueue is specified but the desired subsystem is not active at that moment, the HTTP server jobs will not be started until the subsystem is started.
Once I had found the basic information on the directives, I did an Internet search on “HTTPSubsystemDesc”, where I found the IBM technote, How to run HTTP Apache in its own subsystem. Documentation! Success!
The general approach is to create the class, the subsystem description, job queue and job queue entry, and the routing entry as you would when you are setting up your own subsystems. The magic is then modifying the HTTP server configuration with the four directives that specify the subsystem configuration information. Once you have the subsystem configuration in place, you can start your HTTP server as you typically would and it will run in the customized subsystem.
Now you know how to do this configuration and this blog gives the Internet one more article that will hopefully help others when they do a search to figure out how to do this.