From: Mathieu Baudier Date: Fri, 27 Jun 2008 13:47:42 +0000 (+0000) Subject: Introduce Hibernate lazy loading for SlcExecution and TestResultCollections X-Git-Tag: argeo-slc-2.1.7~2746 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=ad49e4ffc69a3c67dee95b9d333d9282ab2c5e82;p=gpl%2Fargeo-slc.git Introduce Hibernate lazy loading for SlcExecution and TestResultCollections git-svn-id: https://svn.argeo.org/slc/trunk@1296 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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 index 000000000..244474c42 --- /dev/null +++ b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/unit/HibernateTestCase.java @@ -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; + } + +} diff --git a/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/process/SlcExecution.hbm.xml b/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/process/SlcExecution.hbm.xml index bde8cc54d..0bd96fd23 100644 --- a/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/process/SlcExecution.hbm.xml +++ b/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/process/SlcExecution.hbm.xml @@ -1,4 +1,4 @@ - + @@ -10,20 +10,19 @@ - + - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResultCollection.hbm.xml b/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResultCollection.hbm.xml index 19fce6656..82d976052 100644 --- a/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResultCollection.hbm.xml +++ b/org.argeo.slc.hibernate/src/main/resources/org/argeo/slc/hibernate/test/tree/TreeTestResultCollection.hbm.xml @@ -1,16 +1,16 @@ - + - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java index 0de56e62c..2bbb092d5 100644 --- a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java +++ b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java @@ -1,14 +1,18 @@ package org.argeo.slc.hibernate.process; +import java.sql.SQLException; import java.util.List; import org.argeo.slc.core.process.SlcExecution; import org.argeo.slc.core.process.SlcExecutionStep; import org.argeo.slc.dao.process.SlcExecutionDao; -import org.argeo.slc.unit.AbstractSpringTestCase; +import org.argeo.slc.hibernate.unit.HibernateTestCase; import org.argeo.slc.unit.process.SlcExecutionTestUtils; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.springframework.orm.hibernate3.HibernateCallback; -public class SlcExecutionHibernateTest extends AbstractSpringTestCase { +public class SlcExecutionHibernateTest extends HibernateTestCase { public void testSave() { SlcExecutionDao dao = getBean(SlcExecutionDao.class); @@ -20,12 +24,7 @@ public class SlcExecutionHibernateTest extends AbstractSpringTestCase { dao.create(slcExec); SlcExecution slcExecPersisted = dao.getSlcExecution(slcExec.getUuid()); - SlcExecutionTestUtils.assertSlcExecution(slcExec, slcExecPersisted); - assertEquals(2, slcExecPersisted.getSteps().size()); - SlcExecutionTestUtils.assertSlcExecutionStep(slcExec.getSteps().get(0), - slcExecPersisted.getSteps().get(0)); - SlcExecutionTestUtils.assertSlcExecutionStep(slcExec.getSteps().get(1), - slcExecPersisted.getSteps().get(1)); + assertSlcExecution(slcExec, slcExecPersisted); } public void testModify() { @@ -39,31 +38,46 @@ public class SlcExecutionHibernateTest extends AbstractSpringTestCase { dao.create(slcExec); // slcExecution retrieval and update - SlcExecution slcExecRetrieved = dao.getSlcExecution(slcExec.getUuid()); - - List logLineListStep0 = slcExecRetrieved.getSteps().get(0) - .getLogLines(); - for (String logLine : logLineListStep0) - logLine = logLine + "appended Log text"; - - slcExecRetrieved.getSteps().get(0).setLogLines(logLineListStep0); - slcExecRetrieved.getSteps().add( - new SlcExecutionStep("LOG", "Three \n log \n lines")); + final SlcExecution slcExecRetrieved = dao.getSlcExecution(slcExec + .getUuid()); + + getHibernateTemplate().execute(new HibernateCallback() { + + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + session.refresh(slcExecRetrieved); + List logLineListStep0 = slcExecRetrieved.getSteps() + .get(0).getLogLines(); + for (String logLine : logLineListStep0) + logLine = logLine + "appended Log text"; + + slcExecRetrieved.getSteps().get(0) + .setLogLines(logLineListStep0); + slcExecRetrieved.getSteps().add( + new SlcExecutionStep("LOG", "Three \n log \n lines")); + return null; + } + }); dao.update(slcExecRetrieved); // updated slcExecution retrieval and comparison SlcExecution slcExecUpdated = dao.getSlcExecution(slcExec.getUuid()); - SlcExecutionTestUtils.assertSlcExecution(slcExecRetrieved, - slcExecUpdated); - assertEquals(3, slcExecUpdated.getSteps().size()); - SlcExecutionTestUtils.assertSlcExecutionStep(slcExecUpdated.getSteps() - .get(0), slcExecRetrieved.getSteps().get(0)); - SlcExecutionTestUtils.assertSlcExecutionStep(slcExecUpdated.getSteps() - .get(1), slcExecRetrieved.getSteps().get(1)); - SlcExecutionTestUtils.assertSlcExecutionStep(slcExecUpdated.getSteps() - .get(2), slcExecRetrieved.getSteps().get(2)); + assertSlcExecution(slcExecRetrieved, slcExecUpdated); + } + + public void assertSlcExecution(final SlcExecution expected, + final SlcExecution persisted) { + getHibernateTemplate().execute(new HibernateCallback() { + + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + session.refresh(persisted); + SlcExecutionTestUtils.assertSlcExecution(expected, persisted); + return null; + } + }); } @Override diff --git a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/CastorTestResultDaoHibernateTest.java b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/CastorTestResultDaoHibernateTest.java index c57fcb52c..8880f455c 100644 --- a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/CastorTestResultDaoHibernateTest.java +++ b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/CastorTestResultDaoHibernateTest.java @@ -3,15 +3,14 @@ package org.argeo.slc.hibernate.test.tree; import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.dao.test.tree.TreeTestResultDao; -import org.argeo.slc.unit.AbstractSpringTestCase; +import org.argeo.slc.hibernate.unit.HibernateTestCase; import org.argeo.slc.unit.test.tree.TreeTestResultTestUtils; -import org.argeo.slc.unit.test.tree.UnitTestTreeUtil; import org.springframework.oxm.Marshaller; import org.springframework.oxm.Unmarshaller; import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringSource; -public class CastorTestResultDaoHibernateTest extends AbstractSpringTestCase { +public class CastorTestResultDaoHibernateTest extends HibernateTestCase { public void testUnmarshallAndCreate() throws Exception { TreeTestResult ttr = TreeTestResultTestUtils @@ -32,7 +31,8 @@ public class CastorTestResultDaoHibernateTest extends AbstractSpringTestCase { ttrDao.create(ttrUnm); TreeTestResult ttrPersist = ttrDao.getTestResult(ttr.getUuid()); - UnitTestTreeUtil.assertTreeTestResult(ttr, ttrPersist); + TreeTestResultDaoHibernateTest.assertInHibernate( + getHibernateTemplate(), ttr, ttrPersist); } @Override diff --git a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernateTest.java b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernateTest.java index 344adbdb0..34430c966 100644 --- a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernateTest.java +++ b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernateTest.java @@ -1,15 +1,19 @@ package org.argeo.slc.hibernate.test.tree; +import java.sql.SQLException; + import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.core.test.tree.TreeTestResultCollection; import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao; import org.argeo.slc.dao.test.tree.TreeTestResultDao; -import org.argeo.slc.unit.AbstractSpringTestCase; +import org.argeo.slc.hibernate.unit.HibernateTestCase; import org.argeo.slc.unit.test.tree.TreeTestResultTestUtils; import org.argeo.slc.unit.test.tree.UnitTestTreeUtil; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.springframework.orm.hibernate3.HibernateCallback; -public class TreeTestResultCollectionDaoHibernateTest extends - AbstractSpringTestCase { +public class TreeTestResultCollectionDaoHibernateTest extends HibernateTestCase { public void testScenario() { TreeTestResultDao ttrDao = getBean(TreeTestResultDao.class); @@ -27,7 +31,7 @@ public class TreeTestResultCollectionDaoHibernateTest extends ttrc.getResults().add(ttr1); ttrcDao.update(ttrc); - TreeTestResult ttr2 = TreeTestResultTestUtils + final TreeTestResult ttr2 = TreeTestResultTestUtils .createCompleteTreeTestResult(); ttrDao.create(ttr2); @@ -37,11 +41,20 @@ public class TreeTestResultCollectionDaoHibernateTest extends ttrc.getResults().remove(ttr1); ttrcDao.update(ttrc); - TreeTestResultCollection ttrcPersist = ttrcDao + final TreeTestResultCollection ttrcPersist = ttrcDao .getTestResultCollection(ttrcName); - assertEquals(1, ttrcPersist.getResults().size()); - UnitTestTreeUtil.assertTreeTestResult(ttr2, ttrcPersist.getResults() - .iterator().next()); + + getHibernateTemplate().execute(new HibernateCallback() { + + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + session.refresh(ttrcPersist); + assertEquals(1, ttrcPersist.getResults().size()); + UnitTestTreeUtil.assertTreeTestResult(ttr2, ttrcPersist + .getResults().iterator().next()); + return null; + } + }); } @Override diff --git a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java index 7896b01fa..6bf0ba131 100644 --- a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java +++ b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernateTest.java @@ -9,25 +9,20 @@ import org.argeo.slc.core.test.SimpleResultPart; import org.argeo.slc.core.test.TestStatus; import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.dao.test.tree.TreeTestResultDao; -import org.argeo.slc.unit.AbstractSpringTestCase; +import org.argeo.slc.hibernate.unit.HibernateTestCase; import org.argeo.slc.unit.test.tree.TreeTestResultTestUtils; import org.argeo.slc.unit.test.tree.UnitTestTreeUtil; import org.hibernate.HibernateException; -import org.hibernate.LockMode; import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.Transaction; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.HibernateTemplate; -public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase { +public class TreeTestResultDaoHibernateTest extends HibernateTestCase { private TreeTestResultDao testResultDao = null; - private HibernateTemplate template = null; @Override public void setUp() { testResultDao = getBean(TreeTestResultDao.class); - template = new HibernateTemplate(getBean(SessionFactory.class)); } public void testCreate() { @@ -66,7 +61,7 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase { elem.getTags().put("myTag", "myTagValue"); registry.register(path, elem); - template.execute(new HibernateCallback() { + getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { @@ -143,8 +138,8 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase { return "org/argeo/slc/hibernate/applicationContext.xml"; } - public void assertInHibernate(final TreeTestResult ttrExpected, - final TreeTestResult ttrPersisted) { + public static void assertInHibernate(HibernateTemplate template, + final TreeTestResult ttrExpected, final TreeTestResult ttrPersisted) { template.execute(new HibernateCallback() { public Object doInHibernate(Session session) { session.refresh(ttrPersisted); @@ -157,4 +152,9 @@ public class TreeTestResultDaoHibernateTest extends AbstractSpringTestCase { } + public void assertInHibernate(final TreeTestResult ttrExpected, + final TreeTestResult ttrPersisted) { + assertInHibernate(getHibernateTemplate(), ttrExpected, ttrPersisted); + } + }