/** * OpenSpotLight - Open Source IT Governance Platform * * Copyright (c) 2009, CARAVELATECH CONSULTORIA E TECNOLOGIA EM INFORMATICA LTDA * or third-party contributors as indicated by the @author tags or express * copyright attribution statements applied by the authors. All third-party * contributions are distributed under license by CARAVELATECH CONSULTORIA E * TECNOLOGIA EM INFORMATICA LTDA. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA * *********************************************************************** * OpenSpotLight - Plataforma de Governança de TI de Código Aberto * * Direitos Autorais Reservados (c) 2009, CARAVELATECH CONSULTORIA E TECNOLOGIA * EM INFORMATICA LTDA ou como contribuidores terceiros indicados pela etiqueta * @author ou por expressa atribuição de direito autoral declarada e atribuída pelo autor. * Todas as contribuições de terceiros estão distribuídas sob licença da * CARAVELATECH CONSULTORIA E TECNOLOGIA EM INFORMATICA LTDA. * * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os * termos da Licença Pública Geral Menor do GNU conforme publicada pela Free Software * Foundation. * * Este programa é distribuído na expectativa de que seja útil, porém, SEM NENHUMA * GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU ADEQUAÇÃO A UMA * FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor do GNU para mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto com este * programa; se não, escreva para: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.openspotlight.federation; import static com.google.common.collect.Lists.newLinkedList; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; import org.junit.Test; import org.openspotlight.federation.domain.artifact.Artifact; import org.openspotlight.federation.domain.artifact.ChangeType; import org.openspotlight.federation.domain.artifact.StringArtifact; import org.openspotlight.federation.domain.artifact.SyntaxInformationType; import org.openspotlight.federation.log.DetailedLoggerModule; import org.openspotlight.persist.guice.SimplePersistModule; import org.openspotlight.persist.support.SimplePersistCapable; import org.openspotlight.persist.support.SimplePersistFactory; import org.openspotlight.storage.PartitionFactory.RegularPartitions; import org.openspotlight.storage.StorageSession; import org.openspotlight.storage.domain.StorageNode; import org.openspotlight.storage.redis.guice.JRedisStorageModule; import org.openspotlight.storage.redis.util.ExampleRedisConfig; import com.google.inject.Guice; import com.google.inject.Injector; public class ArtifactWithSyntaxPersisting { private List<String> content = null; int maxPath = 16; Random r = new Random(); String[] sampleLines = { "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD\n", " SDFSDFSDFSDFS FDS DFSDF\n", " sdfsfasdfasd FDS DFSDF\n", "\n"}; String[] samplePaths = {"dir1", "dir2", "dirthreebigger", "anotherPath"}; public static void main(final String... args) throws Exception { final ArtifactWithSyntaxPersisting test = new ArtifactWithSyntaxPersisting(); test.shouldPersistLotsOfStuff(); } private StringArtifact createNewDummyArtifact() { final int pathListSize = r.nextInt(maxPath - 2) + 2; final StringBuilder path = new StringBuilder(); for (int i = 0; i < pathListSize; i++) { final int pathIndex = r.nextInt(samplePaths.length); path.append(samplePaths[pathIndex]); if (i + 1 != pathListSize) { path.append("/"); } } final StringArtifact sa = Artifact.createArtifact(StringArtifact.class, path.toString(), ChangeType.INCLUDED); sa.getContent().setTransient(getContent()); for (int i = 0; i < 16000; i++) { sa.addSyntaxInformation(i, i, i, i, SyntaxInformationType.COMMENT, null); } return sa; } private List<String> getContent() { if (content == null) { final List<String> list = newLinkedList(); for (int i = 0; i < 4000; i++) { final String line = sampleLines[r.nextInt(sampleLines.length)]; list.add(line); } content = list; } return content; } Set<StringArtifact> createLotsOfStuff() { final Set<StringArtifact> stuffList = new HashSet<StringArtifact>(); for (int i = 0; i < 100; i++) { final StringArtifact sa = createNewDummyArtifact(); stuffList.add(sa); } return stuffList; } @Test public void shouldPersistLotsOfStuff() throws Exception { final Set<StringArtifact> lotsOfStuff = createLotsOfStuff(); final Injector injector = Guice.createInjector( new JRedisStorageModule(StorageSession.FlushMode.AUTO, ExampleRedisConfig.EXAMPLE.getMappedServerConfig()), new SimplePersistModule(), new DetailedLoggerModule()); final StorageSession session = injector.getProvider(StorageSession.class) .get(); final SimplePersistCapable<StorageNode, StorageSession> simplePersist = injector .getInstance(SimplePersistFactory.class).createSimplePersist( RegularPartitions.FEDERATION); int count = 0; final long start = System.currentTimeMillis(); for (final StringArtifact a: lotsOfStuff) { count++; simplePersist.convertBeanToNode(a); if (count % 10 == 0) { System.out.println(count); } } final long end = System.currentTimeMillis(); System.out.println("spent on jcr convert and saving: " + (end - start) / 1000 + "s"); } }