public static void main(String[] args) { ServerRuntime cayenneRuntime = new ServerRuntime("cayenne-CESDomain.xml", new CayenneExtrasModule()); // ServerRuntime cayenneRuntime = new ServerRuntime("cayenne-CESDomain.xml"); ObjectContext context = cayenneRuntime.getContext(); LineItem li = context.newObject(LineItem.class); Item i = context.newObject(Item.class); CostElement ce1 = context.newObject(CostElement.class); CostElement ce2 = context.newObject(CostElement.class); CostElement ce3 = context.newObject(CostElement.class); BudgetYear by1 = context.newObject(BudgetYear.class); BudgetYear by2 = context.newObject(BudgetYear.class); BudgetYear by3 = context.newObject(BudgetYear.class); li.addToItems(i); i.addToCostElements(ce1); ce1.addToCostElements(ce2); ce2.addToCostElements(ce3); ce3.setQuantity(by1); ce3.setTotalCost(by2); ce3.setUnitCost(by3); by1.setLineItem(li); by2.setLineItem(li); by3.setLineItem(li); // ce2.setItem(i); // ce3.setItem(i); context.commitChanges(); context.deleteObject(li); context.commitChanges(); }
public final void validate(T object) { ObjectContext workDc = object.getObjectContext(); // .createChildDataContext(); T obj = (T) workDc.localObject(object.getObjectId(), object); Set<DataObject> toDelete = new HashSet<DataObject>(); try { if (!fakes.isEmpty()) { // Simulation des fakes for (String prop : fakes.keySet()) { if (obj.readProperty(prop) != null) continue; DataObject value = (DataObject) workDc.newObject(fakes.get(prop)); obj.setToOneTarget(prop, value, false); toDelete.add(value); } } // Validation validateImpl(obj); } finally { // Annulation des modifs if (!fakes.isEmpty()) { // Suppression des fakes for (String prop : fakes.keySet()) { DataObject value = (DataObject) obj.readProperty(prop); if (!toDelete.contains(value)) continue; workDc.deleteObject(value); } } } // childDc.rollbackChangesLocally(); }
public void testSerializeNestedChannel() throws Exception { ObjectContext child = runtime.newContext(context); ObjectContext deserializedContext = Util.cloneViaSerialization(child); assertNotNull(deserializedContext.getChannel()); assertNotNull(deserializedContext.getEntityResolver()); }
@Test public void testCommitLog() throws SQLException { Auditable2 a1 = context.newObject(Auditable2.class); a1.setCharProperty1("yy"); a1.setCharProperty2("zz"); Auditable2 a2 = context.newObject(Auditable2.class); a2.setCharProperty1("yy"); a2.setCharProperty2("zz"); context.commitChanges(); List<Object[]> logs = auditLog.selectAll(); assertEquals(2, logs.size()); }
public void test() { SelectQuery query = new SelectQuery(Artist.class); query.setStatementFetchSize(10); assertEquals(10, query.getMetaData(context.getEntityResolver()).getStatementFetchSize()); context.performQuery(query); SQLTemplate template = new SQLTemplate(Artist.class, "SELECT ARTIST_ID FROM ARTIST"); template.setStatementFetchSize(10); assertEquals(10, template.getMetaData(context.getEntityResolver()).getStatementFetchSize()); context.performQuery(template); EJBQLQuery ejbql = new EJBQLQuery("select a from Artist a"); ejbql.setStatementFetchSize(10); assertEquals(10, ejbql.getMetaData(context.getEntityResolver()).getStatementFetchSize()); context.performQuery(ejbql); ObjectId id = new ObjectId("Artist", Artist.ARTIST_ID_PK_COLUMN, 1); RelationshipQuery relationshipQuery = new RelationshipQuery(id, Artist.PAINTING_ARRAY_PROPERTY, true); relationshipQuery.setStatementFetchSize(10); assertEquals( 10, relationshipQuery.getMetaData(context.getEntityResolver()).getStatementFetchSize()); context.performQuery(relationshipQuery); }
@Test public void testEncoder_FilterNoMatch() throws IOException { filters.add( new EncoderFilter() { @Override public boolean matches(ClientEntity<?> clientEntity) { return false; } @Override public boolean encode( String propertyName, Object object, JsonGenerator out, Encoder delegate) throws IOException { fail("Non matching filter was not supposed to be invoked"); return false; } @Override public boolean willEncode(String propertyName, Object object, Encoder delegate) { fail("Non matching filter was not supposed to be invoked"); return false; } }); ClientEntity<E2> descriptor = getClientEntity(E2.class); descriptor.setIdIncluded(true); DataResponse<E2> builder = DataResponse.forType(E2.class).withClientEntity(descriptor); encoderService.makeEncoder(builder); ObjectContext context = cayenneService.newContext(); E2 e21 = new E2(); e21.setObjectId(new ObjectId("E2", E2.ID_PK_COLUMN, 7)); e21.setName("XYZ"); e21.setAddress("bla bla street"); context.registerNewObject(e21); builder.getEncoder().encode(null, Collections.singletonList(e21), mock(JsonGenerator.class)); }
@Test public void testGetRootEncoder_ExcludedRelationshipAttributes() throws IOException { ClientEntity<E3> e3Descriptor = getClientEntity(E3.class); e3Descriptor.setIdIncluded(true); e3Descriptor.getAttributes().add(E3.NAME.getName()); ClientEntity<E2> descriptor = getClientEntity(E2.class); descriptor.setIdIncluded(true); descriptor.getRelationships().put(E2.E3S.getName(), e3Descriptor); ObjectContext context = cayenneService.newContext(); E2 e2 = new E2(); e2.setObjectId(new ObjectId("E2", E2.ID_PK_COLUMN, 7)); e2.setName("XYZ"); e2.setAddress("bla bla street"); context.registerNewObject(e2); E3 e31 = new E3(); e31.setObjectId(new ObjectId("E3", E3.ID_PK_COLUMN, 5)); e31.setName("31"); e31.setPhoneNumber("+12345678"); context.registerNewObject(e31); e2.addToE3s(e31); E3 e32 = new E3(); e32.setObjectId(new ObjectId("E3", E3.ID_PK_COLUMN, 6)); e32.setName("32"); e31.setPhoneNumber("+87654321"); context.registerNewObject(e32); e2.addToE3s(e32); DataResponse<E2> builder = DataResponse.forType(E2.class) .withClientEntity(descriptor) .withObjects(Collections.singletonList(e2)); encoderService.makeEncoder(builder); assertEquals( "[{\"id\":7,\"e3s\":[{\"id\":5,\"name\":\"31\"},{\"id\":6,\"name\":\"32\"}]}]", toJson(builder)); }
public void testOrderByPath() throws Exception { createTwoArtistsTwoPaintings(); String ejbql1 = "SELECT p FROM Painting p ORDER BY p.toArtist.artistName ASC"; EJBQLQuery query1 = new EJBQLQuery(ejbql1); List<?> results1 = context.performQuery(query1); assertEquals(2, results1.size()); assertEquals(33005, Cayenne.intPKForObject((Persistent) results1.get(0))); assertEquals(33006, Cayenne.intPKForObject((Persistent) results1.get(1))); String ejbql2 = "SELECT p FROM Painting p ORDER BY p.toArtist.artistName DESC"; EJBQLQuery query2 = new EJBQLQuery(ejbql2); List<?> results2 = context.performQuery(query2); assertEquals(2, results2.size()); assertEquals(33006, Cayenne.intPKForObject((Persistent) results2.get(0))); assertEquals(33005, Cayenne.intPKForObject((Persistent) results2.get(1))); }
public void testOrderByMultiple() throws Exception { createFourPaintings(); String ejbql1 = "SELECT p FROM Painting p ORDER BY p.paintingTitle DESC, p.estimatedPrice DESC"; EJBQLQuery query1 = new EJBQLQuery(ejbql1); List<?> results1 = context.performQuery(query1); assertEquals(4, results1.size()); assertEquals(33003, Cayenne.intPKForObject((Persistent) results1.get(0))); assertEquals(33004, Cayenne.intPKForObject((Persistent) results1.get(1))); assertEquals(33002, Cayenne.intPKForObject((Persistent) results1.get(2))); assertEquals(33001, Cayenne.intPKForObject((Persistent) results1.get(3))); }
public void testOrderByQualified() throws Exception { createThreePaintings(); String ejbql1 = "SELECT p FROM Painting p WHERE p.estimatedPrice > 1000 ORDER BY p.paintingTitle ASC"; EJBQLQuery query1 = new EJBQLQuery(ejbql1); List<?> results1 = context.performQuery(query1); assertEquals(2, results1.size()); assertEquals(33001, Cayenne.intPKForObject((Persistent) results1.get(0))); assertEquals(33002, Cayenne.intPKForObject((Persistent) results1.get(1))); String ejbql2 = "SELECT p FROM Painting p WHERE p.estimatedPrice > 1000 ORDER BY p.estimatedPrice ASC"; EJBQLQuery query2 = new EJBQLQuery(ejbql2); List<?> results2 = context.performQuery(query2); assertEquals(2, results2.size()); assertEquals(33002, Cayenne.intPKForObject((Persistent) results2.get(0))); assertEquals(33001, Cayenne.intPKForObject((Persistent) results2.get(1))); }
@Test public void testOrdering() throws Exception { creatArtistsDataSet(); SelectQuery query = new SelectQuery("Artist"); query.addOrdering(Artist.ARTIST_NAME_PROPERTY, SortOrder.ASCENDING); query.setFetchLimit(4); List<?> results = context.performQuery(query); assertEquals(4, results.size()); assertEquals("a", ((Artist) results.get(0)).getArtistName()); assertEquals("b", ((Artist) results.get(1)).getArtistName()); assertEquals("c", ((Artist) results.get(2)).getArtistName()); assertEquals("d", ((Artist) results.get(3)).getArtistName()); }
@Test public void testLocalCache() throws Exception { createTwoArtists(); final Artist[] a3 = new Artist[1]; assertEquals( 1, interceptor.runWithQueryCounter( new UnitTestClosure() { @Override public void execute() { a3[0] = SelectById.query(Artist.class, 3).useLocalCache("g1").selectOne(context); assertNotNull(a3[0]); assertEquals("artist3", a3[0].getArtistName()); } })); interceptor.runWithQueriesBlocked( new UnitTestClosure() { @Override public void execute() { Artist a3cached = SelectById.query(Artist.class, 3).useLocalCache("g1").selectOne(context); assertSame(a3[0], a3cached); } }); context.performGenericQuery(new RefreshQuery("g1")); assertEquals( 1, interceptor.runWithQueryCounter( new UnitTestClosure() { @Override public void execute() { SelectById.query(Artist.class, 3).useLocalCache("g1").selectOne(context); } })); }
GraphDiff onSyncNoFilters( final ObjectContext originatingContext, final GraphDiff changes, int syncType) { DataChannelSyncCallbackAction callbackAction = DataChannelSyncCallbackAction.getCallbackAction( getEntityResolver().getCallbackRegistry(), originatingContext.getGraphManager(), changes, syncType); callbackAction.applyPreCommit(); GraphDiff result; switch (syncType) { case DataChannel.ROLLBACK_CASCADE_SYNC: result = onSyncRollback(originatingContext); break; // "cascade" and "no_cascade" are the same from the DataDomain // perspective, // including transaction handling logic case DataChannel.FLUSH_NOCASCADE_SYNC: case DataChannel.FLUSH_CASCADE_SYNC: result = (GraphDiff) runInTransaction( new Transformer() { public Object transform(Object input) { return onSyncFlush(originatingContext, changes); } }); break; default: throw new CayenneRuntimeException("Invalid synchronization type: " + syncType); } callbackAction.applyPostCommit(); return result; }
@Test public void testEncoder_FilteredToOne() throws IOException { filters.add( new EncoderFilter() { @Override public boolean matches(ClientEntity<?> clientEntity) { return true; } @Override public boolean encode( String propertyName, Object object, JsonGenerator out, Encoder delegate) throws IOException { if (object instanceof E2) { E2 e2 = (E2) object; if (Cayenne.intPKForObject(e2) == 7) { return delegate.encode(propertyName, object, out); } else { return false; } } else { delegate.encode(propertyName, object, out); return true; } } @Override public boolean willEncode(String propertyName, Object object, Encoder delegate) { if (object instanceof E2) { E2 e2 = (E2) object; if (Cayenne.intPKForObject(e2) == 7) { return delegate.willEncode(propertyName, object); } else { return false; } } else { return delegate.willEncode(propertyName, object); } } }); ClientEntity<E2> e2Descriptor = getClientEntity(E2.class); e2Descriptor.setIdIncluded(true); ClientEntity<E3> e3Descriptor = getClientEntity(E3.class); e3Descriptor.setIdIncluded(true); e3Descriptor.getRelationships().put(E3.E2.getName(), e2Descriptor); ObjectContext context = cayenneService.newContext(); E2 e21 = new E2(); e21.setObjectId(new ObjectId("E2", E2.ID_PK_COLUMN, 7)); context.registerNewObject(e21); E3 e31 = new E3(); e31.setObjectId(new ObjectId("E3", E3.ID_PK_COLUMN, 5)); context.registerNewObject(e31); e31.setE2(e21); DataResponse<E3> builder = DataResponse.forType(E3.class).withClientEntity(e3Descriptor).withObject(e31); encoderService.makeEncoder(builder); assertEquals("[{\"id\":5,\"e2\":{\"id\":7},\"e2_id\":7}]", toJson(builder)); E2 e22 = new E2(); e22.setObjectId(new ObjectId("E2", E2.ID_PK_COLUMN, 8)); context.registerNewObject(e22); E3 e32 = new E3(); e32.setObjectId(new ObjectId("E3", E3.ID_PK_COLUMN, 6)); context.registerNewObject(e32); e32.setE2(e22); builder.withObject(e32); assertEquals("[{\"id\":6}]", toJson(builder)); }
@Test public void testEncoder_FilteredRoots() throws IOException { filters.add( new EncoderFilter() { @Override public boolean matches(ClientEntity<?> clientEntity) { return true; } @Override public boolean encode( String propertyName, Object object, JsonGenerator out, Encoder delegate) throws IOException { E2 e2 = (E2) object; if (Cayenne.intPKForObject(e2) == 7) { delegate.encode(propertyName, object, out); return true; } return false; } @Override public boolean willEncode(String propertyName, Object object, Encoder delegate) { E2 e2 = (E2) object; if (Cayenne.intPKForObject(e2) == 7) { delegate.willEncode(propertyName, object); return true; } return false; } }); ClientEntity<E2> descriptor = getClientEntity(E2.class); descriptor.setIdIncluded(true); ObjectContext context = cayenneService.newContext(); E2 e21 = new E2(); e21.setObjectId(new ObjectId("E2", E2.ID_PK_COLUMN, 7)); e21.setName("XYZ"); e21.setAddress("bla bla street"); context.registerNewObject(e21); DataResponse<E2> builder = DataResponse.forType(E2.class).withClientEntity(descriptor).withObject(e21); encoderService.makeEncoder(builder); assertEquals("[{\"id\":7}]", toJson(builder)); E2 e22 = new E2(); e22.setObjectId(new ObjectId("E2", E2.ID_PK_COLUMN, 8)); e22.setName("XYZ"); e22.setAddress("bla bla street"); context.registerNewObject(e22); builder.withObject(e22); encoderService.makeEncoder(builder); assertEquals("[]", toJson(builder)); }
/** * Create a new {@link EntryType} instance using the specified {@link ObjectContext}. * * @param context * @return Instance of EntryType attached to a valid {@link ObjectContext} */ private EntryType create(ObjectContext context) { EntryType entryType = context.newObject(EntryType.class); return entryType; }