J2EE & Threads

Eu de novo …

Estou trabalhando com Webwork & cia e vou começar com EJBs também … então queria saber se alguem tem dicas/url/caixapostal/tutorial/livro(gratis)/qqcoisa sobre o que deve me preocupar em relação ao controle de threads em uma aplicação J2EE.

Imagino que tirando os statics tudo seja criado para cada sessao de usuario … entao se eu nao usasse nadica de static nao teria problema, estou certo? :roll:

Obrigado

Na plataforma J2EE a parte de Threads fica a encargo do Container, ele que ira gerenciar para vc esta parte…

Nao tem mesmo muito o que se preocupar com Threads num EJB, a menos que vc resolva usa-las… coisa que, segundo a especificacao da J2EE, vc nem deveria estar fazendo :wink:

Sobre thread-safety, é importante lembrar que nenhum EJB pode ser considerado thread-safe, com exceção dos stateful session beans, se não me engano. Alguém aqui no fórum provavelmente vai me corrigir e xingar por isso :smiley:

É preciso lembrar também que, potencialmente, vai ter um zilhão de usuários batendo nos métodos dos seus EJB simultaneamente, e que esse zilhão de usuários pode estar lidando com EJBs que não estão necessariamente na mesma JVM - vc pode ter seu application server rodando em um cluster… logo, confiar em estado ou statics é uma má idéia, se vc quer evitar problemas quando este tipo de coisa realmente acontecer :wink:

Realmente, NAO DEVEMOS EM HIPOTESE ALGUMA INTERVIR NO CONTROLE DE THREADS DO WebContainer ou do EJB Container…

EJBContainer.

SessionBean Stateful - ThreadSafe
SessionBean Stateless - MultThreading

Metodos com Transacao (Support, Required, RequiresNew, Mandatory) em:
EntityBean - ThreadSafe
MessageDrivenBean - ThreadSafe

Metodos sem Transacao (NotSupport, Support ou Never)

 EntityBean - MultiThread
 MessageDrivenBean - MultiThread

WebContainer

Servlet - MultiThread
Servlet - SingleThreadModel - ThreadSafe
ServletContext - MultiThread
HttpSession - ThreadSafe

[]’

Soh um porem rapido aqui - o SingleThreadModel foi deprecado na nova versao da API de Servlets (2.4), e no geral eh uma maneira horrivel de se programar… entao, nao use, por favor :smiley: