protected void addEvent(String securityToken, WikittyEvent e) { events.add(e); if (autoCommit > 0 && events.size() >= autoCommit) { commit(securityToken); } }
@Override public WikittyEvent clear(String securityToken) { WikittyEvent e = tx.clear(securityToken); addEvent(securityToken, e); return e; }
@Override public List<WikittyExtension> restoreExtensionAndDependenciesLastVesion(String securityToken, Collection<String> extensionNames) { List<WikittyExtension> result = new ArrayList<WikittyExtension>(); for (String extName : extensionNames) { WikittyExtension ext = restoreExtensionLastVersion( securityToken, extName); if (ext != null) { // on recherche les dependances de cette extension ... List<String> requires = ext.getRequires(); if (CollectionUtils.isNotEmpty(requires)) { List<WikittyExtension> dependencies = restoreExtensionAndDependenciesLastVesion( securityToken, requires); // ... et on les ajoute avant dans le resultat result .addAll(dependencies); } result.add(ext); } } return result; }
@Override public void run() { WikittyServiceTransaction tx = new WikittyServiceTransaction( client.getConfig(), client.getWikittyService()); // TODO poussin 20101029 rendre configurable le l'auto commit '1000' pour l'import tx.setAutoCommit(1000); try { long time = 0; if (log.isInfoEnabled()) { time = System.currentTimeMillis(); log.info("Import in (ms)" + time); } WikittyClient txClient = new WikittyClient( client.getConfig(), tx, client.getSecurityToken()); ImportExportMethod importer = format.ieporter(); importer.importReader(txClient, reader); if (log.isInfoEnabled()) { time = System.currentTimeMillis() - time; log.info("Import in (ms)" + time); } // don't forget to commit :) with true to force version tx.commit(client.getSecurityToken(), true); } catch (Exception eee) { tx.rollback(client.getSecurityToken()); throw new WikittyException("Error during import task", eee); } } }
@Test public void testTransaction() throws Exception { ApplicationConfig config = getConfig(); WikittyServiceInMemory ws = new WikittyServiceInMemory(config); WikittyServiceTransaction tx = new WikittyServiceTransaction(config, ws); // ajout d'objet hors transaction WikittyLabel label = new WikittyLabelImpl(); label.addLabels("coucou"); Wikitty labelWikitty = WikittyUtil.getWikitty(ws,null,label); ws.store(null, Collections.singleton(labelWikitty), false); // on doit le retrouver dans la transation (meme si elle a ete ouverte avant) Wikitty wTx = WikittyServiceEnhanced.restore(tx, null, label.getWikittyId()); Assert.assertEquals(labelWikitty, wTx); // on creer un objet dans la transaction WikittyLabel labelTx = new WikittyLabelImpl(); labelTx.addLabels("coucouTx"); Wikitty labelWikittyTx = WikittyUtil.getWikitty(tx, null, labelTx); Assert.assertNotNull(labelWikittyTx); tx.store(null, Collections.singleton(labelWikittyTx), false); //we have to find it in the transaction Wikitty w = WikittyServiceEnhanced.restore(tx, null, labelTx.getWikittyId()); Assert.assertEquals(labelWikittyTx, w); // on ne doit pas le retrouver hors de la transation w = WikittyServiceEnhanced.restore(ws, null, labelTx.getWikittyId()); Assert.assertEquals(null, w); // on commit, du coup on doit retrouver l'objet tx.commit(null); w = WikittyServiceEnhanced.restore(ws, null, labelTx.getWikittyId()); Assert.assertEquals(labelWikittyTx, w); }
@Override public List<Map<String, Object>> findByQuery(String securityToken, List<WikittyQuery> queries) { List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(queries.size()); List<WikittyQuery> queriesLimited = new ArrayList<WikittyQuery>(queries.size()); for (WikittyQuery c : queries) { WikittyQuery climit = c.copy().setOffset(0).setLimit(1); queriesLimited.add(climit); } List<WikittyQueryResult<Map<String, Object>>> idsList = findAllByQuery( securityToken, queriesLimited); for (WikittyQueryResult<Map<String, Object>> ids : idsList) { if (ids.size() > 0) { result.add(ids.peek()); } else { result.add(null); } } if (queries.size() != result.size()) { log.error(String.format("Query input list (%s) has not same size that result list (%s)", queries.size(), result.size())); } return result; }
@Override public List<String> findByCriteria(String securityToken, List<Criteria> criteria) { List<String> result = new ArrayList<String>(criteria.size()); List<Criteria> criteriaLimit = new ArrayList<Criteria>(criteria.size()); for (Criteria c : criteria) { Criteria climit = Search.query(c).criteria().setFirstIndex(0).setEndIndex(1); criteriaLimit.add(climit); } List<PagedResult<String>> idsList = findAllByCriteria( securityToken, criteriaLimit); for (PagedResult<String> ids : idsList) { if (ids.size() > 0) { result.add(ids.getFirst()); } else { result.add(null); } } if (criteria.size() != result.size()) { log.error(String.format("Criteria input list (%s) has not same size that result list (%s)", criteria.size(), result.size())); } return result; }
List<Map<String, Object>> values = new ArrayList<Map<String, Object>>(wikittyId.size()); List<Wikitty> wikitties = restore(securityToken, wikittyId);
@Override public WikittyEvent storeExtension( String securityToken, Collection<WikittyExtension> exts) { WikittyEvent e = tx.storeExtension(securityToken, exts); addEvent(securityToken, e); return e; }
@Override public WikittyEvent store( String securityToken, Collection<Wikitty> wikitties, boolean force) { WikittyEvent e = tx.store(securityToken, wikitties, force); addEvent(securityToken, e); return e; }
@Override public WikittyEvent deleteExtension( String securityToken, Collection<String> extNames) { WikittyEvent e = tx.deleteExtension(securityToken, extNames); addEvent(securityToken, e); return e; }
@Override public WikittyEvent delete(String securityToken, Collection<String> ids) { // pour que tout fonctionne bien, il faut que les objets supprimer soit // dans la tx, car il faut avoir une vrai trace de cette suppression dans la tx List<Wikitty> wikitties = ws.restore(securityToken, new ArrayList<String>(ids)); tx.store(securityToken, wikitties, true); WikittyEvent e = tx.delete(securityToken, ids); addEvent(securityToken, e); return e; }