Search in sources :

Example 16 with ObjectContext

use of org.apache.cayenne.ObjectContext in project cayenne by apache.

the class NestedDataContextParentPeerEventsIT method testPeerObjectUpdatedSimpleProperty.

@Test
public void testPeerObjectUpdatedSimpleProperty() throws Exception {
    Master a = parentContext1.newObject(Master.class);
    a.setName("X");
    parentContext1.commitChanges();
    Master a1 = parentContext2.localObject(a);
    final ObjectContext child = runtime.newContext(parentContext1);
    final Master a2 = child.localObject(a);
    a1.setName("Y");
    assertEquals("X", a2.getName());
    parentContext2.commitChangesToParent();
    new ParallelTestContainer() {

        @Override
        protected void assertResult() throws Exception {
            assertEquals("Y", a2.getName());
            assertFalse("Peer data context became dirty on event processing", child.hasChanges());
        }
    }.runTest(2000);
}
Also used : Master(org.apache.cayenne.testdo.relationships_child_master.Master) ObjectContext(org.apache.cayenne.ObjectContext) ParallelTestContainer(org.apache.cayenne.test.parallel.ParallelTestContainer) Test(org.junit.Test)

Example 17 with ObjectContext

use of org.apache.cayenne.ObjectContext in project cayenne by apache.

the class NestedDataContextPeerEventsIT method testPeerObjectUpdatedToManyRelationship.

@Test
public void testPeerObjectUpdatedToManyRelationship() throws Exception {
    Artist a = context.newObject(Artist.class);
    a.setArtistName("X");
    Painting px = context.newObject(Painting.class);
    px.setToArtist(a);
    px.setPaintingTitle("PX");
    Painting py = context.newObject(Painting.class);
    py.setPaintingTitle("PY");
    context.commitChanges();
    // pause to let the context events propagate
    Thread.sleep(500);
    ObjectContext peer1 = runtime.newContext(context);
    Painting py1 = peer1.localObject(py);
    Artist a1 = peer1.localObject(a);
    final ObjectContext peer2 = runtime.newContext(context);
    final Painting py2 = peer2.localObject(py);
    final Artist a2 = peer2.localObject(a);
    a1.addToPaintingArray(py1);
    assertEquals(1, a2.getPaintingArray().size());
    assertFalse(a2.getPaintingArray().contains(py2));
    peer1.commitChangesToParent();
    // pause to let the context events propagate
    new ParallelTestContainer() {

        @Override
        protected void assertResult() throws Exception {
            assertEquals(2, a2.getPaintingArray().size());
            assertTrue(a2.getPaintingArray().contains(py2));
            assertFalse("Peer data context became dirty on event processing", peer2.hasChanges());
        }
    }.runTest(2000);
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) ObjectContext(org.apache.cayenne.ObjectContext) ParallelTestContainer(org.apache.cayenne.test.parallel.ParallelTestContainer) Painting(org.apache.cayenne.testdo.testmap.Painting) Test(org.junit.Test)

Example 18 with ObjectContext

use of org.apache.cayenne.ObjectContext in project cayenne by apache.

the class NestedDataContextPeerEventsIT method testPeerObjectUpdatedSimpleProperty.

@Test
public void testPeerObjectUpdatedSimpleProperty() throws Exception {
    Artist a = context.newObject(Artist.class);
    a.setArtistName("X");
    context.commitChanges();
    ObjectContext peer1 = runtime.newContext(context);
    Artist a1 = peer1.localObject(a);
    final ObjectContext peer2 = runtime.newContext(context);
    final Artist a2 = peer2.localObject(a);
    a1.setArtistName("Y");
    assertEquals("X", a2.getArtistName());
    peer1.commitChangesToParent();
    // pause to let the context events propagate
    new ParallelTestContainer() {

        @Override
        protected void assertResult() throws Exception {
            assertEquals("Y", a2.getArtistName());
            assertFalse("Peer data context became dirty on event processing", peer2.hasChanges());
        }
    }.runTest(2000);
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) ObjectContext(org.apache.cayenne.ObjectContext) ParallelTestContainer(org.apache.cayenne.test.parallel.ParallelTestContainer) Test(org.junit.Test)

Example 19 with ObjectContext

use of org.apache.cayenne.ObjectContext in project cayenne by apache.

the class NestedDataContextPeerEventsIT method testPeerObjectUpdatedTempOID.

@Test
public void testPeerObjectUpdatedTempOID() throws Exception {
    ObjectContext peer1 = runtime.newContext(context);
    final Artist a1 = peer1.newObject(Artist.class);
    a1.setArtistName("Y");
    ObjectId a1TempId = a1.getObjectId();
    assertTrue(a1TempId.isTemporary());
    ObjectContext peer2 = runtime.newContext(context);
    final Artist a2 = peer2.localObject(a1);
    assertEquals(a1TempId, a2.getObjectId());
    peer1.commitChanges();
    // pause to let the context events propagate
    new ParallelTestContainer() {

        @Override
        protected void assertResult() throws Exception {
            assertFalse(a1.getObjectId().isTemporary());
            assertFalse(a2.getObjectId().isTemporary());
            assertEquals(a2.getObjectId(), a1.getObjectId());
        }
    }.runTest(2000);
}
Also used : Artist(org.apache.cayenne.testdo.testmap.Artist) ObjectId(org.apache.cayenne.ObjectId) ObjectContext(org.apache.cayenne.ObjectContext) ParallelTestContainer(org.apache.cayenne.test.parallel.ParallelTestContainer) Test(org.junit.Test)

Example 20 with ObjectContext

use of org.apache.cayenne.ObjectContext in project cayenne by apache.

the class NestedDataContextReadIT method testCreateChildDataContext.

@Test
public void testCreateChildDataContext() {
    context.setValidatingObjectsOnCommit(true);
    ObjectContext child1 = runtime.newContext(context);
    assertNotNull(child1);
    assertSame(context, child1.getChannel());
    assertTrue(((DataContext) child1).isValidatingObjectsOnCommit());
    context.setValidatingObjectsOnCommit(false);
    ObjectContext child2 = runtime.newContext(context);
    assertNotNull(child2);
    assertSame(context, child2.getChannel());
    assertFalse(((DataContext) child2).isValidatingObjectsOnCommit());
    // second level of nesting
    ObjectContext child21 = runtime.newContext(child2);
    assertNotNull(child21);
    assertSame(child2, child21.getChannel());
    assertFalse(((DataContext) child2).isValidatingObjectsOnCommit());
}
Also used : ObjectContext(org.apache.cayenne.ObjectContext) Test(org.junit.Test)

Aggregations

ObjectContext (org.apache.cayenne.ObjectContext)108 Test (org.junit.Test)99 Artist (org.apache.cayenne.testdo.testmap.Artist)32 UnitTestClosure (org.apache.cayenne.unit.di.UnitTestClosure)14 SelectQuery (org.apache.cayenne.query.SelectQuery)13 Painting (org.apache.cayenne.testdo.testmap.Painting)13 ClientMtTable1 (org.apache.cayenne.testdo.mt.ClientMtTable1)12 ParallelTestContainer (org.apache.cayenne.test.parallel.ParallelTestContainer)10 GraphDiff (org.apache.cayenne.graph.GraphDiff)9 ObjectId (org.apache.cayenne.ObjectId)8 Table2 (org.apache.cayenne.crypto.db.Table2)7 HashMap (java.util.HashMap)6 Persistent (org.apache.cayenne.Persistent)6 QueryResponse (org.apache.cayenne.QueryResponse)6 ClientMtTable2 (org.apache.cayenne.testdo.mt.ClientMtTable2)6 Query (org.apache.cayenne.query.Query)5 CayenneContext (org.apache.cayenne.CayenneContext)4 DataChannel (org.apache.cayenne.DataChannel)4 ObjectContextFactory (org.apache.cayenne.configuration.ObjectContextFactory)4 EntityResolver (org.apache.cayenne.map.EntityResolver)4