Open Source on IBM i

International Domain Names and RPG

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...

noxDB API Documentation

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...

ILEastic Tutorial : SQL Transactions

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...

STOMP Reloaded

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...

ILEastic Tutorial : Thread Local Storage

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...

ILEastic Tutorial : Plugins - Route Id

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...

ILEastic Tutorial : Plugins

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....

ILEastic Tutorial : Tour of Champions

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,...

ILEDash - First Alpha Release

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,...

Error Handling

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...

Message Service Program

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...

Modernization

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...

Demonstrate My Style

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...

Thread Local Storage and ILEastic

Thread Local Storage (TLS) is a widely used programming method that uses static  or global memory local to a thread. — Thread Local Storage on Wikipedia. So TLS is all about having a storage area per thread. This is not much of a...

Working with Validation Lists

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...

Web Services Setup with ILEastic

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...

Dynamic Configuration with ILEastic

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...

Sharing Configuration in ILEastic

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...

I can package it all by myself

... 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...

Streaming API for ILE

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...

iPKG beta 2

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...

Creating a Unix Timestamp

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);...

JDBCR4 and Batch Updates and Inserts

I had to work with a remote Oracle database lately and the choice was made to use Scott's wrapper around the Java JDBC API. The solution worked. Everything is fine. Is it? No it isn't. I had to insert some thousand records into the...

Measuring Time Spent

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...

Hey Socket, take a break!

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...