For the last few years, IBM has been delivering more and more functionality via its Technology Refreshes, which come out in between major operating system upgrades. See what the latest one, for both 7.1 and 7.2, has to offer.
IBM continues to make good on its promise to roll out new functionality (separate from a new software version) by using the Technology Refresh approach, and at the recent COMMON Conference, the next TR was announced. This is TR10 for 7.1 and TR2 for 7.2. And what does it provide? Thought you'd never ask.
Java 8 Is Here
Java has been a native language on the i for many years, and recent surveys indicate that quite a few IBM i shops are currently using it for new development. As the IBM i Marketplace Survey (courtesy of HelpSystems) shows, 38% of surveyed shops are using Java for some of their new development. While this is less than the 87% who are using RPG, it is quite significant and shows clearly that a large minority of IBM i shops are using both languages.
Java 8 is the latest release, having been unleashed on the world back in March 2014, and within a year it has been brought forward to the i. This is a big deal because, while functionally there's not a lot new in 8, there are many fixes in there that make it superior to 7 in terms of security. In fact, these security improvements are so significant to Java users that the adoption rate for 8 is expected to exceed the rate for 7 when it was introduced in 2011.
With Java being a big player in the development of new IBM i apps, it will be important in the future that as new releases of the language roll out they be quickly (you can argue that 13 months isn't all that quick) incorporated into the i development suite.
Python Support
The TRs also heralded the arrival of Python as the latest web language to become available on the i. With C, PHP, Ruby, and Node.js already in place, Python is a good addition.
Python was developed in the '80s, with the first implementation in 1989, and was based on the old ABC language. The developer, Guido van Rossum of TWI in the Netherlands, named the language not for the snake, even though that has become the marketing image for the language, but rather for Monty Python's Flying Circus. Guido remains involved with the continued development of the language, and over the years Python has gained many adherents, generally ranking somewhere in the top eight programming languages by the TIOBE Programming Community Index.
Although Python is not based on C or Java, it is often compared with them. It's designed to be easy to read with white space indentation (rather than the braces and brackets of PHP or JavaScript) and other convenience features. It also consists of a large number of specialty functions that allow it to do things in fewer lines of code than either of those two languages.
Technically, Python is an object-oriented scripting language (rather than a conventional language like C or Java) with support for functional and aspect-oriented programming.
What can you do with it? Python is not a business language like RPG, so you won't use it to write business logic. Nor is it really a web language in the same sense as JavaScript, so you won't use it to spark up your web page. It tends to be embedded in other things but not always. Because of its animation features, early on it was used for gaming and it still is used in concert with some other newer languages (Maya, for example) for that purpose. It's heavily used in GIS-type programming and, because of that, with robotics. One of its big calling cards is string manipulation, so you'll find it in data analysis (textual data, that is, not numbers) for data warehousing and for various text-oriented applications like dictionaries or whatnot. Another area is in the development of tools, particularly automated testing tools. For more details on what Python does, check out this link at the official Python site.
RPG Support
Frankly, I would feel very disappointed if the new TRs didn't include something for RPG, and this time the enhancements are centered on PCML.
PCML? Yes, Program Call Markup Language. It's one of the ways in which Java programs can call and execute RPG modules.
Without getting too carried away on the topic, the procedure uses an XML file that defines the RPG program to be called, plus the data parms that need to be passed to do the call. Something like this.
<pcmlData version="1.0">
<program name='DWS0001' path='/RPGPGMS/DWS0001.pgm'>
<data name="PARM1" type="char" length="6"></data>
<data name="PARM2" type="char" length="12"></data>
</program>
</pcmlData>
This file gets picked up by the Java program, which then extracts the program name and parms to know what to call. Not something new, the technique has been around for a while.
Where does the XML file come from? It's created by the CRTBNDRPG compile command by specifying the Generate Program Interface parm to be *PCML and indicating a path in the IFS where this file will be stored. In addition, you have to use the PGMINFO H-spec in the program, where it's set to PGMINFO(*YES). Like I said, this has been around for a while, so what did they do here to improve it?
Mixed Case Data Element Names
First, in the XML file it was required that the data names be uppercase, which forced them to be uppercase on the i as well. The problem with that is that the default way to represent XML data elements with compound word names is by capitalizing the first letter of the second word (rather than using an underscore or something else). So if you have a data element "first name," it would be written in XML as firstName. Obviously, this is a mixed case situation and was not allowed—up until now. With the TR2 and TR10 refreshes, you can now do this.
This is done in the RPG program by adding a new keyword to the PGMINFO H-spec, the *DCLCASE keyword. If you have more than one keyword on the PGMINFO H-spec, then you need to make sure that *DCLCASE is the last one in the list.
Suppress PCML File Creation
Second, as noted above, the PCML XML file is generated by the RPG compile, but if you're having Java call an RPG module that has multiple subprocedures in it, you might not want a file generated for every one. For example, PCML doesn't support variable-length arrays or fields in a data structure.
The default will be to generate the PCML for all subprocedures in the compile, but if you want to suppress a couple, you use the PGMINFO H-spec with a value of either *YES (create the PCML file) or *NO (suppress the PCML file). This gives you a simple way to control this without splitting your modules out.
DB2 Enhancements
As with most refreshes, there's something in there for DB2 also, but rather than rehashing it, I will refer you to Scott Forstie's recent excellent article.
Is That All?
No, of course not. But those are the main points. Want to know what else there is? Of course you do; you're an inquisitive sort, and there are still some interesting things to bring up. So check out the TechTip coming soon. I'm out of space for today.
LATEST COMMENTS
MC Press Online