[HSQLDB] Problème gestion mémoire

Fermé
lestie21 - 10 mai 2011 à 14:05
 lestie21 - 10 mai 2011 à 15:20
Bonjour,

Bonjour,
J'espère être au bon endroit pour évoquer mon problème ...

Nous avons développez un site e-commerce avec HSQLDB et tout allait bien jusqu'à nous rencontrions des problèmes de lecture de données.
Je m'explique ...
Au lancement de l'application, une méthode lit l'ensemble des utilisateurs qui possède un compte. Cette liste est mise en mémoire (fonctionnement de HSQLDB) et utilisée par notre programme.
Le problème c'est que la requete retourne 67 enregistrements mais que seulement 37 sont lus et disponibles !
Voilà la méthode en question
Exemple Code :

private void readCustomers()
	{
		_customers = new HashMap<String,BOCustomer>();
		_customersById = new HashMap<Long,BOCustomer>();
		
		try
		{
			DBConnection conn = DBConnectionManager.getConnection();
			Object[][]	 set  = conn.query(ALL_CUSTOMERS, null, ALL_CUSTOMERS_TYPES);
			
			for(int i=0 ; i<set.length ; i++)
			{
				Long id = (Long)set[i][0];
				String email = (String)set[i][3];
				BOCustomer customer = new BOCustomer(id,
						   							 (String)set[i][1],
						   							 (String)set[i][2],
						   							 email,
						   							 (String)set[i][4],
						   							 (Long)set[i][5],
						   							 (String)set[i][6],
						   							 (Long)set[i][7]);
				_customers.put(email.toLowerCase(), customer);
				_customersById.put(id, customer);
				
				if(email.startsWith("OLD_"))
				{
					set = conn.query(GET_CUSTOMER_PWD, new Object[]{id}, GET_CUSTOMER_PWD_TYPES);
					
					if(((Long)set[0][0]).longValue() == 0)
					{
						customer.unsubscribed();
					}
				}
			}
			
			conn.close();
		}
		catch(Exception e)
		{
			System.out.println(e);
		}
	}

La requete est basique : select * from customer => 67 enregistrements.
La boucle FOR doit donc effectuer 67 itérations, mais à 37, elle s'arrete et la HasMap _customers ne contient que 37 utilisateurs au lieu des 67 attendus

C'est incompréhensible.
J'ai augmenté la mémoire JAVA au démarrage (-Xmx=384M), le fichier .script ne fait que 350Ko, je ne comprends donc pas ce qui bloque ...

Merci pour votre aide et je suis dispo pour tout clarification

A voir également:

1 réponse

J'ai trouvé ...
En fait, le test
if(email.startsWith("OLD_")) 
    { 
     set = conn.query(GET_CUSTOMER_PWD, new Object[]{id}, GET_CUSTOMER_PWD_TYPES); 
      
     if(((Long)set[0][0]).longValue() == 0) 
     { 
      customer.unsubscribed(); 
     } 
    } 


réévalue le SET et sa longueur, du coup arrivé au 37ème, qui était la condition de ce if, et bien la longueur du SET passait à 1 et la boucle FOR se terminait ....

La discussion est close ^^
0