Rocket DevOps (formerly Aldon)

 View Only

Tips & Techniques : Using Harmonizer to Compare Source Across IBM i Systems

  • 1.  Tips & Techniques : Using Harmonizer to Compare Source Across IBM i Systems

    ROCKETEER
    Posted 09-24-2021 19:55
    If you have used LMi for any amount of time, you have probably already discovered the Harmonizer Source Comparison feature that is available via Option 35 from the Work With Objects by Release panel. This is a fantastic way to compare two different versions of source for the same object on the same machine. But did you know that Harmonizer was originally designed to do much, much more than this simple comparison? 

    Harmonizer is actually the very first product that Aldon sold and it is almost 30 years old! It was marketed to those customers who needed to compare entire libraries of source code and quickly anlayse the differences. Think about what you need to do when you've made modifications to your Vendor's Release #1 and out comes Vendor Release #2. You need a quick way to pinpoint not only what the vendor changed between their version 1 and version 2, but also how that impacts your custom mods.

    Today, I worked with a customer who needed to do a similar comparison between entire libraries of source, but they had one additional challenge, the two libraries are on two completely different IBM i systems! I am happy to tell you that Harmonizer handled this like a champ!

    Harmonizer accomplishes this by using good old DDM on the IBM i. Under the covers, Harmonizer will create a DDM connection over to the "remote" IBM i system and it will use that connection to compare the source between the boxes.

    This DDM connection needs to be configured to use the *IP protocal, not the older *SNA protocol. In order to ensure this, you will need to change the CRTDDMF command default to default to *IP instead of *SNA. To do this, run the following command on the development system where Harmonizer is located: CHGCMDDFT CMD(QSYS/CRTDDMF) NEWDFT('RMTLOCNAME(*N *IP)')

    ​Now you can run Harmonizer:
    1. STRASCH
    2. Option 1:  Run Harmonizer to compare source members
    3. Select "Basic Compare Files"
    4. Fill out the parameters something like this: 
    5. Specify reference file(s) and member(s):
      File . . . . . . . . . . QCLSRC 
      Library . . . . .. . LMIDMO4P
      System . . . .  . . *LCL 
      Member . . . . . . *ALL 

      Specify first compare file(s) and member(s):
      File . . . . . . . . . . QCLSRC 
      Library . . .  . . . LMIDMO4P 
      System . . . . . . ALSUP1 
      Member . .. . . . *ALL 
    ​Notice that the first set of parameters identifies the source code on the local system, that is the system where Harmonizer is running. The second batch identifies the remote system, in my case, "ALSUP1". This is what Harmonizer will need to set up the DDM connection to.  It is also worth noting that you cannot specify the File *ALL and the remote system in the same run. So, you'll have to run it one source file at a time. 

    After you have filled in your parameters, you can either run the compare interactively or in batch. You might want to select a source file with a very small number of members for your first run and run it interactively just to make sure all is working as you desire.

    When I ran this for the first time, Harmonizer failed. Digging into the messages in the job log revealed that my remote IBM i system refused the DDM connection and recommended that I update the security settings on the remote system. I noticed that the remote system was set up to require that any incomming DDM connection had a valid user profile AND a valid password. I changed it to only require a valid user profile using this command: CHGDDMTCPA PWDRQD(*USRID). I would recommend consulting with your network security advisor before making any changes. You can always ask to temporarily reduce it to *USRID and then return it back once you are done with the Harmonizer run. 



    ------------------------------
    Joe Baumgarten
    Senior CSE
    Rocket Internal - All Brands
    Ames IA United States
    ------------------------------