Actions Gordas[Mentawai 1.14.1]

3 respostas
Ironlynx

Eu tenho uma RelatórioAction que precisa acessar diferentes DAO´s(uns 5).Eles só serão usados nessa action.Eu só consigo acessá-los via services e injetando os DAO´s?Não dá para fazer algo direto tipo Usuario u= dao1.loadById(),Carroc=dao2.loadByTipo()…?

OBS.:Eu pergunto pq sempre que eu faço algo do tipo:Formula f=fDao.loadFormulaById(nFormula); vem null, o que é típico de Não injeção do DAO.Ah, sim o valor é passado corretamente(não tá nulo) e as consultas direta via base estão OK para o ID passado.

3 Respostas

Ironlynx

Bom, descobri como lidar com vários DAO´s numa Action: mande-os via IOC no app manager e na sua Action, faça:
interfaceDoSueObjetoDAO = (interfaceDoSueObjetoDAO) input.getValue("interfaceDoSueObjetoDAO");
Funcionou com meus 2 primeiros(de 5), mas parou num terceiro com o erro:
java.lang.InstantiationException: Cannot create instance from class: class com.fc.dao.mysql.MySQLIndicadorDAO

Meu DAO assim:
private static Map<String, Indicador> indicadores;
	private Connection conn = null;

	public MySQLIndicadorDAO() {
		loadAll();
	}

	public MySQLIndicadorDAO(Connection conn) {
		this.conn = conn;
		loadAll();
	}
 //....delete,inserts...
private void loadAll() {//pega todos os indicadores e deixa na memoria
		indicadores = new HashMap<String, Indicador>();
		PreparedStatement stmt = null;
		ResultSet rset = null;
		try {
			stmt = conn.prepareStatement("select * from indicador");
			rset = stmt.executeQuery();
			while (rset.next()) {
				Indicador i = new Indicador();
				i.setId_indicador(rset.getInt("id_indicador"));
				i.setId_fgv(rset.getLong("id_fgv"));
				i.setSimbolo(rset.getString("simbolo"));
				i.setNome_simbolo(rset.getString("nome_simbolo"));
				i.setDescricao(rset.getString("descricao"));
				i.setObservacao(rset.getString("observacao"));
				i.setValores(loadValores(i.getId_indicador()));
				indicadores.put(i.getSimbolo(), i);
			}
		}catch(SQLException sqle){
			sqle.printStackTrace();			
		}		
		finally {
			if (rset != null)
				try {
					rset.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			if (stmt != null)
				try {
					stmt.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
		}
	}//fim do loadAll

	public void setConnection(Connection conn) {
		this.conn = conn;
	}
Como a classe não é Abstrata, nem interface, alguém sabe me dizer o que tá rolando?Isso é devido ao IOC?Olha o resto da Stack: at org.mentawai.ioc.DefaultComponent.getInstance(DefaultComponent.java:304) at org.mentawai.filter.IoCFilter.getValue(IoCFilter.java:211) at org.mentawai.core.InputWrapper.getValue(InputWrapper.java:225) at org.mentawai.filter.AutoWiringFilter.getValue(AutoWiringFilter.java:215) at org.mentawai.util.InjectionUtils.getValueToInject(InjectionUtils.java:542) at org.mentawai.util.InjectionUtils.getObject(InjectionUtils.java:808) at org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:151) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.VOFilter.filter(VOFilter.java:133) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.ValidatorFilter.filter(ValidatorFilter.java:154) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:125) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.AutoWiringFilter.filter(AutoWiringFilter.java:110) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.IoCFilter.filter(IoCFilter.java:83) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.ConnectionFilter.filter(ConnectionFilter.java:80) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.ExceptionFilter.filter(ExceptionFilter.java:83) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.core.Controller.invokeAction(Controller.java:759) at org.mentawai.core.Controller.service(Controller.java:624) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) java.lang.InstantiationException: Cannot create instance from class: class com.fc.dao.mysql.MySQLIndicadorDAO at org.mentawai.ioc.DefaultComponent.getInstance(DefaultComponent.java:304) at org.mentawai.filter.IoCFilter.getValue(IoCFilter.java:211) at org.mentawai.core.InputWrapper.getValue(InputWrapper.java:225) at org.mentawai.filter.AutoWiringFilter.getValue(AutoWiringFilter.java:215) at org.mentawai.util.InjectionUtils.getValueToInject(InjectionUtils.java:542) at org.mentawai.util.InjectionUtils.getObject(InjectionUtils.java:808) at org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:151) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.VOFilter.filter(VOFilter.java:133) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.ValidatorFilter.filter(ValidatorFilter.java:154) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:125) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.AutoWiringFilter.filter(AutoWiringFilter.java:110) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.IoCFilter.filter(IoCFilter.java:83) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.ConnectionFilter.filter(ConnectionFilter.java:80) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.filter.ExceptionFilter.filter(ExceptionFilter.java:83) at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139) at org.mentawai.core.Controller.invokeAction(Controller.java:759) at org.mentawai.core.Controller.service(Controller.java:624) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source)
saoj

Vc está chamando loadAll() no construtor e deve estar dando algum erro ali que está inviabilizando a construçao do objeto.

Eu colocaria uns breakpoints ou um System.out para entender em que linha está dando o problema.

Ironlynx

saoj , retirei o loadAll, afinal aquilo é só para otimizar o acesso Web(minimizar as consultas ao banco ), e minha apresentação amanhã será local, mas agora eu recebo um null aqui:
java.lang.NullPointerException
at com.fc.action.RelatorioAction.getRelatorio(RelatorioAction.java:69)

Que correspondem a essas linhas:

for(int i=0;i<contem_indicadores.length;i++){ inds[i]=indicadorDAO.loadBySimbolo(contem_indicadores[i]); System.out.println("----->Indicador:"+inds[i].getId_indicador()); }
A única diferença entre meus DAO´s anteriores pegos no relatório é que esse é um Array.

Criado 30 de janeiro de 2009
Ultima resposta 1 de fev. de 2009
Respostas 3
Participantes 2