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.
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:
privatestaticMap<String,Indicador>indicadores;privateConnectionconn=null;publicMySQLIndicadorDAO(){loadAll();}publicMySQLIndicadorDAO(Connectionconn){this.conn=conn;loadAll();}//....delete,inserts...privatevoidloadAll(){//pega todos os indicadores e deixa na memoriaindicadores=newHashMap<String,Indicador>();PreparedStatementstmt=null;ResultSetrset=null;try{stmt=conn.prepareStatement("select * from indicador");rset=stmt.executeQuery();while(rset.next()){Indicadori=newIndicador();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(SQLExceptionsqle){sqle.printStackTrace();}finally{if(rset!=null)try{rset.close();}catch(Exceptione){e.printStackTrace();}if(stmt!=null)try{stmt.close();}catch(Exceptione){e.printStackTrace();}}}//fim do loadAllpublicvoidsetConnection(Connectionconn){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.