cayenne-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Kienenberger <mkien...@gmail.com>
Subject Re: optimistic locking exception due to locking on not "Used For Locking" null to-one relationship
Date Thu, 19 Sep 2013 16:11:53 GMT
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