|Developer Information > Design Decisions||2005-10-04 00:11:20 v0.90|
|Jacson, say Jackson, think J-Scan|
|Download Jacson | Sourceforge Project Summary | Jacson Home | SourceForge Home|
What is Jacson?
How it works?
How to Contribute?
How to Extend?
Well, of course there were a few. :-) Mentioned here are the hard ones. Not to forget that some of my collegues might call me cunctator when I'm out.
Distributing reports and states to subhandlersIn Jacson many classes have to forward information to other classes which have been registered. The information are mainly
void putChunk(JacsonState, JacsonReport, String) void summary(JacsonReport)This API would allow very dynamic changing of states and reports at runtime. On the other hand it requires the JVM to pass additional parameters many times (for large jobs) per chunk. An alternative way to approach the problem would be to register the JacsonState and JacsonReport separately from passing the chunks. This would mean overhead in the case we'd need to change JacsonStates and -Reports in the middle of a job (which is actually not the case when you have a XML based hierarchy), and look like:
void setState(JacsonState) void setReport(JacsonReport) void putChunk(String) void summary()I'll most likely rework Jacson in one of the next releases to the latter more appropiate and more time efficient layout (at the cost of a slightly larger API and slightly more internal storage used by the internal Jacson classes).
Push or pull?My first approach chunks were passed in a pull fashion: Filters pulled chunks from the source. Evaluations pulled it from the Filters. But then it looked that a push is much easier: Chunks are generated in the Source and pushed into the Filter queue and then in the Evaluations. The advantage of pushing chunks is, that they can easily be multiplied and forwarded to different destinations where they are treated differently. This did not seem easyly to accomplish with a pull (like Java InputStreams).
What is a chunk?The one I'm still most undecided with is the modellation of a chunk. Two ways, either a special object or a plain String.