Problèmes avec Webobjects

esports

Membre enregistré
14 Avril 2004
6
0
Bonjour,

j'essaie de stocker des objects dans un tableau en utilisant la fonction
objectsWithFetchSpecification()

Ils proviennent de defaultEditingContext.

Mais une erreur survient lors de l'exécution.

"Out of memory".

Est-il possible d'accéder aux Entreprise Objects sans utiliser cette fonction ? Si oui, comment ? (en excluant rawRowsForSQL) ?

Aucune documentation valable n'est disponible, bien que ce sujet soit important.

Webobjects 5.2.3 avec la dernière version de PostgreSQL

(Base de données : plus de 150 000 nuplets, ayant chacun 23 attributs)

Merci, bonne journée à tous!

Au revoir
 
esports a dit:
Bonjour,

j'essaie de stocker des objects dans un tableau en utilisant la fonction
objectsWithFetchSpecification()

Ils proviennent de defaultEditingContext.

Mais une erreur survient lors de l'exécution.

"Out of memory".

Est-il possible d'accéder aux Entreprise Objects sans utiliser cette fonction ? Si oui, comment ? (en excluant rawRowsForSQL) ?

Aucune documentation valable n'est disponible, bien que ce sujet soit important.

Webobjects 5.2.3 avec la dernière version de PostgreSQL

(Base de données : plus de 150 000 nuplets, ayant chacun 23 attributs)

Merci, bonne journée à tous!

Au revoir


Pourquoi ta requête "ramène" 150000 lignes?
Que veux-tu en faire?
Il faudrait que tu optimises tes requêtes pour ne pas avoir à récupérer autant de données.

Pour ce que tu veux faire, tu peux passer par des "raw rows", c'est à dire ramener les lignes brutes sans transformation en EO, les données sont alors contenues dans un tableau de NSDictionary. Ca consomme de la mémoire aussi, c'est pourquoi il te faut certainement réfléchir à optimiser ta requête.

Tu peux ensuite transformer ta "raw row" en EO, avec EOUtilities.objectFromRawRow( tonEditingContext, tonEntite, uneLigneDeTonNSArrayDeNSDictionary) si tu en as besoin avec toute sa logique métier
 
Lorsque l'on spécifie une limite grâce setFetchLimit, la meme erreur survient toujours.

Avec cette méthode, cela fonctionnait avec 50 000 nuplets.

Pourquoi cela ne fonctionne-t-il plus maintenant ?
 
esports a dit:
Lorsque l'on spécifie une limite grâce setFetchLimit, la meme erreur survient toujours.

Avec cette méthode, cela fonctionnait avec 50 000 nuplets.

Pourquoi cela ne fonctionne-t-il plus maintenant ?

Difficile de répondre sans connaître le contenu de ta base.

Toujours est-il que les spécialistes bases de données considèrent qu'il n'y a jamais de véritables raisons de récupérer plus de 500 lignes d'une base pour afficher aux utilisateurs.
Sinon, c'est le design même de ta base qu'il te faut revoir.

D'où ma question initiale: A quoi peut bien vouloir te servir de récupérer 150 000 objets de ta base ?

setFetchLimit ne sert qu'à WebObjects pour limiter sa création d'objets EO depuis un resultset. C'est à dire qu'importe le nombre de lignes ramenées par JDBC, seulement le nombre spécifié dans un setFetchLimit ne seront transformés en EO. Ton problème mémoire survient avant même que WebObjects ne semble entrer en jeu: le resultset java est encombré parce qu'il ramène trop de lignes.