Fabio Ramon wrote:
>
> N�o sei se alguem ja sugeriu isso, mas tem uma solucao que permite continuar
> invocando o construtor de sua classe sem parametros e inicializa a instancia
> interna. O unico problema dessa solucao e' que provavelmente nao e'
> thread-safe, embora tentei ao maximo tomar este cuidade com um lock (mais
> acho que nao e' suficiente. Se alguem tiver alguma sugestao...). Ai vai:
>
> import java.io.*;
>
> class MessageOutputStream extends ObjectOutputStream {
> private static ByteArrayOutputStream temp;
> private static Object lock = new Object();
>
> // Your _bos
> private ByteArrayOutputStream _bos;
>
> static OutputStream getTemp() {
> synchronized (lock) {
> return temp = new ByteArrayOutputStream();
> }
> }
>
> public MessageOutputStream() throws IOException {
> super(getTemp());
> _bos = temp;
> };
>
> public static void main(String[] args) throws IOException {
> MessageOutputStream m = new MessageOutputStream();
> }
> }
Na verdade ainda h� uma falha nesta solu��o, porque da forma
como o lock est� sendo utilizado, ele n�o � suficiente para tornar a
solu��o thread-safe. Para isso, seria preciso proteger todo o
construtor da classe ao inv�s de apenas o m�todo getTemp(), porque o
caso de corrida cr�tica acontece entre a altera��o de temp em
"temp = new ByteArrayOutputStream()" e o acesso em "_bos = temp". O
problema � que Java n�o aceita "synchronized" antes da chamada ao
super(), ent�o n�o tem muito jeito.
De qualquer forma, eu j� tinha descartado mesmo essa op��o
de usar um mecanismo de lock porque isso prejudicaria a performance
do sistema desnecessariamente.
Bem, eu j� tinha at� abandonado esse problema e adotado a
solu��o do Frederico mesmo, mas j� que o assunto ressurgiu, acho
que vou pensar nisso mais um pouco para ver no que d�.
Um abra�o,
Einar Saukas
Technical Consultant
Summa Technologies, Inc.
http://www.summa-tech.com
--------------------------- LISTA SOUJAVA ---------------------------
http://www.soujava.org.br - Sociedade de Usu�rios Java da Sucesu-SP
[para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
---------------------------------------------------------------------