1   /*
2    * This file is part of Domingo
3    * an Open Source Java-API to Lotus Notes/Domino
4    * hosted at http://domingo.sourceforge.net
5    *
6    * Copyright (c) 2003-2007 Beck et al. projects GmbH München (http://www.bea.de)
7    *
8    * This library is free software; you can redistribute it and/or
9    * modify it under the terms of the GNU Lesser General Public
10   * License as published by the Free Software Foundation; either
11   * version 2.1 of the License, or (at your option) any later version.
12   *
13   * This library is distributed in the hope that it will be useful,
14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16   * Lesser General Public License for more details.
17   *
18   * You should have received a copy of the GNU Lesser General Public
19   * License along with this library; if not, write to the Free Software
20   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21   */
22  
23  package de.bea.domingo;
24  
25  import java.util.Calendar;
26  import java.util.Iterator;
27  
28  /***
29   * Test stability of Domingo.
30   *
31   * @author <a href=mailto:kriede@users.sourceforge.net>Kurt Riede</a>
32   */
33  public final class TestStability {
34  
35      /***
36       * Constructor.
37       */
38      public TestStability() {
39      }
40  
41      /***
42       * Main method of the test.
43       *
44       * @param args arguments
45       */
46      public static void main(final String[] args) {
47          log("Start");
48          logMem();
49          TestStability test = new TestStability();
50          test.run();
51          logMem();
52          log("Finished");
53      }
54  
55      private void run() {
56          log("run repeated tests");
57          for (int i = 0; i < 10; i++) {
58              logMem();
59              test();
60              sleep(10);
61          }
62          log("Wait, run gc, run finalizers");
63          for (int i = 0; i < 10; i++) {
64              System.gc();
65              sleep(50);
66              logMem();
67          }
68          logMem();
69      }
70  
71      private void test() {
72          try {
73              final DNotesFactory factory = DNotesFactory.getInstance();
74              final DSession session = factory.getSession();
75              final DDatabase database = session.getDatabase("", "log.nsf");
76              final Iterator iterator = database.getAllDocuments();
77              while (iterator.hasNext()) {
78                  DDocument doc = (DDocument) iterator.next();
79                  doc.replaceItemValue("Form", "Test");
80                  doc.getLastModified();
81                  doc.replaceItemValue("Calendar", Calendar.getInstance());
82              }
83          } catch (DNotesException e) {
84              e.printStackTrace();
85          } finally {
86              try {
87                  DNotesFactory.dispose();
88              } catch (DNotesRuntimeException e1) {
89                  e1.printStackTrace();
90              }
91          }
92      }
93  
94      private static void log(String msg) {
95          System.out.println(msg);
96      }
97  
98      private static void logMem() {
99          System.out.println("Free Memory: " + Runtime.getRuntime().freeMemory());
100     }
101 
102     private void sleep(int millis) {
103         try {
104             synchronized (this) {
105                 wait(millis);
106             }
107         } catch (InterruptedException e1) {
108             e1.printStackTrace();
109         }
110     }
111 }