Será que uma Thread resolveria o meu problema?

Estou desenvolvendo uma taglib que seta as informações digitadas através de reflection. A única forma que encontrei de recuperar o nome dos metodos que estão na tag, foi adicionando as informações da tag em uma variavel estatica. Desta forma, após o refresh faço uma chamada no metodo estatico e recupero a coleção com os dados.
O único problema, é que como uma variavel estatica não possui instancia, neste caso, se uma outra pessoa acessar uma outra página, os valores da collecion serão alterado, com isso, causando incositencia nos dados.
Acho que uma Thread resolveria o problema. Nunca tive a necessidade de criar uma, mas isso é apenas o começo. No caso, pretendo desenvolver uma estrutura de cache que tabém utilizaria uma variavel estatica e com isso, o problema ocorreria novamente.
Alguém poderia me ajudar nesta questão ???
Obrigado,

Marco Paradiso.

Não vai resolver teu problema nem de longe.
Leia mais sobre a API de taglibs para saber como resolver teu problema.

Mas a questão é que estou desenvolvendo uma taglib, não estou utilizando uma tag como JSTL ou de um Framework. Sou eu que estou definindo os parametros que a tag ira receber. O problema é na hora de recupera-lás. Se estiver numa variavel estatica, terei problemas quando entrar em produção.

tá meio confuso isso aqui…

Quando você diz que quer recuperar os “parametros” da tag vc tá se referindo aos valores informados como atributos? que são declarados com a tag?
Ex:

<my:tag1 atributo1="teste" />

Se for, este valor é setado automaticamente pelo container na sua tag, faz parte do ciclo de vida da tag receber estes valores, desde que você defina um metodo setAtributo1, e declare corretamente este atributo no arquivo tld da sua tag.

Outro alternativa:
Você tá chamando de parametro o valor que está declarado no corpo da tag
Ex:

<my:tag1>corpo da tag</tag>

Neste caso, para manipular este valor vc deverá herdar de BodyTagSupport, e eu não sei muito bem como manipular esses valores, mas tá bem explicadinho na especificação…

Espero ter ajudado.

Então, leia a nhaca dos javadocs da API de taglibs, você não precisa usar variaveis estáticas para isso. O ciclo de vida de uma taglib preve que você tenha como saber quais são os parâmetros dela a todo momento.

Realmente tenho que concordar com o llvaleriano . A pergunta ficou um puco confusa…
Vou tentar ser mais objetivo.
Digamos que eu tenha uma tag <h:input value=“nome” />, que ao ser redenrizada, será exibida na pagina como .
Quando solicito a exebição da página com está tag, consigo identificar que o valor “name” está sendo atribuido a classe da tag.
A submeter está página, só consiguirei recuperar as informações dentro de um Servlet atraves do request.getParameter. No entanto, como o servlet saberá que desejo recuperar o valor desta tag ??? Não tem…
Neste caso, tenho um metodo que recupera as propriedades “value” da minha taglib durante a renderização. Esse valores são armazenados em numa Collection. Desta forma, faço um loop na coleção utilizando o request.getParameter de cada taglib, e seto os valores na minha classe de reflection.
Este procedimento é bastante similar ao do Struts. Ele recupera as informações e seta no objeto para que seja possivel recuperar este objeto em seu servlet.
Caso eu não utilize uma coleção estatica, não terei como saber quais parametros pretendo recuperar. Não consigo encontrar outra saida para isso.
Pode ser que, uma Thread me ajude a criar diversos processos para cada página. Caso contrario, um outro usuário irá sobrescrever as informações da minha coleção, com isso terei grandes problemas.

O meu exemplo acima tabém pode ser bastante util no desenvolvimento de páginas de cadastro.
Quando temos um carrinho de compras onde um cliente ivai adquirir 10, ou até no máximo 20 produtos, é interessante colocarmos estes valores no escopo de sessão. Levando em conta o fato de utilizar o https para maior segurança do cliente.
Agora, tenho na empresa telas de cadastro que fazem alteração, inclusão e exclusão de dados, que seguem a seguinte lógica:
1- executa uma query que retorna as informações;
2- exibe estas informações na tela;
3- ao inserir uma informação, armazena no banco de dados;
4- executa a query novamente (este ponto que considero critico), para atualizar as informações (rodar a query somente para incluir uma simples informação);
Considero isso ruim po a cada processo de inserção, alteração e exclusão, sou forçado a executar uma query apenas para exibir as informações atualizadas. Um custo desnecessário ainda mais quando a query retorna aproximadamente 1000 registro. O que fazer ??? Armazenar no escopo de sessão ???
Utilizando uma coleção estática, quando uma informação for inserida, ela seria inserida no banco de dados e adicionado na coleção. No caso de ordenar essa informações, basta utilizar o metodo sort de Collections…
Agora, se duas pessoas estiveren cadastrando informações na mesma tela, pode haver problemas devido a variavel estica.
Espero que seste exemplo sejá bem melhor que o anterior…

Ainda tá meio confuso…

Eu não entendi muito bem, mas vamos lá, imagino q vc crie uma tag handler que irá criar um componente html do tipo

<inpu type="text" name="xpto">

Você mesmo já preencheu a propriedade name da tag, então qual o problema de chamar um request.getParameter(“xpto”) no seu servlet?
Você poderia pegar estes valores e colocá-los como atributos em um escopo de sessão. Ou no caso do carrinho de compras, adicionar em uma coleção e colocar a coleção na sessão.
Ainda não entendi muito bem qual o real problema q vc está tendo, mas com certeza vc tá indo pelo caminho mais complicado (criar propriedades estaticas e contralar seu acesso através de thread). Mesmo pq se vc estiver extendendo SipleTagSupport vc não precisa se preocupar com multiplos acessos, a cada chamada uma classe é criada, executada e finalizada (não são como sevlets).

Acho meio dificil vc precisar usar isso, mas dá uma olhada em DynamicAttributes e veja se é disso q vc precisa.

Espero ter ajudado,

T+

Léo

Questão para reflexão:

Por que eu devo trazer 1000 registros na pesquisa, se ninguem vai ler 1000 registros?

Tente filtrar isso…

llvaleriano,
O problema do escopo de sessão é o timeout. Se eu der um azar da sessão ser inspirada antes de recuperar as informações, terei serios problemas.
Relativo ao request.gtParameter(“xpto”), como eu cou recuperar um parametro que nem sei qual será ??? Desenvolvi um servlet que recupera a coleção que comtém todos os atributos e faz um loop para fazer um request.getParameter em cada atributo. Depois, utilizo uma classe de reflection para seta os valores no objeto que será recuperado no servlet. A lógica é bastante similar ao do Struts. Nele vc nunca faz um request.getParameter, apenas recupera o objeto com os dados encapsulados…

Agora, imagine o exemplo de uma página que possui uma lógica similar ao de um carrinho de compras. Acho um pouco estranho adicionar uma coleção com aproximadamente 1000 objetos no escopo de sessão…

Que tal ler os fontes do struts? Você vai descobrir que ele não faz isso. As tags dele não providenciam 2-way bindings.