4 Replies Latest reply on Aug 5, 2002 4:09 PM by keithd

    Instructions on Installing JBoss on AS/400

    tonyawbrey

      I need to get some specific instructions on how to install JBoss and set it up to serve up the examples on the AS/400. Also, curious if anyone has found a way to get it to run in a batch subsystem? I have search the forums and have found nothing that is very specific at all about any of this.

      Thanks,

      Tony Awbrey

        • 1. Re: Instructions on Installing JBoss on AS/400

          You should be able to start it using qshell.

          This FAQ should help with some of qshell's funnys.
          http://www-919.ibm.com/developer/qshell/faq.html

          Not done this myself, but I know somebody who has.

          Regards,
          Adrian

          • 2. Re: Instructions on Installing JBoss on AS/400
            marc.fleury

            Adrian,

            this is a definite FAQ,

            marcf

            • 3. Re: Instructions on Installing JBoss on AS/400
              keithd

              I've seen several request concerning running JBoss on an AS/400 and/or iSeries. Therefore, I thought I would share with everyone how I have JBoss 3.0 running, in batch, on one of our iSeries systems. Hopefully, this will point other AS/400 and/or iSeries users in the right direction.

              I'm currently evaluating the JBoss server to see how it performs and it is strictly in Test Mode at this time.

              (My apologies for the length, but I thought it best to include all the details for clarity. In addition, the assumption is made the reader knows how to use SEU and create programs and commands.)

              First this is my current cumulative PTF level and the JDK I have running
              =======================================================
              System Configuration.

              OS/400 V5R1M0 with Cumulative PTF Level C2134510, with current Group PTF’s.

              Resource
              ID Option Feature Description
              5722JC1 *BASE 5050 AS/400 Toolbox for Java
              5722JC1 *BASE 2924 AS/400 Toolbox for Java
              5722JV1 *BASE 5050 IBM Developer Kit for Java
              5722JV1 *BASE 2924 IBM Developer Kit for Java
              5722JV1 5 5105 Java Developer Kit 1.3
              ========================================================
              Instructions for Running Jboss 3.0 in Batch on an AS/400 and/or iSeries.

              1) Create a job queue for JBOSS.

              CRTJOBQ JOBQ(QGPL/JBOSS) TEXT('Jobq for JBoss Application Server')

              2) Create a run class for the jobs

              CRTCLS CLS(QGPL/JBOSS) RUNPTY(25) TEXT('JBoss Job Class')

              The resulting class will look like this:
              =======================================================
              Display Class Information

              Class . . . . . . . . . . : JBOSS
              Library . . . . . . . . : QGPL
              Run Priority . . . . . . . : 25
              Time slice in milliseconds : 2000
              Eligible for purge . . . .: *YES
              Default wait time in seconds : 30
              Maximum CPU time in milliseconds . : *NOMAX
              Maximum temporary storage in Megabytes : *NOMAX
              Maximum threads . . . .. . . . . : *NOMAX
              Text . . . . . . . : JBoss Job Class
              ======================================================

              3) Create a Subsystem for the jobs to run in.

              CRTSBSD SBSD(QGPL/JBOSS) POOLS((1 *BASE)) TEXT('JBoss Web Application Server SubSystem')


              4) Now associate the job queue we created in step 1, to the subsystem.

              ADDJOBQE SBSD(QGPL/JBOSS) JOBQ(QGPL/JBOSS) MAXACT(*NOMAX)

              5) Now we need to add a routing entry into the subsystem and tie in the Class we created in Step 2.

              ADDRTGE SBSD(QGPL/JBOSS) SEQNBR(9999) CMPVAL(*ANY) PGM(QCMD) CLS(QGPL/JBOSS)

              At this point you now have a new subsystem, in which to run the JBoss Web Application Server. It has its own job queue and its own run class.

              The next section deals with user profiles, paths, starting and stopping, and enhancements you can make.

              I. User Profile:

              In order to make things easier I created a unique user profile called JBOSSADMIN for the JBoss Jobs to run under. This is what I did, and you can run the jobs under whatever profile gives you the access you need on your system while staying in compliance with your security rules.

              The major point about my profile (JBOSSADMIN) is that I set its “home” directory (HOMEDIR) to point to the JBOSS bin directory in the IFS:

              CRTUSRPRF USRPRF(JBOSSADMIN) TEXT('JBoss Web Application Server Admin Profile') HOMEDIR('/jboss-3.0.0_tomcat-4.0.3/bin')

              II. Create a ShortCut to the Jboss Directory.

              I found it very useful to create a shortcut to the JBOSS directory instead of typing in “/jboss-3.0.0_tomcat-4.0.3” everytime. On the AS/400 this is called a Symbolic Link and should be placed in the Root of the IFS.

              ADDLNK OBJ('/jboss-3.0.0_tomcat-4.0.3') NEWLNK(JBOSS)

              This will give you the following link.
              ========================================================
              Display Symbolic Link

              Object link . . . . . : /JBOSS
              Content of Link . . . : /jboss-3.0.0_tomcat-4.0.3
              ========================================================

              III. Commands and Programs to Submit the JBoss Server.

              I created a CLP program and a command to submit the job for me so that all I have to do is execute the command.

              The command and the CLP program are both named SBMJBOSS.

              First the CLP program looks like this:

              SEU==> SBMJBOSS
              FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
              *************** Beginning of data *************************************
              0001.00 PGM
              0002.00
              0002.01 SBMJOB CMD(RUNJVA CLASS(org.jboss.Main) +
              0002.02 CLASSPATH('/JBOSS/bin/run.jar:/tools.jar')) +
              0002.03 JOB(JBOSSSERVR) JOBQ(JBOSS) +
              0002.04 USER(JBOSSADMIN) CPYENVVAR(*YES) +
              0002.05 ALWMLTTHD(*YES)
              0013.00
              0014.00 ENDPGM
              ****************** End of data ****************************************

              You will note that the job name is JBOSSSERVR and that the user profile it will run under is JBOSSADMIN. The job is submitted to the job queue JBOSS which will then feed the job to the JBOSS subsystem. In addition, you will see on the CLASSPATH variable that I use the JBOSS symbolic link name to point to the bin directory. Also, note that I use the CPYENVVAR parameter on the SBMJOB command, in order to copy any special environmental setting I may have in place. Finally, I’ve specified the ALWMLTTHD(*YES), to allow the job to use multiple threads.


              Here is the command source and the command to create it.

              SEU==> SBMJBOSS
              FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
              *************** Beginning of data *************************************
              0001.00 0002.00 CMD PROMPT('Submit the JBOSS Web Server')
              ****************** End of data ****************************************

              Here is the command for creating the command:
              =========================================================
              CRTCMD CMD(SBMJBOSS) PGM(SBMJBOSS) TEXT('Submit the JBOSS Web Application Server')

              IV. Starting the JBoss Web Application Server.

              First the JBoss Subsystem has to be up and running:

              STRSBS SBSD(QGPL/JBOSS)

              Next, since I have a command, I type in SBMJBOSS. And this submits the job to the JBOSS job queue. (Note: You could just CALL PGM(SBMJBOSS) on a command line if you like.)

              This starts up the server in the JBoss Subsytem and will look like this:
              ====================================================
              Work with Active Jobs

              CPU %: 3.5 Elapsed time: 00:00:01 Active jobs: 197
              Subsystem/Job User Type CPU % Function Status
              JBOSS QSYS SBS .0 DEQW
              JBOSSSERVR JBOSSADMIN BCH .0 CMD-RUNJVA TIMW
              QJVACMDSRV JBOSSADMIN BCI .0 PGM-QJVACMDSRV JVAW
              =========================================================

              V. Stopping the JBoss Web Application Server.

              I have not had the opportunity to create an AS/400 command to stop the server, however its in my “to do” list for the future. I plan to access the “org.jboss.util.Shutdown” service to accomplish this.

              Currently, I just access the “Agent View”, via my web browser, by accessing the JBoss Webserver at port 8082.

              http://”server name”:8082

              Then I select “jboss.server” and under it I select “type=Server”, then I select the last button in the list which is the Mbean operation “Shutdown”. This ends the server in a nice orderly fashion.

              VI. Enhancements you can make if you would like.

              Since I prefer to run the web and application servers in their own memory pool instead of *BASE, which is what was used in Step 3, when the subsysem was created, I’ve changed my subsystem description, to use a shared memory pool. This involves a little knowledge about “Work Management” on the AS/400 and/or iSeries so I’ll just detail all the steps here. (These steps are optional, but can give you more flexibility in allocating resources.)

              1) First, I created a “Shared” memory pool for the servers and gave it (256) Meg of memory to work with.

              A) Use the WRKSHRPOOL command to list out all your current memory pools.

              B) Select an open shared pool and allocate the memory, active job information, and paging options.

              Below I’ve selected *SHRPOOL4 and given it 256 Meg of memory with 20 maximum active jobs and *CALC for the paging option.
              ==================================================
              Work with Shared Pools

              Main storage size (M) . : 2005.37

              Type changes (if allowed), press Enter.
              Defined Max Allocated Pool -Paging Option--
              Pool Size (M) Active Size (M) ID Defined Current
              *MACHINE 350.00 +++++ 350.00 1 *FIXED *FIXED
              *BASE 550.8 1500 550.81 2 *CALC *CALC
              *INTERACT 404.55 80 404.55 5 *CALC *CALC
              *SPOOL 50.00 10 *FIXED
              *SHRPOOL1 250.00 50 250.00 3 *FIXED *FIXED
              *SHRPOOL2 100.00 50 100.00 6 *CALC *CALC
              *SHRPOOL3 350.00 50 350.00 4 *CALC *CALC
              *SHRPOOL4 256.00 20 *CALC
              ======================================================

              C) Now change the subsystem to use the new memory pool.

              CHGSBSD SBSD(QGPL/JBOSS) POOLS((2 *SHRPOOL4))

              Note: Make sure you set the pool to be pool #2, the change to the subsystem will then cause it to have the following memory pools:
              =============================================
              Display Pool Definitions
              Subsystem description: JBOSS Status: ACTIVE

              Pool Storage Activity
              ID Size (K) Level
              1 *BASE
              2 *SHRPOOL4
              =============================================

              D) Finally, change the routing entry, so that all new jobs will use the second pool, for their memory.

              CHGRTGE SBSD(QGPL/JBOSS) SEQNBR(9999) POOLID(2)


              This completes the instructions I use for running JBoss in a Batch Job on the AS/400. It is not the only way you can do it, but it works fine for me. As I test more, these instructions are subject to change based on what I might find.

              Hope this helps!

              Keith

              {*** End of Document ***}




              • 4. Re: Instructions on Installing JBoss on AS/400
                keithd

                I've seen several request concerning running JBoss on an AS/400 and/or iSeries. Therefore, I thought I would share with everyone how I have JBoss 3.0 running, in batch, on one of our iSeries systems. Hopefully, this will point other AS/400 and/or iSeries users in the right direction.

                I'm currently evaluating the JBoss server to see how it performs and it is strictly in Test Mode at this time.

                (My apologies for the length, but I thought it best to include all the details for clarity. In addition, the assumption is made the reader knows how to use SEU and create programs and commands.)

                First this is my current cumulative PTF level and the JDK I have running
                =======================================================
                System Configuration.

                OS/400 V5R1M0 with Cumulative PTF Level C2134510, with current Group PTF’s.

                Resource
                ID Option Feature Description
                5722JC1 *BASE 5050 AS/400 Toolbox for Java
                5722JC1 *BASE 2924 AS/400 Toolbox for Java
                5722JV1 *BASE 5050 IBM Developer Kit for Java
                5722JV1 *BASE 2924 IBM Developer Kit for Java
                5722JV1 5 5105 Java Developer Kit 1.3
                ========================================================
                Instructions for Running Jboss 3.0 in Batch on an AS/400 and/or iSeries.

                1) Create a job queue for JBOSS.

                CRTJOBQ JOBQ(QGPL/JBOSS) TEXT('Jobq for JBoss Application Server')

                2) Create a run class for the jobs

                CRTCLS CLS(QGPL/JBOSS) RUNPTY(25) TEXT('JBoss Job Class')

                The resulting class will look like this:
                =======================================================
                Display Class Information

                Class . . . . . . . . . . : JBOSS
                Library . . . . . . . . : QGPL
                Run Priority . . . . . . . : 25
                Time slice in milliseconds : 2000
                Eligible for purge . . . .: *YES
                Default wait time in seconds : 30
                Maximum CPU time in milliseconds . : *NOMAX
                Maximum temporary storage in Megabytes : *NOMAX
                Maximum threads . . . .. . . . . : *NOMAX
                Text . . . . . . . : JBoss Job Class
                ======================================================

                3) Create a Subsystem for the jobs to run in.

                CRTSBSD SBSD(QGPL/JBOSS) POOLS((1 *BASE)) TEXT('JBoss Web Application Server SubSystem')


                4) Now associate the job queue we created in step 1, to the subsystem.

                ADDJOBQE SBSD(QGPL/JBOSS) JOBQ(QGPL/JBOSS) MAXACT(*NOMAX)

                5) Now we need to add a routing entry into the subsystem and tie in the Class we created in Step 2.

                ADDRTGE SBSD(QGPL/JBOSS) SEQNBR(9999) CMPVAL(*ANY) PGM(QCMD) CLS(QGPL/JBOSS)

                At this point you now have a new subsystem, in which to run the JBoss Web Application Server. It has its own job queue and its own run class.

                The next section deals with user profiles, paths, starting and stopping, and enhancements you can make.

                I. User Profile:

                In order to make things easier I created a unique user profile called JBOSSADMIN for the JBoss Jobs to run under. This is what I did, and you can run the jobs under whatever profile gives you the access you need on your system while staying in compliance with your security rules.

                The major point about my profile (JBOSSADMIN) is that I set its “home” directory (HOMEDIR) to point to the JBOSS bin directory in the IFS:

                CRTUSRPRF USRPRF(JBOSSADMIN) TEXT('JBoss Web Application Server Admin Profile') HOMEDIR('/jboss-3.0.0_tomcat-4.0.3/bin')

                II. Create a ShortCut to the Jboss Directory.

                I found it very useful to create a shortcut to the JBOSS directory instead of typing in “/jboss-3.0.0_tomcat-4.0.3” everytime. On the AS/400 this is called a Symbolic Link and should be placed in the Root of the IFS.

                ADDLNK OBJ('/jboss-3.0.0_tomcat-4.0.3') NEWLNK(JBOSS)

                This will give you the following link.
                ========================================================
                Display Symbolic Link

                Object link . . . . . : /JBOSS
                Content of Link . . . : /jboss-3.0.0_tomcat-4.0.3
                ========================================================

                III. Commands and Programs to Submit the JBoss Server.

                I created a CLP program and a command to submit the job for me so that all I have to do is execute the command.

                The command and the CLP program are both named SBMJBOSS.

                First the CLP program looks like this:

                SEU==> SBMJBOSS
                FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
                *************** Beginning of data *************************************
                0001.00 PGM
                0002.00
                0002.01 SBMJOB CMD(RUNJVA CLASS(org.jboss.Main) +
                0002.02 CLASSPATH('/JBOSS/bin/run.jar:/tools.jar')) +
                0002.03 JOB(JBOSSSERVR) JOBQ(JBOSS) +
                0002.04 USER(JBOSSADMIN) CPYENVVAR(*YES) +
                0002.05 ALWMLTTHD(*YES)
                0013.00
                0014.00 ENDPGM
                ****************** End of data ****************************************

                You will note that the job name is JBOSSSERVR and that the user profile it will run under is JBOSSADMIN. The job is submitted to the job queue JBOSS which will then feed the job to the JBOSS subsystem. In addition, you will see on the CLASSPATH variable that I use the JBOSS symbolic link name to point to the bin directory. Also, note that I use the CPYENVVAR parameter on the SBMJOB command, in order to copy any special environmental setting I may have in place. Finally, I’ve specified the ALWMLTTHD(*YES), to allow the job to use multiple threads.


                Here is the command source and the command to create it.

                SEU==> SBMJBOSS
                FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
                *************** Beginning of data *************************************
                0001.00 0002.00 CMD PROMPT('Submit the JBOSS Web Server')
                ****************** End of data ****************************************

                Here is the command for creating the command:
                =========================================================
                CRTCMD CMD(SBMJBOSS) PGM(SBMJBOSS) TEXT('Submit the JBOSS Web Application Server')

                IV. Starting the JBoss Web Application Server.

                First the JBoss Subsystem has to be up and running:

                STRSBS SBSD(QGPL/JBOSS)

                Next, since I have a command, I type in SBMJBOSS. And this submits the job to the JBOSS job queue. (Note: You could just CALL PGM(SBMJBOSS) on a command line if you like.)

                This starts up the server in the JBoss Subsytem and will look like this:
                ====================================================
                Work with Active Jobs

                CPU %: 3.5 Elapsed time: 00:00:01 Active jobs: 197
                Subsystem/Job User Type CPU % Function Status
                JBOSS QSYS SBS .0 DEQW
                JBOSSSERVR JBOSSADMIN BCH .0 CMD-RUNJVA TIMW
                QJVACMDSRV JBOSSADMIN BCI .0 PGM-QJVACMDSRV JVAW
                =========================================================

                V. Stopping the JBoss Web Application Server.

                I have not had the opportunity to create an AS/400 command to stop the server, however its in my “to do” list for the future. I plan to access the “org.jboss.util.Shutdown” service to accomplish this.

                Currently, I just access the “Agent View”, via my web browser, by accessing the JBoss Webserver at port 8082.

                http://”server name”:8082

                Then I select “jboss.server” and under it I select “type=Server”, then I select the last button in the list which is the Mbean operation “Shutdown”. This ends the server in a nice orderly fashion.

                VI. Enhancements you can make if you would like.

                Since I prefer to run the web and application servers in their own memory pool instead of *BASE, which is what was used in Step 3, when the subsysem was created, I’ve changed my subsystem description, to use a shared memory pool. This involves a little knowledge about “Work Management” on the AS/400 and/or iSeries so I’ll just detail all the steps here. (These steps are optional, but can give you more flexibility in allocating resources.)

                1) First, I created a “Shared” memory pool for the servers and gave it (256) Meg of memory to work with.

                A) Use the WRKSHRPOOL command to list out all your current memory pools.

                B) Select an open shared pool and allocate the memory, active job information, and paging options.

                Below I’ve selected *SHRPOOL4 and given it 256 Meg of memory with 20 maximum active jobs and *CALC for the paging option.
                ==================================================
                Work with Shared Pools

                Main storage size (M) . : 2005.37

                Type changes (if allowed), press Enter.
                Defined Max Allocated Pool -Paging Option--
                Pool Size (M) Active Size (M) ID Defined Current
                *MACHINE 350.00 +++++ 350.00 1 *FIXED *FIXED
                *BASE 550.8 1500 550.81 2 *CALC *CALC
                *INTERACT 404.55 80 404.55 5 *CALC *CALC
                *SPOOL 50.00 10 *FIXED
                *SHRPOOL1 250.00 50 250.00 3 *FIXED *FIXED
                *SHRPOOL2 100.00 50 100.00 6 *CALC *CALC
                *SHRPOOL3 350.00 50 350.00 4 *CALC *CALC
                *SHRPOOL4 256.00 20 *CALC
                ======================================================

                C) Now change the subsystem to use the new memory pool.

                CHGSBSD SBSD(QGPL/JBOSS) POOLS((2 *SHRPOOL4))

                Note: Make sure you set the pool to be pool #2, the change to the subsystem will then cause it to have the following memory pools:
                =============================================
                Display Pool Definitions
                Subsystem description: JBOSS Status: ACTIVE

                Pool Storage Activity
                ID Size (K) Level
                1 *BASE
                2 *SHRPOOL4
                =============================================

                D) Finally, change the routing entry, so that all new jobs will use the second pool, for their memory.

                CHGRTGE SBSD(QGPL/JBOSS) SEQNBR(9999) POOLID(2)


                This completes the instructions I use for running JBoss in a Batch Job on the AS/400. It is not the only way you can do it, but it works fine for me. As I test more, these instructions are subject to change based on what I might find.

                Hope this helps!

                Keith

                {*** End of Document ***}