cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Francesco Chicchiriccò <francesco.chicchiri...@tirasa.net>
Subject Re: [c3] Log*Transformer
Date Mon, 21 Feb 2011 10:32:40 GMT
On 21/feb/2011, at 10.56, Simone Tripodi wrote:

> Hi all,
> I'd tend agree with Reinhard if the CloseShield functionality is not
> simple (and I mean very simple, almost silly) to replicate into our
> module.
> I'm sure the CloseShield in the IO takes care of more general
> PrintStream use cases rather then just the sysout, so I'm worried that
> the proposed patch is not enough...

For the sake of clarity: I've proposed that naive patch mainly because I think that Log*Transformers
are there to be used only for dev purpose, where System.out or FileOutpuStream are the only
viable candidates.

Anyway, I've taken a quick look to http://s.apache.org/commons-io-close-shield-outputstream
and its parent class http://bit.ly/h7AolY: it seems to me that it would be quite easy to embed
these two classes in order to have a CloseShield functionality in cocoon3-sax.

If you think that it could be useful to have such functionality there (also for usage by other
classes than just Log*Transformers), please let me know.

Cheers.

> 2011/2/18 Francesco Chicchiriccò <francesco.chicchiricco@tirasa.net>:
>> On 18/feb/2011, at 20.28, Reinhard Pötz wrote:
>> 
>>> I had to comment the usage of the Log*Transformers in the sample sitemap because
they break the integration tests (run it.sh or it.bat from C3's root directory). The problem
is that the logfile is written to the file system which doesn't work in a multi-module build
(<map:parameter name="logfile" value="target/logasxml.log" /> -> there is no target
directory at the base directory).
>>> 
>>> IMO the best idea would be changing the transformer configurations to use System.out
but the current implementations close the output stream in their finish methods. That's of
course useful for FileOutputStreams but mustn't happen for System.out.
>>> 
>>> IMO the best solution would be wrapping the usage of System.out with Commons
IO's CloseShieldOutputStream (http://s.apache.org/commons-io-close-shield-outputstream). However,
this would introduce a dependency of cocoon-sax on commons-io which should be avoided for
a minor use case like this.
>>> 
>>> I see two possible solutions:
>>> 
>>> a) move the Log*Transformers to cocoon-optional and wrap the usage
>>>   of System.out with the CloseShieldOutputStream
>>> 
>>> b) implement the CloseShield functionality ourselves and leave them
>>>   where they are.
>>> 
>>> I would prefer option a) because it's the simpler solution and leads to less
code.
>>> 
>>> WDYT?
>> 
>> What if we choose a third option, like changing
>> 
>>                this.outputStream.close();
>> 
>> to
>> 
>>                if (System.out.equals(this.outputStream)) {
>>                    this.outputStream.flush();
>>                } else {
>>                    this.outputStream.close();
>>                }
>> 
>> in the finish() body, for both transformers?
>> 
>> I made these simple modifications (in the attached patch) and, at least on my machine,
the integration tests are running successfully.
>> 
>> Let me know if this solution is acceptable, thanks.
>> 
>> Regards.

Mime
View raw message