Re: Cayenne and Adobe Flex Data Services

From: Malcolm Edgar (malcolm.edga..mail.com)
Date: Thu Aug 10 2006 - 01:56:54 EDT

  • Next message: Andrus Adamchik: "Re: Web application with no access to database"

    Please ignore the last post.

    I found my problem which was the creation of another Cayenne data
    object which was being committed, and causing the validation errors.

    regards Malcolm Edgar

    On 8/10/06, Malcolm Edgar <malcolm.edga..mail.com> wrote:
    > Hi All,
    >
    > I am trying to intregrate Cayenne with Adobe Flex Data Services. I am
    > finding a nasty compatability problem between the 2 framework designs.
    >
    > Adobe uses a POJO assembler pattern when it is sent a serialize
    > ActionScript object graph which it then turns into a Java object
    > graph. When working with Cayenne objects there are problems when it is
    > assembling objects.
    >
    > I presume it creates the data objects using reflection
    > class.newInstance() and then it sets properties on these object, which
    > may be other Cayenne objects. Unfortunately as it has not followed
    > the usage Cayenne pattern of :
    >
    > DataContext.createAndRegisterNewObject(Class)
    >
    > These objects have not DataContext and are unable to resolve their
    > relationships and throw NPE.
    >
    > I have tried hacking a work around:
    >
    > public class BaseEntity extends CayenneDataObject {
    >
    > private static final long serialVersionUID = 1L;
    >
    > public BaseEntity() {
    > super();
    >
    > DataContext dataContext = null;
    > try {
    > dataContext = DataContext.getThreadDataContext();
    >
    > } catch (IllegalStateException ise) {
    > dataContext = DataContext.createDataContext();
    > DataContext.bindThreadDataContext(dataContext);
    > }
    >
    > dataContext.registerNewObject(this);
    > }
    > }
    >
    > This works with the Adobe Data Services code, but it stuffs up the
    > Cayenne object validation when committing object for some reason.
    >
    > org.objectstyle.cayenne.validation.ValidationException: [v.1.2 July 16
    > 2006] Validation has failed.
    > Validation failure for com.avoka.eeo.entity.Submission.user: "user"
    > is required.
    > Validation failure for com.avoka.eeo.entity.Submission.type: "type"
    > is required.
    > Validation failure for com.avoka.eeo.entity.Submission.status:
    > "status" is required.
    > at org.objectstyle.cayenne.access.ObjectStoreGraphDiff.validateAndCheckNoop(ObjectStoreGraphDiff.java:132)
    > at org.objectstyle.cayenne.access.DataContext.flushToParent(DataContext.java:1244)
    > at org.objectstyle.cayenne.access.DataContext.commitChanges(DataContext.java:1165)
    > at com.avoka.eeo.assembler.SubmissionAssemblerTestCase.testFillUsername(SubmissionAssemblerTestCase.java:22)
    > at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown
    > Source)
    > at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown
    > Source)
    > at junit.framework.TestCase.runTest(TestCase.java:154)
    > at junit.framework.TestCase.runBare(TestCase.java:127)
    > at junit.framework.TestResult$1.protect(TestResult.java:106)
    > at junit.framework.TestResult.runProtected(TestResult.java:124)
    > at junit.framework.TestResult.run(TestResult.java:109)
    > at junit.framework.TestCase.run(TestCase.java:118)
    > at junit.framework.TestSuite.runTest(TestSuite.java:208)
    > at junit.framework.TestSuite.run(TestSuite.java:203)
    > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
    > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
    > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    >
    >
    >
    > Any suggestions would be greatly appreciated.
    >
    > regards Malcolm Edgar
    >



    This archive was generated by hypermail 2.0.0 : Thu Aug 10 2006 - 01:57:18 EDT