import static org.apache.commons.lang.StringUtils.join; import java.sql.Date; import java.util.HashSet; import java.util.Set; import java.util.Vector; import lotus.domino.Database; import lotus.domino.DateTime; import lotus.domino.DbDirectory; import lotus.domino.Document; import lotus.domino.NotesException; import lotus.domino.Session; import lotus.domino.View; import org.openntf.domino.junit.TestRunnerUtil; import org.openntf.domino.utils.DominoUtils; import org.openntf.domino.utils.Factory; import org.openntf.domino.utils.Factory.SessionType; import com.github.javafaker.Faker; public enum CreateTestDatabaseODA { ; static final String FAKENAMES_NSF = "fakenames.nsf"; public static void main(final String[] args) { TestRunnerUtil.runAsDominoThread(DbSetup.class, TestRunnerUtil.NATIVE_SESSION, 1); // 1 Thread: 840 docs/sec // 2 Threads: 1264 docs/sec // 3 Threads: 1400 docs/sec // 4 Threads: 1480 docs/sec TestRunnerUtil.runAsDominoThread(DocCreate.class, TestRunnerUtil.NATIVE_SESSION, 5); } public static class DbSetup implements Runnable { @Override public void run() { try { Session sess = Factory.getSession(SessionType.CURRENT); DbDirectory dir = sess.getDbDirectory(""); Database db = sess.getDatabase("", FAKENAMES_NSF); if (db != null) db.remove(); db = dir.createDatabase(FAKENAMES_NSF, true); View view = db.createView("Names", "SELECT Form = \"DocName\""); view.createColumn(2, "Title", "Title").recycle(); view.createColumn(3, "Prefix", "NamePrefix").recycle(); view.createColumn(4, "First Name", "FirstName").recycle(); view.createColumn(5, "Last Name", "LastName").recycle(); view.createColumn(6, "Zip Code", "ZipCode").recycle(); view.createColumn(7, "Country", "Country").recycle(); view.createColumn(8, "Address", "Address").recycle(); view.createColumn(9, "Birthday", "Birthday").recycle(); view.createColumn(10, "PhoneNumber", "PhoneNumber").recycle(); view.recycle(); db.recycle(); dir.recycle(); // sess.recycle(); } catch (NotesException e) { e.printStackTrace(); } } } public static class DocCreate implements Runnable { static public int docCount = 0; static int dbCnt = 0; Faker faker = new Faker(); static long startTime = System.currentTimeMillis(); @SuppressWarnings("deprecation") @Override public void run() { try { Database db; Session sess = Factory.getSession(SessionType.CURRENT); db = sess.getDatabase("", FAKENAMES_NSF); DominoUtils.setBubbleExceptions(true); System.out.println("START"); String[] group = { "LocalDomainAdmins", "User", "Developer", "Staff" }; Document doc; for (int i = 0; i < 50000; i++) { try { doc = db.createDocument(); doc.replaceItemValue("Form", "DocName").recycle(); String firstName; String lastName; String namePrefix; doc.replaceItemValue("NamePrefix", namePrefix = faker.name().prefix()).recycle(); doc.replaceItemValue("FirstName", firstName = faker.name().firstName()).recycle(); doc.replaceItemValue("LastName", lastName = faker.name().lastName()).recycle(); doc.replaceItemValue("Title", join(new String[] { namePrefix, firstName, lastName }, " ")).recycle(); doc.replaceItemValue("NameSuffix", faker.name().suffix()).recycle(); doc.replaceItemValue("CityPrefix", faker.address().cityPrefix()).recycle(); doc.replaceItemValue("CitySuffix", faker.address().citySuffix()).recycle(); doc.replaceItemValue("ZipCode", faker.address().zipCode()).recycle(); doc.replaceItemValue("Country", faker.address().country()).recycle(); doc.replaceItemValue("Address", faker.address().streetAddress(true)).recycle(); Date d = new Date(faker.integer(1900, 2010), faker.integer(1, 11), faker.integer(1, 31)); DateTime birthday = sess.createDateTime(d); doc.replaceItemValue("Birthday", birthday).recycle(); birthday.recycle(); doc.replaceItemValue("PhoneNumber", faker.phoneNumber().phoneNumber()).recycle(); doc.replaceItemValue("CreditCardNumber", faker.business().creditCardNumber()).recycle(); doc.replaceItemValue("CreditCartExpiry", faker.business().creditCardExpiry()).recycle(); doc.replaceItemValue("CreditCartType", faker.business().creditCardType()).recycle(); Set<String> members = new HashSet<String>(); int j; int grpCnt = faker.integer(0, 4); for (j = 0; j < grpCnt; j++) { members.add(faker.options().option(group)); } if (grpCnt > 0) doc.replaceItemValue("Member", new Vector<String>(members)).recycle(); doc.save(); doc.recycle(); } catch (Exception e) { System.err.println("[i=" + i + "] Exception " + e.getClass().getName() + " at DocCount=" + docCount); e.printStackTrace(); return; } docCount++; if (docCount % 1000 == 0) { long runTime = System.currentTimeMillis() - startTime; if (runTime > 0) { System.out.println("Created " + docCount + " documents. " + (docCount * 1000 / runTime) + " docs/sec."); } } } db.recycle(); sess.recycle(); } catch (NotesException e) { e.printStackTrace(); } } } }