A sincronização e segurança de atributos em Servlets – parte II, o 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.
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
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo