What is Jacson?
Getting started
How it works?
Contact
How to Contribute?
Developer Information How to Extend? Javadocs Changelog License Quality assurance Design Decisions
Other information
|
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 subhandlers
In Jacson many classes have to forward information to
other classes which have been registered. The information
are mainly
- chunks
- JacsonState
- JacsonReport
the current API for forwarding this information is for example
JacsonChunkDrain :
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.
- pro String
- one object per chunk, reduce garbage for large runs.
- definition how regular expressions and string functions work is
obvious.
- definition of identity unclear (for example for accounting).
- pro Chunk
- better transport of information (like line numbers).
- more oo-conform.
- possibilty to invent totally new usages.
|