Comportamento Estranho do Spring

11 respostas
A

Eu sou novo com spring, ja tinha usado ejb3 e tal, porém, quis migrar para o spring, ainda mais ele tendo anotações, o que me agradou bastante, porém, estou tendo uma dificuldade muito estranha, o meu projeto possui a seguinte arquitetura: servlet >> facade >> dao

meus beans no dao e no facade estao anotados respectivamente (@Repositorio e @Service), configurei o applicationContext e tal, ta injetando as classes, ta integrando com o hibernate, controlando transação, so que na servlet quando eu chamo o meu facade, ele nao retorna nada!

exemplo:
CodigoFiscalservlet chama o CodigoFiscalFacade, que este chama o CodigoFiscalDAO, e ja fiz um debug, e a informação chega até o CodigoFiscalFacade, qdo vai para o CodigoFiscalServlet, passa NULL !!!

eu fiquei encucado, nisso criei um outro facade , TesteFacade, que chama o CodigoFiscalFacade, e verifiquei que a informação so chegava até o CodigoFiscalFacade, independente se fosse uma servlet ou um outro bean do spring que chamasse, passava NULL a partir do CodigoFiscalFacade , passa null seja mera variavel local ou até msm beans do hibernate. testei tanto com um bean que chamasse o hibernate como outro que chamasse uma string qq…

segue em anexo meu applicationContext, eu to usando o spring 2.5 ate msm por ser mais leve.

enfim, preciso mto de resolver este problema!

agradeço a atenção desde ja

11 Respostas

rogelgarcia

Posta o código do seu servlet chamando o facade… ( o código completo do servlet, mas cola o fonte no post… dentro de tags [ code] … ao invés de download… pra facilitar)

Quando vc fala passando null…

O facade do servlet está null??

Ou algum parametro é null?

A
@Service
public class TesteFacade {
	
	private String teste = "aaaaaaaaaaaa";

	public String getTeste() {
		System.out.println("passou aqui");
		return teste;
	}

	public void setTeste(String teste) {
		this.teste = teste;
	}
	
	
	
}

e na servlet eu chamo assim

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
TesteFacade facade = (TesteFacade) ctx.getBean("testeFacade");
System.out.println(facade.getTeste() + " --- ");

consegue instanciar o facade, so que quando chamo o “getTeste” ele executa corretamente, ate imprimi no console o sysout que esta dentro do getTeste, porém, retorna null para a Servlet

nao sei se esta faltando algum jar ou alguma configuração que desconheço…

obrigado pela atenção

rogelgarcia

Tá imprimindo:

null —

??

rogelgarcia

Poe um sysout… no setTeste… pra ver se passa lá… ou poe um debug…

Mas poe um print gigantesco… pq senao ele vai sumir dentro do log

A

imprime “null ----”

ja coloquei jar e tirei jar ja fiz mexi e remexi no applicationContext e nao sei mais o que fazer!

ta foda…

rogelgarcia

Nesse site

http://www.javaframework.org

tem dois posts ensinando a mecher com o Spring…

Talvez possa ajudar em alguma coisa…

Tenho que sair agora… mas coloque aí as informacoes… que quando eu puder… se ninguém tiver ajudado eu respondo…

Até mais

A

poo eu ja vi os exemplos nesse site que voce me passou, ja vi um monte de exemplos, fiz, refiz… e ate agora nada, to pensando em usar o guice e controlar as transações na mao msm… foda!

queria mto usar o spring, mas ta dificil…

obrigado pela atenção

rogelgarcia

Verifique se o método setTeste(String teste) está sendo chamado com valor null…

Pra retornar null no getTeste entao o valor de teste teria que ser null… agora, porque o Spring tá setando isso pra null é que é o misterio…

Se tiver setando pra null mesmo… tenta trocar o autowire… de byName para byType… (isso é só um chute)

Voce chegou a implementar o exemplo do site?


Tem um outro detalhe também… que vc deveria configurar a fabrica do Spring no web.xml já que seu projeto é web… e ao invés de usar o ClassPAthXMLApplicationContext… pegar o que está no escopo de aplicacao já configurado…

WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext( this.getServletContext());

rogelgarcia

Se vc quiser experiementar também…

Depois vc dê uma olhada no Next (usa Spring e Hibernate internamente)

Só que já configura tudo pra vc… então é mais fácil usar o Spring e Hibernate com o next… do que sozinho…

http:///www.nextframework.org

É bem fácil de trabalhar com ele… nem XML vc nao vai gastar pra poder configurar sua app…

Tem uns videos ensinando a mecher no site…

Bem legal

A

pooo tentei os exemplos sim, e o next cheguei a ver, pouco mais vi tb…

mas acabei optando por usar o Guice, achei pratico e nao teve configuração praticamente… usei interceptadores do Guice para controlar as transações do hbernate… e o reutilizei no esquema de dao generico que tinha em ejb
foi tranquilao… recomendo, mas valeu pela ajuda!

rogelgarcia

blza…

valew

Criado 14 de maio de 2010
Ultima resposta 15 de mai. de 2010
Respostas 11
Participantes 2