RPG Next GenBlog2021-11-28T00:00:00+01:00http://blog.rpgnextgen.com/feed/atomMihael Schmidtmihael@rpgnextgen.comJBatch Example on IBM ihttps://blog.rpgnextgen.com/2021/11/28/jbatch-example-on-ibm-i<![CDATA[My last blog post was about batch processing on IBM i with Jakarta EE Batch implementation JBatch from IBM. I didn't get into too much detail in that post as it was only to provide a brief overview of Jakarta EE Batch. In this blog post I want to present and explain one of my JBatch example applicat]]>2021-11-28T00:00:00+01:00JBatch on IBM ihttps://blog.rpgnextgen.com/2021/11/18/jbatch-on-ibm-i<![CDATA[This whole blog has been very RPG centric so far. But some of you also know that I also do some Java programming (and also some Node.js+TypeScript from time to time). Lately I got involved into some Java projects which also include IBM i as a potential target platform. Java on IBM i has a long his]]>2021-11-18T00:00:00+01:00International Domain Names and RPGhttps://blog.rpgnextgen.com/2021/11/12/international-domain-names-and-rpg<![CDATA[I just realized that I haven't written any new blog entry for some months now. It is not that there was nothing interesting to write about but most things were either not a topic for the blog or was too complex/big for the blog. This blog entry is about IDN or IDNA - International Domain Names (in]]>2021-11-12T00:00:00+01:00noxDB API Documentationhttps://blog.rpgnextgen.com/2021/08/27/noxdb-api-documentation<![CDATA[I am using noxDB for some time now and I always stumbled upon some API calls where I just couldn't remember either the exact function name, parameters or return value. Now it is not only all readily available in my ILEDocs instance at rpgnextgen.com for looking up the information but also for ever]]>2021-08-27T00:00:00+02:00Kong Dashboardhttps://blog.rpgnextgen.com/2021/08/17/kong-dashboard<![CDATA[Kong Dashboard Kong (or Kong Gateway) is a very lightweight API gateway. What is an API gateway? An API gateway takes all API calls from clients, then routes them to the appropriate microservice with request routing, composition, and protocol translation. Typically it handles a request by]]>2021-08-17T00:00:00+02:00ILEastic Tutorial : SQL Transactionshttps://blog.rpgnextgen.com/2021/06/13/ileastic-tutorial-sql-transactions<![CDATA[In most IBM i shops SQL is the primary way of accessing data or is at least on its way to be it. And this is a good thing. But as ILEastic is a multi threaded framework we need to be aware of the fact that multiple threads may be using SQL transactions simultaneously. We need to make sure that the]]>2021-06-13T00:00:00+02:00STOMP Reloadedhttps://blog.rpgnextgen.com/2021/06/06/stomp-reloaded<![CDATA[Most people have probably assumed that the next blog post will again be about "ILEastic Tutorial : Tour of Champions". I will definitely continue this series but I had some time to work on the STOMP client again. And this time I have working STOMP service program which implements the STOMP specific]]>2021-06-06T00:00:00+02:00ILEastic Tutorial : Thread Local Storagehttps://blog.rpgnextgen.com/2021/05/15/ileastic-tutorial-thread-local-storage<![CDATA[Another part of the mini series "ILEastic Tutorial : Tour of Champions" is available: Thread Local Storage. This part will cover what Thread Local Storage is and how it can be used. It will open up a whole new load of possibilities from authentication to authorization and more specific setting of ]]>2021-05-15T00:00:00+02:00ILEastic Tutorial : Plugins - Route Idhttps://blog.rpgnextgen.com/2021/05/13/ileastic-tutorial-plugins-route-id<![CDATA[This is a little update on the mini series "ILEastic Tutorial : Tour of Champions". Last time I covered plugins, those "special" procedures which are executed on the exit points of the ILEastic request handling workflow. There is another little feature which is also part of the plugins chapter of ]]>2021-05-13T00:00:00+02:00ILEastic Tutorial : Pluginshttps://blog.rpgnextgen.com/2021/05/01/ileastic-tutorial-plugins<![CDATA[This is the second part of my mini series "ILEastic Tutorial : Tour of Champions". Today I will cover ILEastic plugins. In Java you would call them "Servlet Filter". They intercept a request before any routing to an endpoint/servlet has been done. It is a great way to extend the functionality of you]]>2021-05-01T00:00:00+02:00ILEastic Tutorial : Tour of Championshttps://blog.rpgnextgen.com/2021/04/25/ileastic-tutorial-tour-of-champions<![CDATA[This will be a series of little articles which show how to implement a microservice project on IBM i. I will start from a blank (or template) project and work my way through the different parts of the application. I will be using tools like git, bash, ssh, make to cover my basic needs for a develo]]>2021-04-25T00:00:00+02:00ILEDash - First Alpha Releasehttps://blog.rpgnextgen.com/2021/04/03/iledash-first-alpha-release<![CDATA[I have been developing web services with ILEastic for some time now and the framework is really great in what it does and provides. It handles all the HTTP protocol stuff for you. It supports things like a plugin system, Basic Auth, JWT, JSON, request routing out of the box with a developer friendl]]>2021-04-03T00:00:00+02:00Error Handlinghttps://blog.rpgnextgen.com/2021/02/28/error-handling<![CDATA[I think this is a difficult topic and many people will obviously have their own solution to this problem. And this is not really an RPG only topic. This problem exists in every programming language (I have encountered so far). What to do when an error can occur? Should I catch/monitor the ]]>2021-02-28T00:00:00+01:00Message Service Programhttps://blog.rpgnextgen.com/2021/02/27/message-service-program<![CDATA[The message project has been extended by some procedures. Now you can also use messages from message files. You can get the message service program from the save file in the download section of the project or fetch the source from the git repository. The documentation has been uploaded to my ILE]]>2021-02-27T00:00:00+01:00Modernizationhttps://blog.rpgnextgen.com/2021/01/01/modernization<![CDATA[I think there is not one topic in the IBM i community which has been talked so much about as modernization. And here I am also talking about it :) . The modernization drum has been beaten for as long as I can think of and every time I hear about it it is just about putting lipstick on a pig and m]]>2021-01-01T00:00:00+01:00Demonstrate My Stylehttps://blog.rpgnextgen.com/2020/12/31/demonstrate-my-style<![CDATA[There are many web sites which discuss the technical parts of RPG covering the latest bifs and opcodes and they are great for looking up specific things about RPG. But when you are new to RPG and perhaps programming in general you actually might not know what a "good" programming style is and you ]]>2020-12-31T00:00:00+01:00Thread Local Storage and ILEastichttps://blog.rpgnextgen.com/2020/12/05/thread-local-storage-and-ileastic<![CDATA[ Thread Local Storage (TLS) is a widely used programming method that uses static  or global memory local to a thread. &mdash; Thread Local Storage on Wikipedia. So TLS is all about having a storage area per thread. This is not much of a concern for most RPG developers. Most of us are wor]]>2020-12-05T00:00:00+01:00Working with Validation Listshttps://blog.rpgnextgen.com/2020/10/11/working-with-validation-lists<![CDATA[Probably not many of you have heard of validation lists on IBM i. So from the IBM Knowledge Center Validation list objects provide a method for applications to securely store user authentication information. Validation lists can store any data associated with a key. The good thing about a val]]>2020-10-11T00:00:00+02:00Web Services Setup with ILEastichttps://blog.rpgnextgen.com/2020/10/04/web-services-setup-with-ileastic<![CDATA[I have written some articles about writing web services with ILEastic and it is really as simple as already shown. And most of the time it is not any easier in other languages. You have to do/check/consider the same things regardless of the programming language. But what I didn't cover so far was h]]>2020-10-04T00:00:00+02:00Dynamic Configuration with ILEastichttps://blog.rpgnextgen.com/2020/07/22/dynamic-configuration-with-ileastic<![CDATA[My last post was about sharing configuration in an ILEastic web service. This is especially handy when you split your web service application into multiple modules. This is not necessary but may be a good idea if you have many end points / routes so that your modules don't grow too big. But sometim]]>2020-07-22T00:00:00+02:00Sharing Configuration in ILEastichttps://blog.rpgnextgen.com/2020/06/20/sharing-configuration-in-ileastic<![CDATA[I stumbled upon a little problem I first had some trouble to wrap my head around. My situation was the following: I had an ILEastic web service with multiple modules I wanted to share the configuration data with all modules So for this kind of internal sharing of data I had decided to use a glob]]>2020-06-20T00:00:00+02:00I can package it all by myselfhttps://blog.rpgnextgen.com/2020/05/21/i-can-package-it-all-by-myself<![CDATA[... and also provide those packages to others. But you probably know this expression much better as "I can read it all by myself". I have read those books from Dr. Seuss very often and with pleasure. Some were real tongue twisters. But what I really like about the books is that they inspire you to]]>2020-05-21T00:00:00+02:00Streaming API for ILEhttps://blog.rpgnextgen.com/2020/05/08/streaming-api-for-ile<![CDATA[For those of you who cannot associate anything with streams in programming: A stream consists of an emitter (provider) of data and a sequence of one or more consumers of data whereas the consumer may pass the data further to the next consumer constructing a streaming data pipeline. Emitter The ]]>2020-05-08T00:00:00+02:00ILEDocs on AWShttps://blog.rpgnextgen.com/2020/05/03/iledocs-on-aws<![CDATA[Hi folks, ILEDocs has moved or at least part of it. More specifically the backend of ILEDocs has moved from a private VServer to an AWS EC2 instance. And it was super easy. create an AWS account on the free tier create an EC2 instance on the free tier copy the iledocs.rest.jar to the EC2 instanc]]>2020-05-03T00:00:00+02:00iPKG beta 2https://blog.rpgnextgen.com/2020/04/25/ipkg-beta-2<![CDATA[Hi folks! The next beta is out with some new features. First a simple but important one: VERSION action. Now you can see which iPKG client version you got. Currently the version is stored in the user defined attribute of the object. But this can only store 10 characters and only one value. There]]>2020-04-25T00:00:00+02:00iPKG ... package management for ILE in beta phase ... and now what?https://blog.rpgnextgen.com/2020/04/16/ipkg-package-management-for-ile-in-beta-phase-and-now-what<![CDATA[Hi folks! Happy Easter! I am in the midst of developing an open source package management system for IBM i. Now many people may say: "We already have yum for managing packages on IBM i. I should get up-to-date." Yes ... and no. Yes: yum manages packages No: It does not manage packages for the who]]>2020-04-16T00:00:00+02:00Creating a Unix Timestamphttps://blog.rpgnextgen.com/2020/04/15/creating-a-unix-timestamp<![CDATA[As most people know the Unix timestamp is an integer value which represents the seconds from 1970-01-01. There is currently no built-in function for it but you can easily calculate it by yourself. **FREE ctl-opt dftactgrp(*no) actgrp(*caller); dcl-pr sys_getUtcOffset extproc('CEEUTCO'); offse]]>2020-04-15T00:00:00+02:00iPKG: Global = Localhttps://blog.rpgnextgen.com/2020/03/07/ipkg-global-local<![CDATA[In most contexts this is not true : Global = Local But in the case of iPKG there is no difference between a global , for all users, installation of packages or a local installation (scoped to a single user) from the perspective of the package manager. Objects get restored in a library and stream]]>2020-03-07T00:00:00+01:00Node.js Template Projecthttps://blog.rpgnextgen.com/2020/02/15/nodejs-template-project<![CDATA[During my journey through the Node.js universe I have missed a good template for what I wanted to do. I searched for a simple template for a REST service on which I can build on. You can start with this by following the next couple of steps and are ready to go git clone https://m1hael@bitbucket.o]]>2020-02-15T00:00:00+01:00libxlsxwriter : Date/Time and Image Supporthttps://blog.rpgnextgen.com/2019/03/15/libxlsxwriter-datetime-and-image-support<![CDATA[libxlsxwriter is a great library for creating documents in the Open Document spreadsheet format. Even so its code is very strict (and good) ANSI C code some things does not work out-of-the-box for integration in RPG and must be tweaked a little bit. This was also the case for image and date/time]]>2019-03-15T00:00:00+01:00Write Unicode Characters with libxlsxwriterhttps://blog.rpgnextgen.com/2019/02/27/write-unicode-characters-with-libxlsxwriter<![CDATA[Hi, the project libxlsxwriter lets your programmatically create spreadsheets in the Open Document format which is also used by OpenOffice, Microsoft Office, ... . Sometimes you need to add a special sign to some cell, f. e. the Euro currency symbol. If your native codepage does not support it yo]]>2019-02-27T00:00:00+01:00ILEDocs - Multiple Version Supporthttps://blog.rpgnextgen.com/2018/10/03/iledocs-multiple-version-support<![CDATA[Hi, as some of you have definitely some programs or service programs in production in different/multiple versions it can become tricky to manage and provide the documentation for each version of the code. ILEDocs has now built-in support for multiple versions of your code. Just use the @version ]]>2018-10-03T00:00:00+02:00ILEDocs - Release 2.1.0https://blog.rpgnextgen.com/2018/08/15/iledocs-release-210<![CDATA[Hi, at the moment I have the opportunity to work on the ILEDocs project. There has been some smaller fixes and features and some bigger ones. The biggest new feature is the search functionality. You have now an input box in the navigation bar where you can search for a specific module, procedure o]]>2018-08-15T00:00:00+02:00Arraylist - Bugfixhttps://blog.rpgnextgen.com/2018/07/27/arraylist-bugfix<![CDATA[A little memory leak has crept into the code. The arraylist_dispose() method did not deallocate all the memory which has been previously allocated. This has been fixed now in the current version. Every user of the JSON service program also needs to update the arraylist service program as it is use]]>2018-07-27T00:00:00+02:00BlueDroplet - Next Stepshttps://blog.rpgnextgen.com/2018/06/21/bluedroplet-next-steps<![CDATA[For those of you who don't know yet: BlueDroplet is a native REST framework for all ILE languages on IBM i. BlueDroplet consists of multiple ILE modules which are bound to an ILE program. Here is an overview of the structure of such a program. BlueDroplet is a work-in-progress. Some rudimentary t]]>2018-06-21T00:00:00+02:00Linked List Release 1.4.0https://blog.rpgnextgen.com/2018/06/10/linked-list-release-140<![CDATA[The Linked List service program has been a very stable service program with a stable API. The only thing that was a little bit clumsy was the sort function. The API design of the function offered great flexibility. You could implement your own sorting with your own sort implementation. The base so]]>2018-06-10T00:00:00+02:00ILEDocs Database is growing again!https://blog.rpgnextgen.com/2018/05/29/iledocs-database-is-growing-again<![CDATA[ILEDocs has some fresh additions, namely the API documentation of the projects JSON Utilities, Linked List and Linked Map. We have almost all of the projects on board which are currently on the old documentation site at Sourceforge.net. If you have an open source library and would like to add it ]]>2018-05-29T00:00:00+02:00JDBCR4 and Batch Updates and Insertshttps://blog.rpgnextgen.com/2018/04/04/jdbcr4-and-batch-updates-and-inserts<![CDATA[I had to work with a remote Oracle database lately and the choice was made to use Scott&apos;s wrapper around the Java JDBC API. The solution worked. Everything is fine. Is it? No it isn&apos;t. I had to insert some thousand records into the Oracle database. What JDBCR4 supports is something lik]]>2018-04-04T00:00:00+02:00ILEDocs Database is growing!https://blog.rpgnextgen.com/2018/03/26/iledocs-database-is-growing<![CDATA[Slowly but steadily the ILEDocs project is growing. Today with the new version of the MESSAGE service program the API documentation has been uploaded to the ILEDocs database, making the API publicly available without having to search through any source codes. What does that mean for the ILE develop]]>2018-03-26T00:00:00+02:00Java Git Client on IBM ihttps://blog.rpgnextgen.com/2018/03/25/java-git-client-on-ibm-i<![CDATA[For sure everybody heard about the Open Source PTFs with the git client and node package, etc. But if you just want to use git to pull some code from a repository you could have had that feature for years without installing any extra PTF. Eclipse JGit project Some people may actually know that pr]]>2018-03-25T00:00:00+01:00libxlsxwriter : Creating spreadsheets nativelyhttps://blog.rpgnextgen.com/2018/03/21/libxlsxwriter-creating-spreadsheets-natively<![CDATA[A short while ago I stumbled over the C library libxlsxwriter from John McNamara on github. It is a C library for creating XLSX documents. More specifically it creates files in the Open Document spreadsheet format. Which can be used by Microsoft Excel but also by OpenOffice and every application wh]]>2018-03-21T00:00:00+01:00RDi Hover Supporthttps://blog.rpgnextgen.com/2018/03/07/rdi-hover-support<![CDATA[At the moment I have access to an RDi installation and use it on a daily basis (besides using MiWorkplace =) ). Some people have written about the new hover support for RDi which is quite nice (and MiWorkplace has also a nice hover support to some extent) but I haven't read or heard about a very n]]>2018-03-07T00:00:00+01:00Measuring Time Spenthttps://blog.rpgnextgen.com/2018/02/12/measuring-time-spent<![CDATA[Sometimes you have a block of code and just want to know how long it took the machine to execute it. The Java developers have some really cool metric libraries like the Dropwizard subproject Metrics. But for the quick and dirty case there is always System.currentTimeMillis(); For the RPG devel]]>2018-02-12T00:00:00+01:00Project CodeNoteshttps://blog.rpgnextgen.com/2018/01/27/project-codenotes<![CDATA[At the time I still developed the RPG Next Gen Editor I have received some requests regarding offline support. It was not as much about editing the code but more about being able to view the code (perhaps for some reviewing and later refactoring). About 10 years forward I am picking up the topic ]]>2018-01-27T00:00:00+01:00Modular Programminghttps://blog.rpgnextgen.com/2017/10/28/modular-programming<![CDATA[ Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality. --- from Wikipedia I think that i]]>2017-10-28T00:00:00+02:00Processing XML Datahttps://blog.rpgnextgen.com/2017/10/10/processing-xml-data<![CDATA[For some time now I had the idea to port a REST service of mine from Java to RPG. Mostly just out of curiosity because the REST service was running well enough. The REST service was about serving the geo coordinates of the boundaries of postalcode areas. Import The data source for these coordin]]>2017-10-10T00:00:00+02:00Even more Integration Possibilitieshttps://blog.rpgnextgen.com/2017/08/26/even-more-integration-possibilities<![CDATA[IBM i stands for integration. But it is most of the time very troublesome to connect to and integrate anything outside the IBM family. In the open world (outside the IBM i box) there are numerous ways to integrate and communicate between systems and applications.One way to do it is to use a messagin]]>2017-08-26T00:00:00+02:00Hey Socket, take a break!https://blog.rpgnextgen.com/2017/08/24/hey-socket-take-a-break<![CDATA[Ever wanted a normal (blocking) socket connection to listen for data but also wanted to check for a condition if it should stop listening? Problem is that the default BSD 4.3 version of the socket API (which is the default API to bind to) does not support setting timeouts. Trying to set a timeout]]>2017-08-24T00:00:00+02:00ILEDocs - Project Infohttps://blog.rpgnextgen.com/2017/07/24/iledocs-project-info<![CDATA[Hi, as you may have already read on the MiWorkplace release info I also have been busy working on ILEDocs. First: Some REST APIs have different paths now which renders it incompatible with the previous version. The good thing is that we now also support something like a project documentation. If ]]>2017-07-24T00:00:00+02:00Rant about XMLSERVICEhttps://blog.rpgnextgen.com/2017/05/21/rant-about-xmlservice<![CDATA[Hi, First of all I want to make it clear that I have nothing against XMLSERVICE. I think it is a nice tool though I never had to work with it due to my current job and thus have no real life experience with it. And this ranting is not really about the product itself but more about the marketing]]>2017-05-21T00:00:00+02:00Arraylist @ Bitbuckethttps://blog.rpgnextgen.com/2017/05/14/arraylist-bitbucket<![CDATA[Hi, as some may have noticed I am moving some of my projects to the OSSILE project. One of those projects is Arraylist. As the OSSILE project now uses git submodules to manage sub projects I have moved the source of Arraylist to its own repository at https://bitbucket.org/m1hael/arraylist So n]]>2017-05-14T00:00:00+02:00Continuous Integration on IBM ihttps://blog.rpgnextgen.com/2017/05/14/continuous-integration-on-ibm-i<![CDATA[Hi, continuous integration has been a topic on any other platform for some years now. But on IBM i I never heard that term in any discussion. There is a myriad of open source tooling support on any platform but not for IBM i ... or rather there is tooling for anything but for ILE on IBM i. The c]]>2017-05-14T00:00:00+02:00Lists: Arraylist vs Linked Listhttps://blog.rpgnextgen.com/2017/02/19/lists-arraylist-vs-linked-list<![CDATA[Hi, I am just moving my service program Linked List to the OSSILE project and I am again wondering if people know why there are two list implementations and when to use which implemenation or when to use a list at all. I am doing most of my development in the Java world and there lists are reall]]>2017-02-19T00:00:00+01:00BlueDroplet at ILEDocshttps://blog.rpgnextgen.com/2017/02/10/bluedroplet-at-iledocs<![CDATA[As there is now a functioning ILEDocs site available at rpgnextgen.com I added some real content to it. The BlueDroplet project is now in an alpha stage and can already be used for some REST services. The ILEDocs documentation of the BlueDroplet gives you a nice and quick overview of the availab]]>2017-02-10T00:00:00+01:00BlueDroplet and the library listhttps://blog.rpgnextgen.com/2017/02/10/bluedroplet-and-the-library-list<![CDATA[BlueDroplet now supports changing the library list on startup. You can either add library list entries to the user portion of the library list or replace the whole user portion of the library list. Happy RESTing! Mihael ]]>2017-02-10T00:00:00+01:00ILEDocs Revivalhttps://blog.rpgnextgen.com/2017/02/09/iledocs-revival<![CDATA[Hi, creating documentation has always been a major PITA in software development. Tools try to ease the process of creating good documentation. There are different kind of documentations (mostly different by the scope and/or detail and/or perspective) and not every documentation tool is good for ]]>2017-02-09T00:00:00+01:00