[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: [Exceção NotEnoughSpaceException]
- Subject: Re: [Exceção NotEnoughSpaceException]
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Wed, 12 May 1999 10:15:19 -0300
Tiago Silveira writes:
> Nelson Guedes Paulo Junior <npaulo@linux.ime.usp.br> wrote:
> > Em um e-mail da lista, perguntaram o que fazem os metodos
> > setFillFactor() e getFillFactor() da interface recordset....
> > Na resposta, o professor colocou que um tal metodo update() retornaria a
> > exceção Not EnoughSpaceException... Mas pelo texto do CAMAT, a função
> > que deveria realizar essa tarefa (no caso o update()) deveria procurar
> > espaço em outras paginas e so retornar algum erro caso não fosse
> > possivel alocar o record em alguma pagina..... Não é contraditorio
> > passar a "batata-quente" para alguem que não deveria saber como resolver
> > esse problema? Afinal quem chamou o metodo update() não deveria saber o
> > que ele esta fazendo e já que o problema é facil de resolver
> > internamente (é so procurrar outro lugar para colocar o record) não
> > seria melhor faze-lo internamente?
>
> ----
>
> Acho que o update() deve chamar o método que aloca o registro, e se não for
> possivel mesmo arrumar espaço pra ele (nem no lugar que ele estava, nem num
> novo lugar) aí sim ele lança a NotEnoughSpace... Também não peguei muito bem
> essa parte, mas eu tentaria isso primeiro...
Concordo que um método assim é melhor para usuário, mas não é o que eu estou
pedindo. O método update() proposto tenta atualizar o registro na página
em que ele está e lança NotEnoughSpaceException se isso não for possível
por falta de espaço na página. Caso falte espaço na página, ele lança a
exceção e pronto. Ele não tenta arrumar espaço para o registro em alguma
outra página.
É claro que seria fácil resolver esse problema internamente, em vez de
empurrá-lo para o usuário. Do ponto de vista de quem vai usar o pacote,
é muito melhor ter um método update que primeiro tenta atualizar o
registro sem mudá-lo de página e, caso não consiga, tenta arrumar espaço
noutra página. A declaração desse metodo deveria ser um pouco diferente
da do metodo proposto. Ela poderia ser assim:
public abstract long betterUpdate(long recordId, DBObject obj)
throws InvalidRecordIdException, WrongTypeException,
NotEnoughSpaceException, java.io.IOException;
A única diferença na declaração é que este método retorna o recordId do
registro atualizado. Caso o registro não tenha mudado de página, o
recordId retornado é igual ao que foi recebido como parâmetro. E a exceção
NotEnoughSpaceException só é lançada se não houver espaço para o
registro atualizado em lugar nenhum.
Se vocês preferirem implementar um método assim, ótimo. Podem até
chamá-lo de update mesmo, em vez de betterUpdate. Mas nesse caso
implementem também um método updateInPlace, que faz o que eu havia
pedido. Ele nem precisa ser publico.
Por que faço tanta questão de um updateInPlace ? Por causa da próxima
etapa. Imaginem que vocês tem um índice que referencia os registros. Por
exemplo, registros de Alunos poderiam ser indexados pelo campo
numeroUSP. Se você atualizar o campo endereço de um aluno sem mudar de
página o registro do Aluno, a entrada do índice que referencia esse
registro continuará correta. Se o registro mudar de página, o índice
precisará ser atualizado.
Reverbel