Uso da rotina verificaçao de mensalidade

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.

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.

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

posta o código da rotina … mais facil ^^

[code]import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JOptionPane;
public class VerificaMens {

String hoje;
Date data1, data2;
Calendar calendar,calendar2;
Conexao conex;
ResultSet consulta;
int cont=1, cont2=0,q;
int codSocio=0;

//sai verificando se as mensalidades estao atrasadas, se estao, seta em mensAtr=0 e socioAtr=0, assim colocando ambos atrasados
public void verificaMens(){
	//System.out.println("vefiricaMensa run");
	Date Data = new Date();
	Format fmt = new SimpleDateFormat("dd/MM/yyyy");
	hoje = fmt.format(Data);
	//System.out.println(hoje);
	
	SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");   
	try {
		data1 = formatador.parse(hoje);
	} catch (ParseException e) {
		e.printStackTrace();
	} 
	
	calendar = Calendar.getInstance();   
    calendar.setTime(data1);   
	
	
	conex = new Conexao();
	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()){
				int cod = consulta.getInt("mensCod");
				codSocio = consulta.getInt("mensCodSocio");
				String venc = consulta.getString("mensVenc");
				
				SimpleDateFormat formatador2 = new SimpleDateFormat("dd/MM/yyyy");   
				try {
					data2 = formatador2.parse(venc);
				} catch (ParseException e) {
					e.printStackTrace();
				}
				calendar2 = Calendar.getInstance();
				calendar2.setTime(data2);
				//System.out.println(data2);
				
				int dias = 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 vencida
					conex.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 (SQLException e) {
		e.printStackTrace();
	}
	
	
}

public int calcularDiferencaEmDias(Calendar dataAnterior, Calendar dataPosterior){  
	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 atrasado
public void verificaSocio(){
	//System.out.println("vefiricaSoc run");
	conex = new Conexao();
	//1° - pegar todos os socios
	//contando a qtde de linhas da tabela
	consulta = conex.preencheDataSet("SELECT socioMat FROM socio",1);
	try{
		while (consulta.next()){
			cont++;
		}
	}catch (SQLException e) {
			e.printStackTrace();
	}
	
	
	//armazenando num vetor
	int[] socio = new int[cont]; 
	consulta = conex.preencheDataSet("SELECT socioMat FROM socio",1);
	try{
		while(consulta.next()){
			cont2++;
			socio[cont2]= consulta.getInt("socioMat");
			
		}
	}catch(SQLException e){
		e.printStackTrace();
	}
	
	//2° - verificar socio por socio
	codSocio=0;
	for(int i=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 (SQLException e) {
			e.printStackTrace();
		}
		//System.out.println(socio[i]);
		if(q==0)
			conex.preencheDataSet("UPDATE socio SET socioAtr = '" + 1 + "' WHERE socioMat = '" + socio[i] + "'",2);
		
	}
	
				
}
	


public static void main(String[] args) {
	VerificaMens v = new VerificaMens();
	v.verificaMens();
	//v.verificaSocio();

}

}
[/code]

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…