I've been working on the Groovy Console plugin for Spoon, and I seem to have been able to sidestep the PermGen issues (at least the ones I was having during my last post). Also I added some more functionality, such as the ability to get JobMeta and JobGraph information using job, jobGraph, activeJob(), and activeJobGraph().
I really wanted to have the ability to do "automated" testing from this console, so I added a runTrans() helper method. If you pass in a TransMeta object, it will run that transformation; otherwise, it will try to run the active transformation.
However, in implementing the runTrans() method I ran into a couple of issues:
1) The execution settings dialog pops up if you run Spoon.executeTransformation() with no arguments.
2) If you are looping and trying to run the transformation once during each loop, the executions will step on each other as they are executed asynchronously.
To fix 1, I faked a call to executeTransformation() using a replay date of the current time, which prevents the execution settings dialog from being displayed. As far as getting the settings configured, that will be a little trickier. So runTrans() at the time of this writing works on transformations with no execution-specific settings, or on transformations that have already been run with execution-specific settings. This is because the transformation is effectively replayed.
To fix 2, I put in a hack after the call to executeTransformation() to sleep for 10 msec while the trans is NOT running, then to sleep for 100 msec while the trans IS running. This is a classic no-no for concurrency but it's in there to get things working in the happy-path case. This turns runTrans() into a synchronous call, which is fine for my purposes in the console.
Using the database() and runTrans() methods, I was able to automate the testing of a single transformation using two separate database connections:
One thing to note is that I'm changing the step metadata using "back-door" API calls, so the transformation graph is not marked as "dirty". If for some reason you need to save the changes you should be able to call some form of Spoon.save API method.
The updated code and downloads are on GitHub. Have fun!
No comments:
Post a Comment