pm.currentTransaction().begin();
CataloguePersistant cat = null;
int nbCat = 0;
MarchePersistantImpl mar= null;
int nbMar = 0;
ArticlePersistantImpl a;
for(int idArt=0; idArt<NB_ARTICLE; idArt++) {
if ((idArt / CATLAOGUE_SIZE) == nbCat) {
cat = new CataloguePersistantImpl(nbCat);
pm.makePersistent(cat);
nbCat ++;
}
if ((idArt / MARCHE_SIZE) == nbMar) {
mar = new MarchePersistantImpl(nbMar);
pm.makePersistent(mar);
nbMar ++;
}
if ((idArt % 2) == 0) { //pair
a = new ServicePersistantImpl(idArt);
a.setNom("article_service_" + idArt);
} else { //impair
a = new MaterielPersistantImpl(idArt);
a.setNom("article_materiel_" + idArt);
}
pm.makePersistent(a);
a.setCatalogue(cat);
mar.getArticles().add(a);
}
pm.currentTransaction().commit();
a = null;
cat = null;
mar = null;
pm.evictAll();
pm.currentTransaction().begin();
Extent extent = pm.getExtent(CataloguePersistantImpl.class, true);
Iterator it = extent.iterator();
ArrayList errors = new ArrayList();
while(it.hasNext()) {
cat = (CataloguePersistantImpl) it.next();
logger.log(BasicLevel.DEBUG, "Catalogue " + cat.getId());
Collection arts = cat.getArticles();
Iterator articles = arts.iterator();
while(articles.hasNext()) {
a = (ArticlePersistantImpl) articles.next();
logger.log(BasicLevel.DEBUG, "\tArticle " + a.getId());
Collection mars = a.getMarches();
Iterator marches = mars.iterator();
while (marches.hasNext()) {
mar = (MarchePersistantImpl) marches.next();
logger.log(BasicLevel.DEBUG, "\t\tMarche " + mar.getId());
Collection m2as = mar.getArticles();
if (!m2as.contains(a)) {
errors.add(new Exception("The article '" + a.getId()
+ "' is not in the collection marche(" + mar.getId()
+ ").articles"));
}
}
}
}
extent.closeAll();
pm.currentTransaction().commit();
if (!errors.isEmpty()) {
for (Iterator iter = errors.iterator(); iter.hasNext();) {
Exception e = (Exception) iter.next();
logger.log(BasicLevel.ERROR, e.getMessage());
}
fail(errors.size() + " error(s)");
}
a = null;
mar = null;
pm.currentTransaction().begin();
Query query = pm.newQuery(ArticlePersistantImpl.class);
query.declareParameters("String p1,CataloguePersistantImpl p2");
query.setFilter("(nom.startsWith(p1) && (catalogue == p2))");
query.setResult("count(*)");
query.setUnique(true);
query.setRange(0,2);
Long l = (Long) query.executeWithArray(new Object[] { "article", cat });
assertTrue("", l.longValue() > 0);
query.closeAll();
pm.currentTransaction().commit();
pm.currentTransaction().begin();
query = pm.newQuery(ArticlePersistantImpl.class);
query.declareParameters("String p1,CataloguePersistantImpl p2");
query.setFilter("(nom.startsWith(p1) && (catalogue == p2))");
query.setResult("count(*)");
query.setUnique(true);
query.setRange(0,5);
l = (Long) query.executeWithArray(new Object[] { "article", cat });
query.closeAll();
assertTrue("", l.longValue() > 0);
pm.currentTransaction().commit();
pm.currentTransaction().begin();
query = pm.newQuery(ArticlePersistantImpl.class);
query.setRange(0,2);
new ArrayList((Collection) query.execute());
query.closeAll();
pm.currentTransaction().commit();
cat = null;
pm.currentTransaction().begin();
extent = pm.getExtent(ArticlePersistantImpl.class, true);
it = extent.iterator();
while (it.hasNext()) {
a = (ArticlePersistantImpl) it.next();
cat = a.getCatalogue();
if (cat != null) {
pm.deletePersistent(cat);
}
pm.deletePersistentAll(a.getMarches());
pm.deletePersistent(a);
}
pm.currentTransaction().commit();
pm.close();
}