protected void addEvent(String securityToken, WikittyEvent e) { events.add(e); if (autoCommit > 0 && events.size() >= autoCommit) { commit(securityToken); } }
@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); }