details:   https://code.openbravo.com/erp/devel/pi/rev/7d077afe4a18
changeset: 16748:7d077afe4a18
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Mon Jun 04 21:05:48 2012 +0200
summary:   Fixes issue 20666: Allow creation of proxy when setting property in 
business object

details:   https://code.openbravo.com/erp/devel/pi/rev/0f69dacb316f
changeset: 16749:0f69dacb316f
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Jun 05 13:06:49 2012 +0200
summary:   Related to issue 20515: Slow OBCriteria
Change the way order by is done to follow the standard approach of hibernate 
Criteria, resulting in a better joining of the order by table/property

details:   https://code.openbravo.com/erp/devel/pi/rev/a0b44c4d6906
changeset: 16750:a0b44c4d6906
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Jun 05 13:07:50 2012 +0200
summary:   Fixes issue 20611: OBCriteria doesn't support ScrollabeResults
Use the entity name instead of the classname to initialize the hibernate 
criteria

details:   https://code.openbravo.com/erp/devel/pi/rev/551e33daa248
changeset: 16751:551e33daa248
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Jun 05 13:08:30 2012 +0200
summary:   Related to issue 20515: Slow OBCriteria
Enhanced obcriteria testcase

details:   https://code.openbravo.com/erp/devel/pi/rev/f91001dc95e5
changeset: 16752:f91001dc95e5
user:      Martin Taal <martin.taal <at> openbravo.com>
date:      Tue Jun 05 15:34:12 2012 +0200
summary:   Related to issue 20515: Slow OBCriteria
Some additional test queries and printing of results

diffstat:

 
modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
 |    4 +-
 src-test/org/openbravo/test/AllAntTaskTests.java                               
            |    4 +-
 src-test/org/openbravo/test/AllQuickAntTaskTests.java                          
            |    4 +-
 src-test/org/openbravo/test/AllTests.java                                      
            |    4 +-
 src-test/org/openbravo/test/AntTaskTests.java                                  
            |    4 +-
 src-test/org/openbravo/test/dal/DalPerformanceCriteriaTest.java                
            |  461 ++++++++++
 src-test/org/openbravo/test/dal/DalPerformanceProxyTest.java                   
            |  146 +++
 src-test/org/openbravo/test/dal/IssuesTest.java                                
            |   12 +
 src/org/openbravo/base/model/domaintype/BaseForeignKeyDomainType.java          
            |   26 +-
 src/org/openbravo/dal/service/OBCriteria.java                                  
            |    3 +-
 src/org/openbravo/dal/service/OBDal.java                                       
            |   31 +-
 11 files changed, 687 insertions(+), 12 deletions(-)

diffs (truncated from 923 to 300 lines):

diff -r b9a5fed6dd96 -r f91001dc95e5 
modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
        Tue Jun 05 15:08:23 2012 +0200
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
        Tue Jun 05 15:34:12 2012 +0200
@@ -556,7 +556,9 @@
       if (keyToObject.get(key) != null) {
         value = keyToObject.get(key);
       } else {
-        if (property.getReferencedProperty() != null) {
+        // if an id we should use the get method as it loads from the first 
level
+        // cache
+        if (property.getReferencedProperty() != null && 
!property.getReferencedProperty().isId()) {
           final OBQuery<BaseOBObject> qry = 
OBDal.getInstance().createQuery(entity.getName(),
               property.getReferencedProperty().getName() + "=:reference");
           qry.setNamedParameter("reference", referencedId);
diff -r b9a5fed6dd96 -r f91001dc95e5 
src-test/org/openbravo/test/AllAntTaskTests.java
--- a/src-test/org/openbravo/test/AllAntTaskTests.java  Tue Jun 05 15:08:23 
2012 +0200
+++ b/src-test/org/openbravo/test/AllAntTaskTests.java  Tue Jun 05 15:34:12 
2012 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2009-2011 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2012 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -30,6 +30,7 @@
 import org.openbravo.test.dal.DalFilterTest;
 import org.openbravo.test.dal.DalPerformanceInventoryLineTest;
 import org.openbravo.test.dal.DalPerformanceProductTest;
+import org.openbravo.test.dal.DalPerformanceProxyTest;
 import org.openbravo.test.dal.DalQueryTest;
 import org.openbravo.test.dal.DalStoredProcedureTest;
 import org.openbravo.test.dal.DalTest;
@@ -86,6 +87,7 @@
     suite.addTestSuite(DalComplexQueryTestOrderLine.class);
     suite.addTestSuite(DalPerformanceInventoryLineTest.class);
     suite.addTestSuite(DalPerformanceProductTest.class);
+    suite.addTestSuite(DalPerformanceProxyTest.class);
     suite.addTestSuite(DalQueryTest.class);
     suite.addTestSuite(DalFilterTest.class);
     suite.addTestSuite(DalTest.class);
diff -r b9a5fed6dd96 -r f91001dc95e5 
src-test/org/openbravo/test/AllQuickAntTaskTests.java
--- a/src-test/org/openbravo/test/AllQuickAntTaskTests.java     Tue Jun 05 
15:08:23 2012 +0200
+++ b/src-test/org/openbravo/test/AllQuickAntTaskTests.java     Tue Jun 05 
15:34:12 2012 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2009-2011 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2012 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -26,6 +26,7 @@
 import org.openbravo.test.dal.AdminContextTest;
 import org.openbravo.test.dal.DalConnectionProviderTest;
 import org.openbravo.test.dal.DalFilterTest;
+import org.openbravo.test.dal.DalPerformanceProxyTest;
 import org.openbravo.test.dal.DalStoredProcedureTest;
 import org.openbravo.test.dal.DalTest;
 import org.openbravo.test.dal.DalUtilTest;
@@ -72,6 +73,7 @@
     // suite.addTestSuite(DalPerformanceInventoryLineTest.class);
     // suite.addTestSuite(DalPerformanceProductTest.class);
     // suite.addTestSuite(DalQueryTest.class);
+    suite.addTestSuite(DalPerformanceProxyTest.class);
     suite.addTestSuite(DalTest.class);
     suite.addTestSuite(DalFilterTest.class);
     suite.addTestSuite(DalUtilTest.class);
diff -r b9a5fed6dd96 -r f91001dc95e5 src-test/org/openbravo/test/AllTests.java
--- a/src-test/org/openbravo/test/AllTests.java Tue Jun 05 15:08:23 2012 +0200
+++ b/src-test/org/openbravo/test/AllTests.java Tue Jun 05 15:34:12 2012 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2008-2011 Openbravo SLU 
+ * All portions are Copyright (C) 2008-2012 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -26,6 +26,7 @@
 import org.openbravo.test.dal.DalConnectionProviderTest;
 import org.openbravo.test.dal.DalCopyTest;
 import org.openbravo.test.dal.DalFilterTest;
+import org.openbravo.test.dal.DalPerformanceProxyTest;
 import org.openbravo.test.dal.DalQueryTest;
 import org.openbravo.test.dal.DalStoredProcedureTest;
 import org.openbravo.test.dal.DalTest;
@@ -79,6 +80,7 @@
     suite.addTestSuite(DalCopyTest.class);
     suite.addTestSuite(DalStoredProcedureTest.class);
     suite.addTestSuite(ReadByNameTest.class);
+    suite.addTestSuite(DalPerformanceProxyTest.class);
 
     // model
     suite.addTestSuite(RuntimeModelTest.class);
diff -r b9a5fed6dd96 -r f91001dc95e5 
src-test/org/openbravo/test/AntTaskTests.java
--- a/src-test/org/openbravo/test/AntTaskTests.java     Tue Jun 05 15:08:23 
2012 +0200
+++ b/src-test/org/openbravo/test/AntTaskTests.java     Tue Jun 05 15:34:12 
2012 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2009-2011 Openbravo SLU 
+ * All portions are Copyright (C) 2009-2012 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -29,6 +29,7 @@
 import org.openbravo.test.dal.DalCopyTest;
 import org.openbravo.test.dal.DalPerformanceInventoryLineTest;
 import org.openbravo.test.dal.DalPerformanceProductTest;
+import org.openbravo.test.dal.DalPerformanceProxyTest;
 import org.openbravo.test.dal.DalQueryTest;
 import org.openbravo.test.dal.DalStoredProcedureTest;
 import org.openbravo.test.dal.DalTest;
@@ -86,6 +87,7 @@
     suite.addTestSuite(DalComplexQueryTestOrderLine.class);
     suite.addTestSuite(DalPerformanceInventoryLineTest.class);
     suite.addTestSuite(DalPerformanceProductTest.class);
+    suite.addTestSuite(DalPerformanceProxyTest.class);
     suite.addTestSuite(DalQueryTest.class);
     suite.addTestSuite(DalConnectionProviderTest.class);
     suite.addTestSuite(DalTest.class);
diff -r b9a5fed6dd96 -r f91001dc95e5 
src-test/org/openbravo/test/dal/DalPerformanceCriteriaTest.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/src-test/org/openbravo/test/dal/DalPerformanceCriteriaTest.java   Tue Jun 
05 15:34:12 2012 +0200
@@ -0,0 +1,461 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html 
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License. 
+ * The Original Code is Openbravo ERP. 
+ * The Initial Developer of the Original Code is Openbravo SLU 
+ * All portions are Copyright (C) 2012 Openbravo SLU 
+ * All Rights Reserved. 
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+
+package org.openbravo.test.dal;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.UUID;
+
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
+import org.hibernate.criterion.Restrictions;
+import org.hibernate.engine.SessionImplementor;
+import org.junit.Assert;
+import org.openbravo.base.exception.OBException;
+import org.openbravo.base.provider.OBProvider;
+import org.openbravo.base.structure.BaseOBObject;
+import org.openbravo.dal.service.OBCriteria;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.dal.service.OBQuery;
+import org.openbravo.model.ad.datamodel.Table;
+import org.openbravo.model.common.businesspartner.BusinessPartner;
+import org.openbravo.model.common.businesspartner.Category;
+import org.openbravo.model.common.currency.Currency;
+import org.openbravo.model.common.plm.Product;
+import org.openbravo.model.materialmgmt.transaction.MaterialTransaction;
+import org.openbravo.test.base.BaseTest;
+
+/**
+ * Test case to try and test proxy loading or stateless sessions.
+ * 
+ * @author mtaal
+ */
+
+public class DalPerformanceCriteriaTest extends BaseTest {
+
+  private static final int CNT = 1000;
+
+  public void testPerformance() {
+    createManyBPs();
+
+    doTestCriteriaPerformance(new QueryTest1(false));
+    doTestCriteriaPerformance(new QueryTest2(false));
+    doTestCriteriaPerformance(new QueryTest3(false));
+    doTestCriteriaPerformance(new QueryTest4(false));
+    doTestCriteriaPerformance(new QueryTest5(false));
+    doTestCriteriaPerformance(new QueryTest1(true));
+    doTestCriteriaPerformance(new QueryTest2(true));
+    doTestCriteriaPerformance(new QueryTest3(true));
+    doTestCriteriaPerformance(new QueryTest4(true));
+    doTestCriteriaPerformance(new QueryTest5(true));
+  }
+
+  public void doTestCriteriaPerformance(QueryTest queryTest) {
+    OBDal.getInstance().commitAndClose();
+
+    // usefull when printing
+    if (true) {
+      // warmup
+      queryTest.doCriteriaQry();
+      // show sql
+      queryTest.doCriteriaQry();
+      queryTest.doHqlQry();
+    }
+
+    // warmup
+    for (int i = 0; i < 10; i++) {
+      queryTest.doCriteriaQry();
+    }
+
+    long t1 = System.currentTimeMillis();
+    int v1 = -1;
+    for (int i = 0; i < CNT; i++) {
+      int v2 = queryTest.doCriteriaQry();
+      Assert.assertTrue(i == 0 || v1 == v2);
+      v1 = v2;
+      OBDal.getInstance().getSession().clear();
+    }
+    OBDal.getInstance().commitAndClose();
+    t1 = System.currentTimeMillis() - t1;
+
+    // warmup
+    for (int i = 0; i < 10; i++) {
+      queryTest.doHqlQry();
+    }
+
+    long t2 = System.currentTimeMillis();
+    for (int i = 0; i < CNT; i++) {
+      int v2 = queryTest.doHqlQry();
+      // same output as previous criteria/hql queries
+      Assert.assertTrue(v1 == v2);
+      v1 = v2;
+      OBDal.getInstance().getSession().clear();
+    }
+    OBDal.getInstance().commitAndClose();
+    t2 = System.currentTimeMillis() - t2;
+    int percentage = (int) ((100 * (t1 - t2)) / t2);
+    System.err.println("HQL is " + percentage + "% faster - (resultCount: " + 
v1 + ") - "
+        + (queryTest.isDoScroll() ? "SCROLL - Query: " : "Query: ") + 
queryTest.getId()
+        + " - HQL time: " + t1 + "ms");
+  }
+
+  private abstract class QueryTest {
+    public abstract int doCriteriaQry();
+
+    public abstract int doHqlQry();
+
+    public abstract String getId();
+
+    public abstract boolean isDoScroll();
+
+  }
+
+  public void testCriteriaScrollable() {
+
+    OBCriteria<BusinessPartner> c = 
OBDal.getInstance().createCriteria(BusinessPartner.class);
+    ScrollableResults iterator = c.scroll(ScrollMode.FORWARD_ONLY);
+    iterator.next();
+  }
+
+  private class QueryTest1 extends QueryTest {
+
+    private String qryStr = "";
+    private boolean doScroll = false;
+
+    public QueryTest1(boolean doScroll) {
+      this.doScroll = doScroll;
+    }
+
+    public int doCriteriaQry() {
+      final OBCriteria<Currency> obc = 
OBDal.getInstance().createCriteria(Currency.class);
+      obc.add(Restrictions.eq(Currency.PROPERTY_ISOCODE, "USD"));
+      if (doScroll) {
+        final ScrollableResults r = obc.scroll(ScrollMode.FORWARD_ONLY);
+        int cnt = 0;
+        while (r.next()) {
+          cnt++;
+        }
+        return cnt;
+      }
+      final List<Currency> cs = obc.list();
+      return cs.size();
+    }
+
+    public int doHqlQry() {
+      final OBQuery<Currency> obq = OBDal.getInstance()
+          .createQuery(Currency.class, "iSOCode='USD'");
+      final List<Currency> cs = obq.list();
+      qryStr = "Currency with " + obq.getWhereAndOrderBy();
+      return cs.size();
+    }
+
+    public String getId() {
+      return qryStr;

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to