cayenne-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: optimistic locking exception due to locking on not "Used For Locking" null to-one relationship
Date Thu, 19 Sep 2013 16:50:59 GMT
I guess <pluginExecutions> section may require more tweaking to match 3.0 pom state.
Could you commit what you did, I will try it in a day or two.

Andrus

On Sep 19, 2013, at 7:11 PM, Mike Kienenberger <mkienenb@gmail.com> wrote:

> It got rid of a couple of errors when I copied this change from trunk
> to 3.0, and then deleted/re-imported the maven project.
> 
> But I still have these 7 maven errors remaining (and many java errors
> on the optional projects):
> 
> 
> Description    Resource    Path    Location    Type
> Plugin execution not covered by lifecycle configuration:
> org.objectstyle.woproject.maven2:maven-japplication-plugin:2.0.17:japplication
> (execution: default, phase: generate-resources)    pom.xml
> /cayenne-modeler-mac    line 89    Maven Project Build Lifecycle
> Mapping Problem
> Plugin execution not covered by lifecycle configuration:
> org.codehaus.mojo:javacc-maven-plugin:2.5:jjtree (execution:
> jjtree-ejbql, phase: generate-sources)    pom.xml
> /cayenne-jdk1.5-unpublished    line 156    Maven Project Build
> Lifecycle Mapping Problem
> Plugin execution not covered by lifecycle configuration:
> org.objectstyle.woproject.maven2:maven-japplication-plugin:2.0.17:japplication
> (execution: default, phase: generate-resources)    pom.xml
> /cayenne-modeler-java    line 77    Maven Project Build Lifecycle
> Mapping Problem
> Plugin execution not covered by lifecycle configuration:
> org.codehaus.mojo:javacc-maven-plugin:2.5:javacc (execution:
> javacc-ejbql, phase: generate-sources)    pom.xml
> /cayenne-jdk1.5-unpublished    line 172    Maven Project Build
> Lifecycle Mapping Problem
> Plugin execution not covered by lifecycle configuration:
> org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:javadoc
> (execution: javadoc, phase: generate-resources)    pom.xml
> /cayenne-doc    line 210    Maven Project Build Lifecycle Mapping
> Problem
> Plugin execution not covered by lifecycle configuration:
> org.codehaus.mojo:dependency-maven-plugin:1.0:unpack (execution:
> unpack-sources, phase: generate-sources)    pom.xml    /cayenne-doc
> line 179    Maven Project Build Lifecycle Mapping Problem
> Plugin execution not covered by lifecycle configuration:
> org.apache.maven.plugins:maven-remote-resources-plugin:1.4:bundle
> (execution: default, phase: generate-resources)    pom.xml
> /cayenne-legal-unpublished    line 65    Maven Project Build Lifecycle
> Mapping Problem
> 
> 
> 
> On Thu, Sep 19, 2013 at 11:19 AM, Andrus Adamchik
> <andrus@objectstyle.org> wrote:
>> Aha, just found what you need. Check the root pom.xml on trunk. Locate this section:
>> 
>> <pluginManagement>
>>        <plugins>
>>        <!-- M2Eclipse configuration. Has no effect for command line builds -->
>>        <plugin>
>>                <groupId>org.eclipse.m2e</groupId>
>>                <artifactId>lifecycle-mapping</artifactId>
>>                <version>1.0.0</version>
>>                <configuration>
>>                <lifecycleMappingMetadata>
>>                …
>>        </plugin>
>> 
>> You will need to drop <plugin>…</plugin> part for lifecycle-mapping
plugin into 3.0 root pom. Let me know if you have any trouble with this. I'll do it myself.
>> 
>> Andrus
>> 
>> 
>> 
>> 
>> On Sep 19, 2013, at 5:46 PM, Andrus Adamchik <andrus@objectstyle.org> wrote:
>> 
>>> You can exclude cayenne-legal-unpublished.
>>> 
>>>> Release Build id: 20120614-1722
>>> 
>>> I happen to have the same version of Eclipse. What's the m2eclipse (Maven plugin)
version? Mine is 1.1.0.20120530-0009. And IIRC it allows you to ignore all these errors explicitly
on import.
>>> 
>>> Andrus
>>> 
>>> 
>>> 
>>> On Sep 18, 2013, at 8:27 PM, Mike Kienenberger <mkienenb@gmail.com> wrote:
>>> 
>>>> After closing the modeler, doc, and tutorial projects, I am left with
>>>> these unresolved errors:
>>>> 
>>>> Description    Resource    Path    Location    Type
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.apache.cayenne.build-tools:maven-cayenne-build-plugin:3.2M1:date
>>>> (execution: date, phase: initialize)    pom.xml
>>>> /cayenne-jdk1.6-unpublished    line 78    Maven Project Build
>>>> Lifecycle Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.apache.maven.plugins:maven-remote-resources-plugin:1.4:bundle
>>>> (execution: default, phase: generate-resources)    pom.xml
>>>> /cayenne-legal-unpublished    line 65    Maven Project Build Lifecycle
>>>> Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.apache.cayenne.build-tools:maven-cayenne-build-plugin:3.2M1:date
>>>> (execution: date, phase: initialize)    pom.xml
>>>> /cayenne-legal-unpublished    line 53    Maven Project Build Lifecycle
>>>> Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.objectstyle.woproject.maven2:maven-japplication-plugin:2.0.17:japplication
>>>> (execution: default, phase: generate-resources)    pom.xml
>>>> /cayenne-modeler-java    line 77    Maven Project Build Lifecycle
>>>> Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.apache.maven.plugins:maven-antrun-plugin:1.3:run (execution:
>>>> default, phase: process-sources)    pom.xml
>>>> /cayenne-jdk1.5-unpublished    line 214    Maven Project Build
>>>> Lifecycle Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.codehaus.mojo:javacc-maven-plugin:2.5:javacc (execution:
>>>> javacc-ejbql, phase: generate-sources)    pom.xml
>>>> /cayenne-jdk1.5-unpublished    line 172    Maven Project Build
>>>> Lifecycle Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.codehaus.mojo:javacc-maven-plugin:2.5:jjtree (execution:
>>>> jjtree-ejbql, phase: generate-sources)    pom.xml
>>>> /cayenne-jdk1.5-unpublished    line 156    Maven Project Build
>>>> Lifecycle Mapping Problem
>>>> Plugin execution not covered by lifecycle configuration:
>>>> org.apache.cayenne.build-tools:maven-cayenne-build-plugin:3.2M1:date
>>>> (execution: date, phase: initialize)    pom.xml
>>>> /cayenne-jdk1.5-unpublished    line 263    Maven Project Build
>>>> Lifecycle Mapping Problem
>>>> 
>>>> 
>>>> 
>>>> On Wed, Sep 18, 2013 at 1:25 PM, Mike Kienenberger <mkienenb@gmail.com>
wrote:
>>>>> All 2100+ tests for my own project now pass under my modified 3.0.2.
>>>>> 
>>>>> However, I'm having problems getting a STABLE-3.0 development
>>>>> environment set up under Eclipse so that I can investigate the failing
>>>>> cayenne tests.
>>>>> 
>>>>> I tried following the directions under
>>>>> http://cayenne.apache.org/dev/eclipse.html using Eclipse Version: Juno
>>>>> Release Build id: 20120614-1722 but after the process created 37
>>>>> projects in the workspace, I'm still left with 243 java compile errors
>>>>> and 13 maven problems.
>>>>> 
>>>>> The java errors seem like tutorial or modeler errors which I can
>>>>> probably ignore. (like no com.apple imports).
>>>>> 
>>>>> I'm not sure what to make of the maven errors as some of these are in
>>>>> primary modules.
>>>>> 
>>>>> Description    Resource    Path    Location    Type
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.apache.cayenne.build-tools:maven-cayenne-build-plugin:3.2M1:date
>>>>> (execution: date, phase: initialize)    pom.xml
>>>>> /cayenne-jdk1.6-unpublished    line 78    Maven Project Build
>>>>> Lifecycle Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.apache.maven.plugins:maven-remote-resources-plugin:1.4:bundle
>>>>> (execution: default, phase: generate-resources)    pom.xml
>>>>> /cayenne-legal-unpublished    line 65    Maven Project Build Lifecycle
>>>>> Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.apache.cayenne.build-tools:maven-cayenne-build-plugin:3.2M1:date
>>>>> (execution: date, phase: initialize)    pom.xml
>>>>> /cayenne-legal-unpublished    line 53    Maven Project Build Lifecycle
>>>>> Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.objectstyle.woproject.maven2:maven-japplication-plugin:2.0.17:japplication
>>>>> (execution: default, phase: generate-resources)    pom.xml
>>>>> /cayenne-modeler-java    line 77    Maven Project Build Lifecycle
>>>>> Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.apache.maven.plugins:maven-antrun-plugin:1.3:run (execution:
>>>>> default, phase: process-sources)    pom.xml
>>>>> /cayenne-jdk1.5-unpublished    line 214    Maven Project Build
>>>>> Lifecycle Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.codehaus.mojo:javacc-maven-plugin:2.5:javacc (execution:
>>>>> javacc-ejbql, phase: generate-sources)    pom.xml
>>>>> /cayenne-jdk1.5-unpublished    line 172    Maven Project Build
>>>>> Lifecycle Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.codehaus.mojo:javacc-maven-plugin:2.5:jjtree (execution:
>>>>> jjtree-ejbql, phase: generate-sources)    pom.xml
>>>>> /cayenne-jdk1.5-unpublished    line 156    Maven Project Build
>>>>> Lifecycle Mapping Problem
>>>>> Plugin execution not covered by lifecycle configuration:
>>>>> org.apache.cayenne.build-tools:maven-cayenne-build-plugin:3.2M1:date
>>>>> (execution: date, phase: initialize)    pom.xml
>>>>> /cayenne-jdk1.5-unpublished    line 263    Maven Project Build
>>>>> Lifecycle Mapping Problem
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Sun, Sep 15, 2013 at 3:59 AM, Andrus Adamchik <andrus@objectstyle.org>
wrote:
>>>>>> Hi Mike,
>>>>>> 
>>>>>> So looks like you are on top of it… Let me know if you need any
help.
>>>>>> 
>>>>>> Andrus
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Sep 14, 2013, at 8:22 AM, Mike Kienenberger <mkienenb@gmail.com>
wrote:
>>>>>>> I remembered to update the subject this time.
>>>>>>> 
>>>>>>> So if I replace
>>>>>>> 
>>>>>>>                   arcSnapshot.put(property.getName(), target);
>>>>>>> 
>>>>>>> with
>>>>>>> 
>>>>>>>                   if (property.getRelationship().isUsedForLocking())
{
>>>>>>>                         arcSnapshot.put(property.getName(), target);
>>>>>>>                   }
>>>>>>> 
>>>>>>> then the primary key qualifier is correct: "WHERE USER_ID = 2"
instead
>>>>>>> of "WHERE USER_ID is null."
>>>>>>> 
>>>>>>> Unfortunately, this also causes several unit tests to fail. 
I haven't
>>>>>>> yet investigated why this might be.
>>>>>>> 
>>>>>>> Failed tests:
>>>>>>> testReadToOneRelationship(org.apache.cayenne.access.NestedDataContextReadTest)
>>>>>>> testRemoveToMany(org.apache.cayenne.CDOSetRelationshipTest)
>>>>>>> testRemove(org.apache.cayenne.CDOMany2OneTest)
>>>>>>> testNullifyToOne(org.apache.cayenne.access.NestedDataContextWriteTest)
>>>>>>> testMultipleToOneDeletion(org.apache.cayenne.unit.jira.CAY_901Test)
>>>>>>> testRemoveToMany(org.apache.cayenne.CDOMapRelationshipTest)
>>>>>>> testPhantomRelationshipModificationValidate(org.apache.cayenne.access.DataContextExtrasTest)
>>>>>>> testRemove1(org.apache.cayenne.CDOOne2ManyTest)
>>>>>>> testRemove2(org.apache.cayenne.CDOOne2ManyTest)
>>>>>>> testIsToOneTargetModified(org.apache.cayenne.access.DataRowUtilsTest)
>>>>>>> testRemoveToMany(org.apache.cayenne.CDOCollectionRelationshipTest)
>>>>>>> 
>>>>>>> So far, basic functionality for my app seems working.
>>>>>>> 
>>>>>>> On Fri, Sep 13, 2013 at 4:46 PM, Mike Kienenberger <mkienenb@gmail.com>
wrote:
>>>>>>>> As I mentioned earlier, I'm upgrading my ancient Cayenne
project from
>>>>>>>> 1.1 to 3.x, currently 3.0.2.
>>>>>>>> 
>>>>>>>> I started by upgrading to 1.2 and 2.0, unfortunately hitting
the old
>>>>>>>> null-relationship-breaks-optimistic-locking error.
>>>>>>>> 
>>>>>>>> http://mail-archives.apache.org/mod_mbox/cayenne-dev/200803.mbox/%3C8f985b960803271232s5018a5a9hbf0f731f82666e6a@mail.gmail.com%3E
>>>>>>>> 
>>>>>>>> Since most everything else seemed to be working, and the
the
>>>>>>>> workaround I had for 1.1 wasn't possible in 1.2/2.0, I decided
to skip
>>>>>>>> ahead to 3.0 and hope it was fixed there, or that it'd be
more
>>>>>>>> relevant to fix there.
>>>>>>>> 
>>>>>>>> But the same behavior I see in 1.2 and 2.0 still occurs in
3.0.2.  For
>>>>>>>> 1.1, the fix was to retain a new snapshot when resolving
faults, but
>>>>>>>> the problem here seems to be slightly different.
>>>>>>>> 
>>>>>>>> My model has a "User" object and a "PotentialCustomer" object.
 The
>>>>>>>> PotentialCustomer is an optional one-to-one relationship
with the
>>>>>>>> User, where they both have the same primary key.  In the
past I have
>>>>>>>> left the PotentialCustomer relationship as "Used for Locking",
>>>>>>>> although I've set it both ways without changing the resulting
error.
>>>>>>>> 
>>>>>>>> Committing an unrelated attribute change to the "User" object
when it
>>>>>>>> has no corresponding "PotentialCustomer" object generates
a "where
>>>>>>>> USER_ID is null" clause.
>>>>>>>> 
>>>>>>>> Writing a property change eventually generates an  arcSnapshot
for all
>>>>>>>> to-one relationships, even if they are not marked for locking.
>>>>>>>> org.apache.cayenne.access.ObjectDiff.java - line 114:
>>>>>>>> 
>>>>>>>>             public boolean visitToOne(ToOneProperty property)
{
>>>>>>>> 
>>>>>>>>                 // eagerly resolve optimistically locked
relationships
>>>>>>>>                 Object target = lock ?
>>>>>>>> property.readProperty(object) : property
>>>>>>>>                         .readPropertyDirectly(object);
>>>>>>>> 
>>>>>>>>                 if (target instanceof Persistent) {
>>>>>>>>                     target = ((Persistent) target).getObjectId();
>>>>>>>>                 }
>>>>>>>>                 // else - null || Fault
>>>>>>>> 
>>>>>>>>                 arcSnapshot.put(property.getName(), target);
>>>>>>>>                 return true;
>>>>>>>>             }
>>>>>>>> 
>>>>>>>> The problem is that with a relationship which is optional,
the target
>>>>>>>> is going to be null.   And later on, when we generate optimistic
>>>>>>>> locking qualifiers in
>>>>>>>> org.apache.cayenne.access.DataNodeSyncQualifierDescriptor,
we store
>>>>>>>> this null value as the matching value for the record's primary
key.
>>>>>>>> 
>>>>>>>> To me, part of the fix would seem to be to not do anything
if we're
>>>>>>>> not locking on this column.   Why do we need to resolve a
relationship
>>>>>>>> or store a snapshot for a column not involved in optimistic
locking?
>>>>>>>> 
>>>>>>>> Second, even if this column is involved with optimistic locking,
it
>>>>>>>> should not be used as a replacement value for the modified
object's
>>>>>>>> primary key.  It's probably a model error to specify a relationship
>>>>>>>> based on the modified object's primary key as a locking column.
>>>>>>>> However, I can correct this by removing the "Used for Locking"
value.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Thu, Mar 27, 2008 at 3:32 PM, Mike Kienenberger <mkienenb@gmail.com>
wrote:
>>>>>>>>> Here's an interesting situation I'm debugging now for
Cayenne 1.1.
>>>>>>>>> It seems to be related to CAY-213 "NullPointerException
in
>>>>>>>>> ContextCommit with locking".  I suspect that it's true
of 1.2 and
>>>>>>>>> could very well be true for 3.0 as well, although I don't
have that
>>>>>>>>> handy to test with.
>>>>>>>>> 
>>>>>>>>> http://issues.apache.org/cayenne/browse/CAY-213
>>>>>>>>> 
>>>>>>>>> My testing seems to reveal that the same problem occurs
when you set a
>>>>>>>>> to-one relationship to null.  Line 291 in removeToManyTarget()
sets
>>>>>>>>> the state of the previous to-one relationship object
to MODIFIED, but
>>>>>>>>> doesn't retain a snapshot for that object.
>>>>>>>>> 
>>>>>>>>> Here's some simple test code that shows the problem.
  And switching
>>>>>>>>> the scalar setter with the relationship setter works
around the
>>>>>>>>> problem.
>>>>>>>>> 
>>>>>>>>> It seems to me that the the fix is to add
>>>>>>>>> 
>>>>>>>>>         dataContext.getObjectStore().retainSnapshot(this);
>>>>>>>>> 
>>>>>>>>> as was done for writeProperty().
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> public void run() throws Exception
>>>>>>>>> {
>>>>>>>>>     initCayenne("cayenne.xml");
>>>>>>>>> 
>>>>>>>>>     // Set up database
>>>>>>>>>     createSchemaForObjEntityName(Configuration.getSharedConfiguration(),
>>>>>>>>> "PotentialCustomer");
>>>>>>>>>     DataContext dc = DataContext.createDataContext();
>>>>>>>>> 
>>>>>>>>>     // Set up test data
>>>>>>>>>     PotentialCustomer pc =
>>>>>>>>> (PotentialCustomer)dc.createAndRegisterNewObject(PotentialCustomer.class);
>>>>>>>>>     Premise premise = (Premise)dc.createAndRegisterNewObject(Premise.class);
>>>>>>>>>     pc.setToOneTarget("premise", premise, true);
>>>>>>>>>     dc.commitChanges();
>>>>>>>>> 
>>>>>>>>>     // Force failure:
>>>>>>>>>     pc.setToOneTarget("premise", null, true);
>>>>>>>>>     premise.writeProperty("altitude", new Integer(0));
>>>>>>>>> 
>>>>>>>>> // On commitChanges(), no snapshot available for building
locking
>>>>>>>>> //      java.lang.NullPointerException
>>>>>>>>> //          at org.objectstyle.cayenne.access.ContextCommit.appendOptimisticLockingAttributes(ContextCommit.java:564)
>>>>>>>>> 
>>>>>>>>>     dc.commitChanges();
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> java.lang.NullPointerException
>>>>>>>>>     at org.objectstyle.cayenne.access.ContextCommit.appendOptimisticLockingAttributes(ContextCommit.java:564)
>>>>>>>>>     at org.objectstyle.cayenne.access.ContextCommit.prepareUpdateQueries(ContextCommit.java:426)
>>>>>>>>>     at org.objectstyle.cayenne.access.ContextCommit.commit(ContextCommit.java:156)
>>>>>>>>>     at org.objectstyle.cayenne.access.DataContext.commitChanges(DataContext.java:1266)
>>>>>>>>>     at org.objectstyle.cayenne.access.DataContext.commitChanges(DataContext.java:1236)
>>>>>>>>>     at com.gvea.cayenne.TestOptimisticLockingFailureOnSingleTargetNull.run(TestOptimisticLockingFailureOnSingleTargetNull.java:110)
>>>>>>>>>     at com.gvea.cayenne.TestOptimisticLockingFailureOnSingleTargetNull.main(TestOptimisticLockingFailureOnSingleTargetNull.java:24)
>>>>>>>>> 
>>>>>>>>> Note that some of these line numbers may vary as my version
of Cayenne
>>>>>>>>> 1.1 has local mods.
>>>>>>> 
>>>>>> 
>>>> 
>>> 
>>> 
>> 
> 


Mime
View raw message