Bom dia, no ano passado fiz uma aplicacao de cadastro de socios onde é gerado mensalidade para esses socios. Entao fiz uma rotina que verifica as datas de vencimento e o pagamento de mensalidades para colocar os socios em situacao de atraso ou retira-los. No momento tem 2100 socios cadastrados, o problema é que essa rotina é acionada sempre na abertura do sistema, apos inclusao de mensalidade ou pagamento de mensalidade e essa rotina dura cerca de 50 seg. Isso esta fazendo o sistema ficar um pouco lento para o usuario.
Sera que tem algum jeito de diminuir o uso dessa rotina?
Tem que analisar melhor o seu sistema e sua arquitetura. Mas basicamente você precisa de paralelismo ai. Se for uma aplicação pequena desktop, você pode dar um olhada em Threads. Se for algo grande e JEE, aconselho dar um olhada em JMS.
E
entanglement
Para 2100 registros, tal rotina não deveria demorar tanto. Tem coisa errada aí. Provavelmente você está checando TUDO quando só deveria checar um determinado sócio, se ele efetuou ou não o pagamento.
darkroger
acho q algo deve estar errado ou redundante mesmo, mas todos os dias tenho q verificar todas as mensalidades cadastradas, pois elas tem vencimento e a cada dia novas mensalidades podem ficar vencidas.
Obrigado
J
jgavazzisp
posta o código da rotina … mais facil ^^
darkroger
importjava.sql.ResultSet;importjava.sql.SQLException;importjava.text.Format;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjavax.swing.JOptionPane;publicclassVerificaMens{Stringhoje;Datedata1,data2;Calendarcalendar,calendar2;Conexaoconex;ResultSetconsulta;intcont=1,cont2=0,q;intcodSocio=0;//sai verificando se as mensalidades estao atrasadas, se estao, seta em mensAtr=0 e socioAtr=0, assim colocando ambos atrasadospublicvoidverificaMens(){//System.out.println("vefiricaMensa run");DateData=newDate();Formatfmt=newSimpleDateFormat("dd/MM/yyyy");hoje=fmt.format(Data);//System.out.println(hoje);SimpleDateFormatformatador=newSimpleDateFormat("dd/MM/yyyy");try{data1=formatador.parse(hoje);}catch(ParseExceptione){e.printStackTrace();}calendar=Calendar.getInstance();calendar.setTime(data1);conex=newConexao();consulta=conex.preencheDataSet("SELECT mensCod,mensCodSocio,mensVenc,mensCont,mensAtr FROM mensalidade "+"WHERE mensCont= '"+1+"' AND mensAtr = '"+1+"' ",1);try{if(consulta!=null){while(consulta.next()){intcod=consulta.getInt("mensCod");codSocio=consulta.getInt("mensCodSocio");Stringvenc=consulta.getString("mensVenc");SimpleDateFormatformatador2=newSimpleDateFormat("dd/MM/yyyy");try{data2=formatador2.parse(venc);}catch(ParseExceptione){e.printStackTrace();}calendar2=Calendar.getInstance();calendar2.setTime(data2);//System.out.println(data2);intdias=calcularDiferencaEmDias(calendar2,calendar);//System.out.println(dias);if(dias>90){//0 pois o venc é o ultimo dia do mes, tipo 31/07/2008, entao no dia 01/08/2008 ja ta vencidaconex.preencheDataSet("UPDATE mensalidade SET mensAtr = '"+0+"' where mensCod = '"+cod+"'",2);conex.preencheDataSet("UPDATE socio SET socioAtr = '"+0+"' WHERE socioMat = '"+codSocio+"'",2);}}}else{JOptionPane.showMessageDialog(null,"Não encontrou");}}catch(SQLExceptione){e.printStackTrace();}}publicintcalcularDiferencaEmDias(CalendardataAnterior,CalendardataPosterior){return(int)((dataPosterior.getTimeInMillis()-dataAnterior.getTimeInMillis())/(24*60*60*1000));}//sai verificando as mensalidades por socio, se o socio nao esta atrasado, seta socioAtr=1, nao atrasadopublicvoidverificaSocio(){//System.out.println("vefiricaSoc run");conex=newConexao();//1° - pegar todos os socios//contando a qtde de linhas da tabelaconsulta=conex.preencheDataSet("SELECT socioMat FROM socio",1);try{while(consulta.next()){cont++;}}catch(SQLExceptione){e.printStackTrace();}//armazenando num vetorint[]socio=newint[cont];consulta=conex.preencheDataSet("SELECT socioMat FROM socio",1);try{while(consulta.next()){cont2++;socio[cont2]=consulta.getInt("socioMat");}}catch(SQLExceptione){e.printStackTrace();}//2° - verificar socio por sociocodSocio=0;for(inti=1;i<cont;i++){q=0;consulta=conex.preencheDataSet("SELECT mensCodSocio FROM mensalidade "+"WHERE mensCodSocio= '"+socio[i]+"' AND mensCont= '"+1+"' AND mensAtr = '"+0+"' ",1);try{if(consulta!=null){while(consulta.next()){codSocio=consulta.getInt("mensCodSocio");q++;}}}catch(SQLExceptione){e.printStackTrace();}//System.out.println(socio[i]);if(q==0)conex.preencheDataSet("UPDATE socio SET socioAtr = '"+1+"' WHERE socioMat = '"+socio[i]+"'",2);}}publicstaticvoidmain(String[]args){VerificaMensv=newVerificaMens();v.verificaMens();//v.verificaSocio();}}
acho q ja achei o erro, estou verificando a situacao do socio duas vezes, uma para coloca-lo em atraso e outra para coloca-lo em dia, isso é bobagem, pois se ele esta em dia entao ele nao esta atrasado...aceito sujestoes...ta meio bagunçado mais nao tive tempo de arrumar...