diff options
Diffstat (limited to 'cdo/benchmarks/org.eclipse.papyrus.cdo.uml.benchmarks.creation.tests/src/org/eclipse/papyrus/cdo/uml/benchmarks/creation/tests/CDORemoteTests_LazyLoadingV2.java')
-rwxr-xr-x | cdo/benchmarks/org.eclipse.papyrus.cdo.uml.benchmarks.creation.tests/src/org/eclipse/papyrus/cdo/uml/benchmarks/creation/tests/CDORemoteTests_LazyLoadingV2.java | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/cdo/benchmarks/org.eclipse.papyrus.cdo.uml.benchmarks.creation.tests/src/org/eclipse/papyrus/cdo/uml/benchmarks/creation/tests/CDORemoteTests_LazyLoadingV2.java b/cdo/benchmarks/org.eclipse.papyrus.cdo.uml.benchmarks.creation.tests/src/org/eclipse/papyrus/cdo/uml/benchmarks/creation/tests/CDORemoteTests_LazyLoadingV2.java new file mode 100755 index 00000000..5e9a1665 --- /dev/null +++ b/cdo/benchmarks/org.eclipse.papyrus.cdo.uml.benchmarks.creation.tests/src/org/eclipse/papyrus/cdo/uml/benchmarks/creation/tests/CDORemoteTests_LazyLoadingV2.java @@ -0,0 +1,344 @@ +package org.eclipse.papyrus.cdo.uml.benchmarks.creation.tests; + +import java.util.Properties; + +import org.eclipse.emf.cdo.common.branch.CDOBranch; +import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; +import org.eclipse.emf.cdo.explorer.CDOExplorerUtil; +import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout; +import org.eclipse.emf.cdo.explorer.repositories.CDORepository; +import org.eclipse.emf.cdo.internal.explorer.AbstractElement; +import org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutImpl; +import org.eclipse.emf.cdo.internal.explorer.repositories.CDORepositoryImpl; +import org.eclipse.emf.cdo.internal.explorer.repositories.RemoteCDORepository; +import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration; +import org.eclipse.emf.cdo.net4j.CDONet4jUtil; +import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.cdo.util.CommitException; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.net4j.Net4jUtil; +import org.eclipse.net4j.connector.IConnector; +import org.eclipse.net4j.tcp.TCPUtil; +import org.eclipse.net4j.util.container.ContainerUtil; +import org.eclipse.net4j.util.container.IManagedContainer; +import org.eclipse.net4j.util.security.IPasswordCredentialsProvider; +import org.eclipse.net4j.util.security.PasswordCredentialsProvider; +import org.eclipse.uml2.uml.Package; +import org.eclipse.uml2.uml.UMLFactory; +import org.eclipse.uml2.uml.UMLPackage; + +//import RequirementWithEMF.Constants; + +public class CDORemoteTests_LazyLoadingV2 { + + // @Test + public void create_10000_Elements() { + create_Elements(10000); + } + + // @Test + public void create_50000_Elements() { + create_Elements(50000); + } + + // @Test + public void create_500000_Elements() { + create_Elements(500000); + } + + /** + * run in 194619 ms (outside of the UI thread) -> 3,2 minutes + */ +// @Test + public void create_1000000_Elements() { + create_Elements(1000000); + } + + + public void create_Elements(int size) { + System.out.println("Creation in Remote CDO file with LazyLoading"); + System.out.println("create " + size + " elements with the factory " + UMLFactory.eINSTANCE.getClass().getName()); + String fileName = size + "_Elements"; + String timsestamp = Long.toString(System.currentTimeMillis()); + fileName = fileName + "_" + timsestamp; + + // 1. CDO connection + try { + connect(); + } catch (Exception e) { + e.printStackTrace(); + } + + // 2 CDO transaction + CDOTransaction transaction = getSession().openTransaction(); + + URI uri = URI.createURI(fileName); + uri = uri.appendFileExtension("uml"); + + // 3. create CDO resource + Resource myResource = transaction.getOrCreateResource("/home/Administrator/" + fileName); + + // 1. create the root package + org.eclipse.uml2.uml.Package rootPackage = UMLFactory.eINSTANCE.createPackage(); + rootPackage.setName("RootPackage_" + fileName); + myResource.getContents().add(rootPackage); + try { + transaction.commit(); + } catch (CommitException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + transaction.close(); + getSession().close(); + + + + int nbClassPerLoop = 1000; + long start = System.currentTimeMillis(); + + try { + connect(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + CDOTransaction transaction2 = getSession().openTransaction(); + + Resource res = transaction2.getResource("/home/Administrator/" + fileName); + + // 2. we get the root package + Package pack = (Package) res.getContents().get(0); + + // 2. create the elements + for (int i = 0; i < size; i += nbClassPerLoop) { + createElementsInNewPackage(fileName, i, nbClassPerLoop, pack); + if (i % 20000 == 0) { + System.out.println(" create " + i + " on " + size + " creations."); + // System.gc(); + } + try { + transaction2.commit(); + } catch (CommitException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // } + + } + + transaction2.close(); + getSession().close(); + long end = System.currentTimeMillis(); + System.out.println("+ " + size + " creations WITH UML done: " + (end - start) + " ms "); + + + } + + private void createElementsInNewPackage(final String fileName, final int packIndex, final int nbClassToCreate, Package pack) { + // System.out.println("."); + // 1. we connect to CDO server + // try { + // connect(); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // CDOTransaction transaction2 = getSession().openTransaction(); + // + // Resource res = transaction2.getResource("/home/Administrator/" + fileName); + // + // // 2. we get the root package + // Package pack = (Package) res.getContents().get(0); + + + // 3. we create an intermediate package + Package currentPackage = UMLFactory.eINSTANCE.createPackage(); + currentPackage.setName("package" + packIndex); + pack.getPackagedElements().add(currentPackage); +// Package currentPackage = pack; + long start = System.currentTimeMillis(); + + // we create nbClasses + for (int i = 0; i < nbClassToCreate; i++) { + org.eclipse.uml2.uml.Class aclass = UMLFactory.eINSTANCE.createClass(); + final StringBuilder builder = new StringBuilder("Class_"); + builder.append(i); + aclass.setName(builder.toString()); + currentPackage.getPackagedElements().add(aclass); + } + + long end = System.currentTimeMillis(); + System.out.println(" " + nbClassToCreate + " created in " + (end - start) + " ms"); + // 4. we close the transaction + // try { + // transaction2.commit(); + // } catch (CommitException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + //// start = System.currentTimeMillis(); + //// while (((int) (System.currentTimeMillis() - start)) < 1000) { + //// int i = 0; + //// i++; + //// i++; + //// i++; + //// + //// } + //// try { + //// System.out.println("2nd try to commit"); + //// transaction2.commit(); + //// } catch (ConcurrentAccessException e1) { + //// // TODO Auto-generated catch block + //// e1.printStackTrace(); + //// } catch (CommitException e1) { + //// // TODO Auto-generated catch block + //// e1.printStackTrace(); + //// } + // + // } + // transaction2.close(); + // getSession().close(); + } + // ==================CDO METHODS AND FIELDS============================ + + // CDO fields and methods + private static final String HOST_AND_PORT = "localhost:2036"; + private static final String USER_NAME = "Administrator"; + private static final String PASSWORD = "0000"; + final String PAPYRUS_CDO_SECURED_REPOSITORY = "PapyrusCDOSecuredRepository"; + + + private CDOSession session; + private CDOCheckout checkout; + private CDORepository repository; + private CDOTransaction transaction; + + + public final void connect() throws Exception { + connect(getHostAndPort(), getUser(), getPassword()); + } + + /** + * @return + */ + private String getPassword() { + return PASSWORD; + } + + /** + * @return + */ + private String getUser() { + return USER_NAME; + } + + /** + * @return + */ + private String getHostAndPort() { + return HOST_AND_PORT; + } + + private void connect(final String serverURI, final String login, final String password) throws Exception { + try { + // Prepare container + final IManagedContainer container = ContainerUtil.createContainer(); + Net4jUtil.prepareContainer(container); // Register Net4j factories + TCPUtil.prepareContainer(container); // Register TCP factories + CDONet4jUtil.prepareContainer(container); // Register CDO factories + container.activate(); + + // Create connector + final IConnector connector = TCPUtil.getConnector(container, serverURI); + + // Create configuration + final CDONet4jSessionConfiguration configuration = CDONet4jUtil.createNet4jSessionConfiguration(); + configuration.setConnector(connector); + configuration.setRepositoryName(PAPYRUS_CDO_SECURED_REPOSITORY); + final IPasswordCredentialsProvider credentialsProvider = new PasswordCredentialsProvider(login, password); + configuration.setCredentialsProvider(credentialsProvider); + + final Properties properties = new Properties(); + + properties.setProperty(AbstractElement.PROP_TYPE, CDORepository.TYPE_REMOTE); + properties.setProperty(AbstractElement.PROP_LABEL, PAPYRUS_CDO_SECURED_REPOSITORY); + properties.setProperty(CDORepositoryImpl.PROP_NAME, PAPYRUS_CDO_SECURED_REPOSITORY); + properties.setProperty(RemoteCDORepository.PROP_CONNECTOR_TYPE, "tcp"); //$NON-NLS-1$ + // TODO : is it serverURI? + properties.setProperty(RemoteCDORepository.PROP_CONNECTOR_DESCRIPTION, serverURI); + + repository = CDOExplorerUtil.getRepositoryManager().addRepository(properties, credentialsProvider.getCredentials()); + repository.connect(); + + // Open session + // try { + session = configuration.openNet4jSession(); + System.gc(); + // }catch(Exception e) { + // e.printStackTrace(); + // long start = System.currentTimeMillis(); + // while (((int) (System.currentTimeMillis() - start)) < 1000) { + // int i = 0; + // i++; + // i++; + // i++; + // + // } + // try { + // System.out.println("2nd try to open session"); + // session = configuration.openNet4jSession(); + // } catch (Exception ee) { + // // TODO Auto-generated catch block + // ee.printStackTrace(); + // } + // + // } + // these informations have no impact on the performance + session.getPackageRegistry().putEPackage(UMLPackage.eINSTANCE); + // session.getPackageRegistry().putEPackage(sysmlPackage.eINSTANCE); + + this.checkout = createCheckout("PapyrusPerfoTestCheckout" + Long.toString(System.currentTimeMillis())); //$NON-NLS-1$ + + + } catch (final Exception e) { + throw e; + } + + } + + private CDOCheckout createCheckout(final String checkoutName) { + final Properties properties = new Properties(); + properties.setProperty(AbstractElement.PROP_TYPE, CDOCheckout.TYPE_ONLINE_HISTORICAL); + properties.setProperty(AbstractElement.PROP_LABEL, checkoutName); + properties.setProperty(CDOCheckoutImpl.PROP_REPOSITORY, this.repository.getID()); + properties.setProperty(CDOCheckoutImpl.PROP_BRANCH_ID, Integer.toString(CDOBranch.MAIN_BRANCH_ID)); + properties.setProperty(CDOCheckoutImpl.PROP_TIME_STAMP, Long.toString(CDOBranchPoint.UNSPECIFIED_DATE)); + properties.setProperty(CDOCheckoutImpl.PROP_READ_ONLY, Boolean.toString(false)); + + final CDOCheckout checkout = CDOExplorerUtil.getCheckoutManager().addCheckout(properties); + checkout.open(); + return checkout; + } + + /** + * Gets the running session. + * + * @return the running session + */ + protected CDOSession getSession() { + return this.session; + } + + + + public void closeTransaction() { + if (null != this.transaction) { + this.transaction.close(); + } + transaction = null;// TODO : probably missing in QS + } + + + +} |