Last Friday was a holiday in Ontario so I did not publish a tip of the week. That means this week there will be two tips!! Both tips relate to new function in InfoSphere Streams 3.2.1.

Tip #1: @SharedLoader

There was a new annotation added for Java operators: @SharedLoader in the 3.2.1 version of Streams. This annotation causes operators (with the annotation) in the same PE that have the same dependencies to share a class loader. Prior to 3.2.1 each operator in a PE had its own class loader. Why did we add the annotation?? By using a common class loader, common dependencies are only loaded once. There is also a limitation in Java that a native library could only be loaded into one class loader. Allowing operators to share a class loader enables operators that load the same native library to be fused into a PE. For more information refer to @SharedLoader summary information in the Knowledge Center.

Tip #2: Updating a map within a for loop

This code does not work:

mutable map myMap = {.......};
for (int32 index in myMap) {
  myMap[index] = "someNewValue";   // This is an error because within the for loop myMap is immutable
In InfoSphere Streams 3.2.1 a new function called keys was introduced. This code does work:

for (int32 index in keys(myMap)) {
    myMap[index] = "someNewValue";  // Now okay because the list returned by keys is what we are iterating over
The only caveat is that the behavior is undefined when adding or removing elements in the map within the loop.

Bonus Tip: Check out What’s New

I feel bad about missing a week so here is a bonus tip… What’s New contains information about new features in InfoSphere Streams. Always check this out to see the latest features.

Join The Discussion