Introduce Hibernate lazy loading
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 27 Jun 2008 12:39:27 +0000 (12:39 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 27 Jun 2008 12:39:27 +0000 (12:39 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1294 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TestResultDaoHibernate.java [deleted file]
org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java [new file with mode: 0644]
org.argeo.slc.hibernate/src/main/resources/META-INF/services/org.apache.tools.ant.ProjectHelper [deleted file]
org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/spring/applicationContext.xml
org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml
org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml
org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java

diff --git a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TestResultDaoHibernate.java b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TestResultDaoHibernate.java
deleted file mode 100644 (file)
index c18d2be..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.argeo.slc.hibernate.test.tree;\r
-\r
-import java.util.Date;\r
-import java.util.List;\r
-\r
-import org.argeo.slc.core.SlcException;\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.test.TestResult;\r
-import org.argeo.slc.core.test.tree.TreeTestResult;\r
-import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
-import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
-\r
-/**\r
- * The Hibernate implementation for tree-based result of the test result dao.\r
- * \r
- * @see TreeTestResult\r
- */\r
-public class TestResultDaoHibernate extends HibernateDaoSupport implements\r
-               TreeTestResultDao {\r
-\r
-       public void create(TestResult testResult) {\r
-               getHibernateTemplate().save(testResult);\r
-       }\r
-\r
-       public void update(TestResult testResult) {\r
-               getHibernateTemplate().saveOrUpdate(testResult);\r
-       }\r
-\r
-       public TreeTestResult getTestResult(String uuid) {\r
-               List<?> list = getHibernateTemplate().find(\r
-                               "from TreeTestResult where uuid=?", uuid);\r
-               if (list.size() == 0) {\r
-                       return null;\r
-               } else {\r
-                       return (TreeTestResult) list.get(0);\r
-               }\r
-\r
-       }\r
-\r
-       public List<TreeTestResult> listTestResults() {\r
-               return (List<TreeTestResult>) getHibernateTemplate().find(\r
-                               "from TreeTestResult");\r
-       }\r
-\r
-       public List<TreeTestResult> listResults(TreeSPath path) {\r
-               List<TreeTestResult> list = getHibernateTemplate().find(\r
-                               "from TreeTestResult res where ? in indices(res.resultParts)",\r
-                               path.getAsUniqueString());\r
-               return list;\r
-       }\r
-\r
-       public void close(String id, Date closeDate) {\r
-               // TreeTestResult ttr = (TreeTestResult) getHibernateTemplate().load(\r
-               // TreeTestResult.class, id);\r
-               TreeTestResult ttr = getTestResult(id);\r
-               if (ttr != null) {\r
-                       ttr.setCloseDate(closeDate);\r
-                       getHibernateTemplate().update(ttr);\r
-               } else {\r
-                       throw new SlcException("Result with id " + id\r
-                                       + " could not be closed because it was not found.");\r
-               }\r
-       }\r
-\r
-}\r
diff --git a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java
new file mode 100644 (file)
index 0000000..17c7d85
--- /dev/null
@@ -0,0 +1,65 @@
+package org.argeo.slc.hibernate.test.tree;\r
+\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.TestResult;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
+\r
+/**\r
+ * The Hibernate implementation for tree-based result of the test result dao.\r
+ * \r
+ * @see TreeTestResult\r
+ */\r
+public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements\r
+               TreeTestResultDao {\r
+\r
+       public void create(TestResult testResult) {\r
+               getHibernateTemplate().save(testResult);\r
+       }\r
+\r
+       public void update(TestResult testResult) {\r
+               getHibernateTemplate().saveOrUpdate(testResult);\r
+       }\r
+\r
+       public TreeTestResult getTestResult(String uuid) {\r
+               List<?> list = getHibernateTemplate().find(\r
+                               "from TreeTestResult where uuid=?", uuid);\r
+               if (list.size() == 0) {\r
+                       return null;\r
+               } else {\r
+                       return (TreeTestResult) list.get(0);\r
+               }\r
+\r
+       }\r
+\r
+       public List<TreeTestResult> listTestResults() {\r
+               return (List<TreeTestResult>) getHibernateTemplate().find(\r
+                               "from TreeTestResult");\r
+       }\r
+\r
+       public List<TreeTestResult> listResults(TreeSPath path) {\r
+               List<TreeTestResult> list = getHibernateTemplate().find(\r
+                               "from TreeTestResult res where ? in indices(res.resultParts)",\r
+                               path.getAsUniqueString());\r
+               return list;\r
+       }\r
+\r
+       public void close(String id, Date closeDate) {\r
+               // TreeTestResult ttr = (TreeTestResult) getHibernateTemplate().load(\r
+               // TreeTestResult.class, id);\r
+               TreeTestResult ttr = getTestResult(id);\r
+               if (ttr != null) {\r
+                       ttr.setCloseDate(closeDate);\r
+                       getHibernateTemplate().update(ttr);\r
+               } else {\r
+                       throw new SlcException("Result with id " + id\r
+                                       + " could not be closed because it was not found.");\r
+               }\r
+       }\r
+\r
+}\r
diff --git a/org.argeo.slc.hibernate/src/main/resources/META-INF/services/org.apache.tools.ant.ProjectHelper b/org.argeo.slc.hibernate/src/main/resources/META-INF/services/org.apache.tools.ant.ProjectHelper
deleted file mode 100644 (file)
index 1c222d5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-org.argeo.slc.ant.SlcProjectHelper
\ No newline at end of file
index e18b8a2bc934e5b296583672ad450cddd1c323b3..fe975fb7c3160b001b5e57450f7c118d67305bd3 100644 (file)
@@ -58,7 +58,7 @@
        </bean>\r
 \r
        <bean id="slcTemplates.dao.testResultDao"\r
-               class="org.argeo.slc.hibernate.test.tree.TestResultDaoHibernate"\r
+               class="org.argeo.slc.hibernate.test.tree.TreeTestResultDaoHibernate"\r
                abstract="true">\r
        </bean>\r
 \r
index f86de731267083d064192573211bdaf822994085..74a02aa615117279a374aa2c8d48bd0140f84107 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>\r
+<?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC\r
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
@@ -7,19 +7,19 @@
                <id name="tid" column="T_ID">\r
                        <generator class="native" />\r
                </id>\r
-               <list name="parts" cascade="all" lazy="false">\r
+               <list name="parts" cascade="all">\r
                        <key column="PART_SUBLIST_ID" />\r
                        <list-index column="INDX" />\r
-                       <composite-element\r
-                               class="org.argeo.slc.core.test.SimpleResultPart">\r
-                               <property name="status" column="STATUS" not-null="true" />\r
-                               <property name="message" column="MESSAGE"\r
-                                       not-null="true" />\r
-                               <property name="exceptionMessage"\r
-                                       column="EXCEPTION_MESSAGE" not-null="false" />\r
-                               <property name="testRunUuid" column="TEST_RUN_UUID"\r
-                                       not-null="false" />\r
-                       </composite-element>\r
-               </list>\r
-       </class>\r
+                       <composite-element
+                               class="org.argeo.slc.core.test.SimpleResultPart">
+                               <property name="status" column="STATUS" not-null="true" />
+                               <property name="message" column="MESSAGE"
+                                       not-null="true" />
+                               <property name="exceptionMessage"
+                                       column="EXCEPTION_MESSAGE" not-null="false" />
+                               <property name="testRunUuid" column="TEST_RUN_UUID"
+                                       not-null="false" />
+                       </composite-element>
+               </list>
+       </class>
 </hibernate-mapping>
\ No newline at end of file
index 37db79a6d93852d70c4923fcbcd20eb978c1bbe0..efc6eb85a0afe796b78710a5fe2cad1190ca3bb4 100644 (file)
@@ -1,34 +1,35 @@
-<?xml version="1.0"?>\r
+<?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC\r
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
 <hibernate-mapping package="org.argeo.slc.core.test.tree">\r
        <class name="TreeTestResult" table="TREE_TEST_RESULT">\r
-               <id name="uuid" column="UUID"/>\r
+               <id name="uuid" column="UUID" />\r
 \r
-               <property name="closeDate" column="CLOSE_DATE" type="timestamp"\r
-                       not-null="false" />\r
-\r
-               <map name="resultParts" table="RESULT_PARTS_MAP" cascade="all"\r
-                       lazy="false" sort="natural">\r
-                       <key column="PARENT_ID" />\r
-                       <composite-map-key\r
-                               class="org.argeo.slc.core.structure.tree.TreeSPath">\r
-                               <key-property name="asUniqueString" column="PATH" />\r
-                       </composite-map-key>\r
-                       <many-to-many class="PartSubList" column="PART_SUB_LIST_ID"\r
-                               unique="true" lazy="false" />\r
-               </map>\r
-\r
-               <map name="elements" table="RESULT_ELEMENTS_MAP"\r
-                       cascade="all" lazy="false" sort="natural">\r
-                       <key column="PARENT_ID" />\r
-                       <composite-map-key\r
-                               class="org.argeo.slc.core.structure.tree.TreeSPath">\r
-                               <key-property name="asUniqueString" column="PATH" />\r
-                       </composite-map-key>\r
-                       <many-to-many class="org.argeo.slc.core.structure.SimpleSElement" column="ELEMENT_ID"\r
-                               unique="true" lazy="false" />\r
-               </map>\r
-       </class>\r
+               <property name="closeDate" column="CLOSE_DATE" type="timestamp"
+                       not-null="false" />
+
+               <map name="resultParts" table="RESULT_PARTS_MAP" cascade="all"
+                       sort="natural">
+                       <key column="PARENT_ID" />
+                       <composite-map-key
+                               class="org.argeo.slc.core.structure.tree.TreeSPath">
+                               <key-property name="asUniqueString" column="PATH" />
+                       </composite-map-key>
+                       <many-to-many class="PartSubList" column="PART_SUB_LIST_ID"
+                               unique="true" />
+               </map>
+
+               <map name="elements" table="RESULT_ELEMENTS_MAP" cascade="all"
+                       sort="natural">
+                       <key column="PARENT_ID" />
+                       <composite-map-key
+                               class="org.argeo.slc.core.structure.tree.TreeSPath">
+                               <key-property name="asUniqueString" column="PATH" />
+                       </composite-map-key>
+                       <many-to-many
+                               class="org.argeo.slc.core.structure.SimpleSElement"
+                               column="ELEMENT_ID" unique="true" />
+               </map>
+       </class>
 </hibernate-mapping>
\ No newline at end of file
index 6737cb6c52f67b8ed30a6e35aaa72e332c1c5da6..7896b01fa2b9ad71c2eb2721f8d69881b3261a9b 100644 (file)
@@ -1,5 +1,7 @@
 package org.argeo.slc.hibernate.test.tree;\r
 \r
+import java.sql.SQLException;\r
+\r
 import org.argeo.slc.core.structure.SimpleSElement;\r
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
@@ -10,14 +12,22 @@ import org.argeo.slc.dao.test.tree.TreeTestResultDao;
 import org.argeo.slc.unit.AbstractSpringTestCase;\r
 import org.argeo.slc.unit.test.tree.TreeTestResultTestUtils;\r
 import org.argeo.slc.unit.test.tree.UnitTestTreeUtil;\r
+import org.hibernate.HibernateException;\r
+import org.hibernate.LockMode;\r
+import org.hibernate.Session;\r
+import org.hibernate.SessionFactory;\r
+import org.hibernate.Transaction;\r
+import org.springframework.orm.hibernate3.HibernateCallback;\r
+import org.springframework.orm.hibernate3.HibernateTemplate;\r
 \r
 public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {\r
        private TreeTestResultDao testResultDao = null;\r
+       private HibernateTemplate template = null;\r
 \r
        @Override\r
        public void setUp() {\r
-               testResultDao = (TreeTestResultDao) getContext().getBean(\r
-                               "testResultDao");\r
+               testResultDao = getBean(TreeTestResultDao.class);\r
+               template = new HibernateTemplate(getBean(SessionFactory.class));\r
        }\r
 \r
        public void testCreate() {\r
@@ -29,7 +39,7 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                TreeTestResult ttrPersisted = (TreeTestResult) testResultDao\r
                                .getTestResult(ttr.getUuid());\r
 \r
-               UnitTestTreeUtil.assertTreeTestResult(ttr, ttrPersisted);\r
+               assertInHibernate(ttr, ttrPersisted);\r
        }\r
 \r
        public void testUpdate() {\r
@@ -37,7 +47,7 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                                .createCompleteTreeTestResult();\r
                testResultDao.create(ttr);\r
 \r
-               TreeTestResult ttrUpdated = (TreeTestResult) testResultDao\r
+               final TreeTestResult ttrUpdated = (TreeTestResult) testResultDao\r
                                .getTestResult(ttr.getUuid());\r
 \r
                // Modifying ttrUpdated\r
@@ -49,21 +59,29 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                 */\r
 \r
                String pathStr = "/test";\r
-               TreeSPath path = TreeSPath.parseToCreatePath(pathStr);\r
+               final TreeSPath path = new TreeSPath(pathStr);\r
 \r
-               TreeSRegistry registry = new TreeSRegistry();\r
+               final TreeSRegistry registry = new TreeSRegistry();\r
                SimpleSElement elem = new SimpleSElement("Unit Test");\r
                elem.getTags().put("myTag", "myTagValue");\r
                registry.register(path, elem);\r
 \r
-               ttrUpdated.notifyCurrentPath(registry, path);\r
+               template.execute(new HibernateCallback() {\r
+\r
+                       public Object doInHibernate(Session session)\r
+                                       throws HibernateException, SQLException {\r
+                               session.refresh(ttrUpdated);\r
+                               ttrUpdated.notifyCurrentPath(registry, path);\r
 \r
-               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
-                               .createSimpleResultPartPassed());\r
-               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
-                               .createSimpleResultPartFailed());\r
-               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
-                               .createSimpleResultPartError());\r
+                               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
+                                               .createSimpleResultPartPassed());\r
+                               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
+                                               .createSimpleResultPartFailed());\r
+                               ttrUpdated.addResultPart(TreeTestResultTestUtils\r
+                                               .createSimpleResultPartError());\r
+                               return null;\r
+                       }\r
+               });\r
 \r
                testResultDao.update(ttrUpdated);\r
 \r
@@ -71,7 +89,7 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                TreeTestResult ttrRetrieved = (TreeTestResult) testResultDao\r
                                .getTestResult(ttr.getUuid());\r
 \r
-               UnitTestTreeUtil.assertTreeTestResult(ttrRetrieved, ttrUpdated);\r
+               assertInHibernate(ttrUpdated, ttrRetrieved);\r
        }\r
 \r
        public void testMultipleUpdateScenario() throws Exception {\r
@@ -112,6 +130,12 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                ttr.close();\r
 \r
                testResultDao.close(ttr.getUuid(), ttr.getCloseDate());\r
+\r
+               TreeTestResult ttrRetrieved = (TreeTestResult) testResultDao\r
+                               .getTestResult(ttr.getUuid());\r
+\r
+               assertInHibernate(ttr, ttrRetrieved);\r
+\r
        }\r
 \r
        @Override\r
@@ -119,4 +143,18 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                return "org/argeo/slc/hibernate/applicationContext.xml";\r
        }\r
 \r
+       public void assertInHibernate(final TreeTestResult ttrExpected,\r
+                       final TreeTestResult ttrPersisted) {\r
+               template.execute(new HibernateCallback() {\r
+                       public Object doInHibernate(Session session) {\r
+                               session.refresh(ttrPersisted);\r
+                               UnitTestTreeUtil\r
+                                               .assertTreeTestResult(ttrExpected, ttrPersisted);\r
+                               return null;\r
+                       }\r
+\r
+               });\r
+\r
+       }\r
+\r
 }\r