Struts - Action não está sendo instanciado a cada request. [+- resolvido]  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

Pessoal,

Não estou entendendo porque o Action q estou escrevendo não está sendo instanciado a cada request. Está sendo instanciado uma vez apenas. Nas vezes seguintes que chamo uma url mapeada para tal Action, ele não é instanciado novamente. Eis as configurações:



Meu Action está herdando de DispatchAction. E eu preciso de atributos de instância para um Action em cada request. Porém percebi um comportamento estranho e, pra testar, criei um construtor no-args e coloquei um breakpoint lá... ele só é chamado uma vez mesmo.

Por exemplo, o primeiro uso do Action é quando eu chamo um método que desenha a tela lista. Lá tem uma lista de entidades que, ao selecionar um, eu invoco o Action para chamar um método que vai desenhar a tela carrega. Só que ele usa a mesma instância do Action que foi usada para desenha a tela de lista e isso não pode acontecer na minha aplicação, devido aos atributos de instância.

O que estou estranhando é que no struts-config, no mapeamento, eu coloquei scope="request" mas não tá funcionando (se é que é essa a idéia desse atributo).

Alguém tem alguma idéia?

[]'s

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline

Esse é o comportamento padrão do Struts, instanciar a Action apenas uma vez.

Por isso, você não deve colocar variáveis de instância nas actions. Procure armazenar os objetos nos contextos de request/session/application.

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

carneiro wrote:Esse é o comportamento padrão do Struts, instanciar a Action apenas uma vez.

Por isso, você não deve colocar variáveis de instância nas actions. Procure armazenar os objetos nos contextos de request/session/application.


A org.apache.struts.action.ActionServlet, que vai controlar as solicitações do Struts, é instanciada uma única vez.. até aih tudo bem... mas eu preciso que os Actions que eu escrevo para processar um request sejam instanciados sempre que há um novo request. Não tem como configurar isso?

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
leandros
Debugger
[Avatar]

Membro desde: 08/04/2007 16:34:13
Mensagens: 59
Offline

No seu caso se a aplicação estiver recebendo dados de um ActionForm por exemplo, vc pode subscrever o método reset e instanciar o que você precisa nesse método reset, assim ele limpa os objetos que você usou no request anterior..

Seria isso?

Atenciosamente

Leandro Storoli
Analista Programador
[Email] [Yahoo!] [MSN]
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

leandros wrote:No seu caso se a aplicação estiver recebendo dados de um ActionForm por exemplo, vc pode subscrever o método reset e instanciar o que você precisa nesse método reset, assim ele limpa os objetos que você usou no request anterior..

Seria isso?


Não seria isso...

Na verdade, são atributos de controle que a arquitetura que estou desenvolvendo vão utilizar... então, pra eu não precisar ficar passando toda vez como argumento nos métodos do action, eu estava colocando-o em um atributo de um Action e os Actions que eu escrevo herdavam esses atributos.

Mas eu já decidi passá-los como argumento mesmo e, como são muitos, criei uma classe que encapsula todos os atributos e na assinatura do método, só tem um argumento.

Vou renomear o título para "[+- resolvido]" só pq a dúvida do tópico não foi respondida. Se alguém responder, apenas como curiosidade, renomearei o tópico para "[resolvido]".

Valeu a todos.

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team