A sincronização e segurança de atributos em Servlets – parte II, o SingleThreadModel

 

A primeira parte do artigo “A sincronização e segurança de atributos em Servlets” tratou de descrever uma solução para a proteção de atributos de sessões, mas que se aplicam também a atributos de contexto, etc.

 

Nesta segunda parte, será vista uma outra solução, porém, não recomendada. Tem-se como objetivo principal deste artigo mostrar os males da interface SingleThreadModel.

 

O SingleThreadModel é uma interface que quando implementada por um servlet torna-o imune a ser acessado por mais de uma thread ao mesmo tempo.

 

De acordo com a definição acima, em alguns casos tem-se a nítida impressão de resolver os problemas com multi-threading. A listagem 1 foi retirada da primeira parte do artigo e mostra um método acompanhado de synchronized em sua declaração.

 

public synchronized void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

            //códigos adicionais por parte do programador

 

            //exemplo de adição/alteração de atributos

            HttpSession session = req.getSession();

            session.setAttribute(“nome do atributo”, “valor”);

}

Listagem 01

 

Como dito anteriormente, esta não é uma boa técnica de segurança, visto que threads de diferentes servlets continuarão acessando o método ao mesmo tempo (um thread por servlet).

 

Implementar SingleThreadModel não é diferente! Por mais que todos os servlerts implementem esta interface, diferentes servlets rodando uma única thread continuarão acessando os métodos e atributos.

 

Outro fator a se destacar é o fato de a performance da aplicação apresentar quedas drásticas, visto que as capacidades de acesso serão reduzidas, sem ao menos prover a segurança ideal que seria um motivo para o programador pensar em utilizá-la.

 

A solução proposta na primeira parte do artigo continua sendo a melhor, ou seja,  sincronizar apenas os trechos de código que devem ser thread-safe e nada mais! É altamente recomendável, em caso de uso desta interface, uma alteração em todo o código, e por mais que seja trabalhosa, será mais bem aceita.

 

Concluindo, ter uma visão básica sobre segurança de atributos é altamence necessário antes de se começar a programar uma aplicação web. No primeiro artigo foi descrita a maneira recomendada e nesta segunda parte uma outra a ser destacada, mas que deveria ser mostrada para criar no leitor uma visão crítica sobre qual utilizar.

 

Um grande abraço e até a próxima!

Adriano Castro