Pergunta

Pelo que entendi, beans de sessão sem estado são usados ​​para codificar a lógica de negócios.Eles não podem armazenar dados em suas variáveis ​​de instância porque sua instância é compartilhada por diversas solicitações.Então, eles parecem mais com classes Singleton.No entanto, a diferença é que contém cria (ou reutiliza do pool) a instância separada de beans de sessão sem estado para cada solicitação.

Depois de pesquisar no Google, encontrei o raciocínio de que a especificação Java EE diz que eles deveriam ser de thread único.Mas não consigo entender o motivo pelo qual são especificados como ÚNICA LINHA?

Foi útil?

Solução

Os SLSBs são de thread único devido ao contexto TX. O Principal está associado a uma instância de bean quando é chamado.Esses beans são agrupados e, a menos que o tamanho máximo do conjunto seja atingido, são processados ​​em threads separados (dependente do fornecedor).

Se os SLSBs fossem projetados como thread-safe, cada chamada teria a aparência de um servlet doGet/Post com informações de solicitação contendo Tx Context , informações de contexto de segurança e etc.Portanto, pelo menos o código parece limpo (depende do desenvolvedor).

Outras dicas

A principal razão pela qual os beans de sessão sem estado são de thread único é torná-los altamente escaláveis ​​para o contêiner.O contêiner pode fazer muitas suposições simplificadoras sobre o ambiente de tempo de execução.Uma segunda razão é facilitar a vida do desenvolvedor, pois o desenvolvedor não precisa se preocupar com nenhuma sincronização ou reentrada em sua lógica de negócio, pois o bean nunca será chamado em outro contexto de thread.

Lembro-me do raciocínio discutido nas revisões da especificação EJB 1.0 original.Eu examinaria a seção de objetivos da especificação.Ver http://java.sun.com/products/ejb/docs.html para a lista de especificações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top