Introduce Hibernate lazy loading for SlcExecution and TestResultCollections
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 27 Jun 2008 13:47:42 +0000 (13:47 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 27 Jun 2008 13:47:42 +0000 (13:47 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1296 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/unit/HibernateTestCase.java [new file with mode: 0644]
org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/process/SlcExecution.hbm.xml
org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResultCollection.hbm.xml
org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java
org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/CastorTestResultDaoHibernateTest.java
org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernateTest.java
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/unit/HibernateTestCase.java b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/unit/HibernateTestCase.java
new file mode 100644 (file)
index 0000000..244474c
--- /dev/null
@@ -0,0 +1,19 @@
+package org.argeo.slc.hibernate.unit;
+
+import org.argeo.slc.unit.AbstractSpringTestCase;
+import org.hibernate.SessionFactory;
+import org.springframework.orm.hibernate3.HibernateTemplate;
+
+public class HibernateTestCase extends AbstractSpringTestCase {
+       private HibernateTemplate hibernateTemplate;
+
+       public HibernateTemplate getHibernateTemplate() {
+               if (hibernateTemplate == null) {
+                       hibernateTemplate = new HibernateTemplate(
+                                       getBean(SessionFactory.class));
+               }
+
+               return hibernateTemplate;
+       }
+
+}
index bde8cc54d701e26c92859e1c1322760e0ff4a407..0bd96fd23fbe1953e58000d3b567923245958e25 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
                <property name="type" column="TYPE" />\r
                <property name="status" column="STATUS" />\r
 \r
-               <list name="steps" cascade="all" lazy="false"\r
-                       table="SLC_EXECUTIONS_STEPS">\r
+               <list name="steps" cascade="all" table="SLC_EXECUTIONS_STEPS">\r
                        <key column="SLC_EXECUTION_ID" />\r
                        <list-index column="INDX" />\r
-                       <one-to-many\r
-                               class="org.argeo.slc.core.process.SlcExecutionStep" />\r
-               </list>\r
-\r
-               <map name="attributes" table="SLC_EXEC_ATTRS_MAP" cascade="all"\r
-                       lazy="false" sort="natural">\r
-                       <key column="PARENT_ID" />\r
-                       <map-key type="string" column="ATTR_NAME" />\r
-                       <element column="NAME" type="string" />\r
-               </map>\r
-\r
-       </class>\r
+                       <one-to-many
+                               class="org.argeo.slc.core.process.SlcExecutionStep" />
+               </list>
+
+               <map name="attributes" table="SLC_EXEC_ATTRS_MAP" cascade="all"
+                       lazy="false" sort="natural">
+                       <key column="PARENT_ID" />
+                       <map-key type="string" column="ATTR_NAME" />
+                       <element column="NAME" type="string" />
+               </map>
+
+       </class>
 </hibernate-mapping>
\ No newline at end of file
index 19fce6656fa0979c2a6a2e4c9d1738aa4c43458e..82d976052fe8e178277f2c5eef2d089ac79d7d1f 100644 (file)
@@ -1,16 +1,16 @@
-<?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="TreeTestResultCollection"\r
-               table="TREE_TEST_RESULT_COLLECTION">\r
-               <id name="id" column="ID" />\r
-\r
-               <set name="results" table="TTR_COLLECTION_RESULTS"\r
-                       sort="natural" lazy="false">\r
-                       <key column="PARENT_ID" />\r
-                       <many-to-many class="TreeTestResult" />\r
-               </set>\r
-       </class>\r
+       <class name="TreeTestResultCollection"
+               table="TREE_TEST_RESULT_COLLECTION">
+               <id name="id" column="ID" />
+
+               <set name="results" table="TTR_COLLECTION_RESULTS"
+                       sort="natural">
+                       <key column="PARENT_ID" />
+                       <many-to-many class="TreeTestResult" />
+               </set>
+       </class>
 </hibernate-mapping>
\ No newline at end of file
index 0de56e62c587ecf63a0701387f7c9a318bae3074..2bbb092d51107a0e6d6e1ba536be49975527bbf3 100644 (file)
@@ -1,14 +1,18 @@
 package org.argeo.slc.hibernate.process;\r
 \r
+import java.sql.SQLException;\r
 import java.util.List;\r
 \r
 import org.argeo.slc.core.process.SlcExecution;\r
 import org.argeo.slc.core.process.SlcExecutionStep;\r
 import org.argeo.slc.dao.process.SlcExecutionDao;\r
-import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.argeo.slc.hibernate.unit.HibernateTestCase;\r
 import org.argeo.slc.unit.process.SlcExecutionTestUtils;\r
+import org.hibernate.HibernateException;\r
+import org.hibernate.Session;\r
+import org.springframework.orm.hibernate3.HibernateCallback;\r
 \r
-public class SlcExecutionHibernateTest extends AbstractSpringTestCase {\r
+public class SlcExecutionHibernateTest extends HibernateTestCase {\r
 \r
        public void testSave() {\r
                SlcExecutionDao dao = getBean(SlcExecutionDao.class);\r
@@ -20,12 +24,7 @@ public class SlcExecutionHibernateTest extends AbstractSpringTestCase {
                dao.create(slcExec);\r
 \r
                SlcExecution slcExecPersisted = dao.getSlcExecution(slcExec.getUuid());\r
-               SlcExecutionTestUtils.assertSlcExecution(slcExec, slcExecPersisted);\r
-               assertEquals(2, slcExecPersisted.getSteps().size());\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(slcExec.getSteps().get(0),\r
-                               slcExecPersisted.getSteps().get(0));\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(slcExec.getSteps().get(1),\r
-                               slcExecPersisted.getSteps().get(1));\r
+               assertSlcExecution(slcExec, slcExecPersisted);\r
        }\r
 \r
        public void testModify() {\r
@@ -39,31 +38,46 @@ public class SlcExecutionHibernateTest extends AbstractSpringTestCase {
                dao.create(slcExec);\r
 \r
                // slcExecution retrieval and update\r
-               SlcExecution slcExecRetrieved = dao.getSlcExecution(slcExec.getUuid());\r
-\r
-               List<String> logLineListStep0 = slcExecRetrieved.getSteps().get(0)\r
-                               .getLogLines();\r
-               for (String logLine : logLineListStep0)\r
-                       logLine = logLine + "appended Log text";\r
-\r
-               slcExecRetrieved.getSteps().get(0).setLogLines(logLineListStep0);\r
-               slcExecRetrieved.getSteps().add(\r
-                               new SlcExecutionStep("LOG", "Three \n log \n lines"));\r
+               final SlcExecution slcExecRetrieved = dao.getSlcExecution(slcExec\r
+                               .getUuid());\r
+\r
+               getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+                       public Object doInHibernate(Session session)\r
+                                       throws HibernateException, SQLException {\r
+                               session.refresh(slcExecRetrieved);\r
+                               List<String> logLineListStep0 = slcExecRetrieved.getSteps()\r
+                                               .get(0).getLogLines();\r
+                               for (String logLine : logLineListStep0)\r
+                                       logLine = logLine + "appended Log text";\r
+\r
+                               slcExecRetrieved.getSteps().get(0)\r
+                                               .setLogLines(logLineListStep0);\r
+                               slcExecRetrieved.getSteps().add(\r
+                                               new SlcExecutionStep("LOG", "Three \n log \n lines"));\r
+                               return null;\r
+                       }\r
+               });\r
 \r
                dao.update(slcExecRetrieved);\r
 \r
                // updated slcExecution retrieval and comparison\r
                SlcExecution slcExecUpdated = dao.getSlcExecution(slcExec.getUuid());\r
 \r
-               SlcExecutionTestUtils.assertSlcExecution(slcExecRetrieved,\r
-                               slcExecUpdated);\r
-               assertEquals(3, slcExecUpdated.getSteps().size());\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(slcExecUpdated.getSteps()\r
-                               .get(0), slcExecRetrieved.getSteps().get(0));\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(slcExecUpdated.getSteps()\r
-                               .get(1), slcExecRetrieved.getSteps().get(1));\r
-               SlcExecutionTestUtils.assertSlcExecutionStep(slcExecUpdated.getSteps()\r
-                               .get(2), slcExecRetrieved.getSteps().get(2));\r
+               assertSlcExecution(slcExecRetrieved, slcExecUpdated);\r
+       }\r
+\r
+       public void assertSlcExecution(final SlcExecution expected,\r
+                       final SlcExecution persisted) {\r
+               getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+                       public Object doInHibernate(Session session)\r
+                                       throws HibernateException, SQLException {\r
+                               session.refresh(persisted);\r
+                               SlcExecutionTestUtils.assertSlcExecution(expected, persisted);\r
+                               return null;\r
+                       }\r
+               });\r
        }\r
 \r
        @Override\r
index c57fcb52c1c1296e8e1754ff8a3bf8f56ea7c11a..8880f455cf122f0ad431a866ad06474232a710c2 100644 (file)
@@ -3,15 +3,14 @@ package org.argeo.slc.hibernate.test.tree;
 import org.argeo.slc.core.structure.tree.TreeSPath;\r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
-import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.argeo.slc.hibernate.unit.HibernateTestCase;\r
 import org.argeo.slc.unit.test.tree.TreeTestResultTestUtils;\r
-import org.argeo.slc.unit.test.tree.UnitTestTreeUtil;\r
 import org.springframework.oxm.Marshaller;\r
 import org.springframework.oxm.Unmarshaller;\r
 import org.springframework.xml.transform.StringResult;\r
 import org.springframework.xml.transform.StringSource;\r
 \r
-public class CastorTestResultDaoHibernateTest extends AbstractSpringTestCase {\r
+public class CastorTestResultDaoHibernateTest extends HibernateTestCase {\r
 \r
        public void testUnmarshallAndCreate() throws Exception {\r
                TreeTestResult ttr = TreeTestResultTestUtils\r
@@ -32,7 +31,8 @@ public class CastorTestResultDaoHibernateTest extends AbstractSpringTestCase {
                ttrDao.create(ttrUnm);\r
                TreeTestResult ttrPersist = ttrDao.getTestResult(ttr.getUuid());\r
 \r
-               UnitTestTreeUtil.assertTreeTestResult(ttr, ttrPersist);\r
+               TreeTestResultDaoHibernateTest.assertInHibernate(\r
+                               getHibernateTemplate(), ttr, ttrPersist);\r
        }\r
 \r
        @Override\r
index 344adbdb0e73c99086463380dc1c72d1458f359a..34430c96694362c61c100bd98bc292bd6310a8d5 100644 (file)
@@ -1,15 +1,19 @@
 package org.argeo.slc.hibernate.test.tree;\r
 \r
+import java.sql.SQLException;\r
+\r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
-import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.argeo.slc.hibernate.unit.HibernateTestCase;\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.Session;\r
+import org.springframework.orm.hibernate3.HibernateCallback;\r
 \r
-public class TreeTestResultCollectionDaoHibernateTest extends\r
-               AbstractSpringTestCase {\r
+public class TreeTestResultCollectionDaoHibernateTest extends HibernateTestCase {\r
 \r
        public void testScenario() {\r
                TreeTestResultDao ttrDao = getBean(TreeTestResultDao.class);\r
@@ -27,7 +31,7 @@ public class TreeTestResultCollectionDaoHibernateTest extends
                ttrc.getResults().add(ttr1);\r
                ttrcDao.update(ttrc);\r
 \r
-               TreeTestResult ttr2 = TreeTestResultTestUtils\r
+               final TreeTestResult ttr2 = TreeTestResultTestUtils\r
                                .createCompleteTreeTestResult();\r
                ttrDao.create(ttr2);\r
 \r
@@ -37,11 +41,20 @@ public class TreeTestResultCollectionDaoHibernateTest extends
                ttrc.getResults().remove(ttr1);\r
                ttrcDao.update(ttrc);\r
 \r
-               TreeTestResultCollection ttrcPersist = ttrcDao\r
+               final TreeTestResultCollection ttrcPersist = ttrcDao\r
                                .getTestResultCollection(ttrcName);\r
-               assertEquals(1, ttrcPersist.getResults().size());\r
-               UnitTestTreeUtil.assertTreeTestResult(ttr2, ttrcPersist.getResults()\r
-                               .iterator().next());\r
+\r
+               getHibernateTemplate().execute(new HibernateCallback() {\r
+\r
+                       public Object doInHibernate(Session session)\r
+                                       throws HibernateException, SQLException {\r
+                               session.refresh(ttrcPersist);\r
+                               assertEquals(1, ttrcPersist.getResults().size());\r
+                               UnitTestTreeUtil.assertTreeTestResult(ttr2, ttrcPersist\r
+                                               .getResults().iterator().next());\r
+                               return null;\r
+                       }\r
+               });\r
        }\r
 \r
        @Override\r
index 7896b01fa2b9ad71c2eb2721f8d69881b3261a9b..6bf0ba131a32f0b6f5061821e1aa5be065742641 100644 (file)
@@ -9,25 +9,20 @@ import org.argeo.slc.core.test.SimpleResultPart;
 import org.argeo.slc.core.test.TestStatus;\r
 import org.argeo.slc.core.test.tree.TreeTestResult;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
-import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.argeo.slc.hibernate.unit.HibernateTestCase;\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
+public class TreeTestResultDaoHibernateTest extends HibernateTestCase {\r
        private TreeTestResultDao testResultDao = null;\r
-       private HibernateTemplate template = null;\r
 \r
        @Override\r
        public void setUp() {\r
                testResultDao = getBean(TreeTestResultDao.class);\r
-               template = new HibernateTemplate(getBean(SessionFactory.class));\r
        }\r
 \r
        public void testCreate() {\r
@@ -66,7 +61,7 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
                elem.getTags().put("myTag", "myTagValue");\r
                registry.register(path, elem);\r
 \r
-               template.execute(new HibernateCallback() {\r
+               getHibernateTemplate().execute(new HibernateCallback() {\r
 \r
                        public Object doInHibernate(Session session)\r
                                        throws HibernateException, SQLException {\r
@@ -143,8 +138,8 @@ 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
+       public static void assertInHibernate(HibernateTemplate template,\r
+                       final TreeTestResult ttrExpected, final TreeTestResult ttrPersisted) {\r
                template.execute(new HibernateCallback() {\r
                        public Object doInHibernate(Session session) {\r
                                session.refresh(ttrPersisted);\r
@@ -157,4 +152,9 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase {
 \r
        }\r
 \r
+       public void assertInHibernate(final TreeTestResult ttrExpected,\r
+                       final TreeTestResult ttrPersisted) {\r
+               assertInHibernate(getHibernateTemplate(), ttrExpected, ttrPersisted);\r
+       }\r
+\r
 }\r