[ 
https://issues.apache.org/jira/browse/ISIS-1562?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Daniel Keir Haywood updated ISIS-1562:
--------------------------------------
      Component/s:     (was: Isis Core)
                   Isis Applib (programming model)
    Fix Version/s:     (was: 2.0.0)
      Description: 
Metamodel validator if forget to annotate...

 

Also, RepositoryService#persist(...) is a no-op if the domain object passed in 
is not an entity; this should probably fail-fast.

This was originally prompted by an obscure message being thrown in 
Memento#updateFieldsAndResolveState(...), as the result of an entity being 
treated as transient, because (a) the @PersistenceCapable annotation was 
accidentally omitted, and (b) a call to RepositoryService#persist(...) just did 
nothing.

So, this ticket would be a fail-fast for that scenario.
{code:java}
    private void updateFieldsAndResolveState(final ObjectAdapter objectAdapter, 
final Data data) {
        
        boolean dataIsTransient = data.getOid().isTransient();
        
        if (!dataIsTransient) {
           ...
        } else if (objectAdapter.isTransient() && dataIsTransient) {
           ...
            
        } else if (objectAdapter.isParentedCollection()) {
           ...
            
        } else {

           // THIS IS THE BRANCH THAT'S TRIGGERED IF @PersistenceCapable IS 
ACCIDENTALLY OMITTED.

            final ObjectData od = (ObjectData) data;
            if (od.containsField()) {
                throw new IsisException("Resolve state (for " + objectAdapter + 
") inconsistent with fact that data exists for fields");
            }
        }
    }
{code}

  was:
Also, RepositoryService#persist(...) is a no-op if the domain object passed in 
is not an entity; this should probably fail-fast.

This was originally prompted by an obscure message being thrown in 
Memento#updateFieldsAndResolveState(...), as the result of an entity being 
treated as transient, because (a) the @PersistenceCapable annotation was 
accidentally omitted, and (b) a call to RepositoryService#persist(...) just did 
nothing.

So, this ticket would be a fail-fast for that scenario.

{code}
    private void updateFieldsAndResolveState(final ObjectAdapter objectAdapter, 
final Data data) {
        
        boolean dataIsTransient = data.getOid().isTransient();
        
        if (!dataIsTransient) {
           ...
        } else if (objectAdapter.isTransient() && dataIsTransient) {
           ...
            
        } else if (objectAdapter.isParentedCollection()) {
           ...
            
        } else {

           // THIS IS THE BRANCH THAT'S TRIGGERED IF @PersistenceCapable IS 
ACCIDENTALLY OMITTED.

            final ObjectData od = (ObjectData) data;
            if (od.containsField()) {
                throw new IsisException("Resolve state (for " + objectAdapter + 
") inconsistent with fact that data exists for fields");
            }
        }
    }
{code}

          Summary: @DomainObject(nature=ENTITY) mandatory with 
@PersistenceCapable  (was: Metamodel validator if forget to annotate 
@DomainObject(nature=ENTITY) with @PersistenceCapable)

> @DomainObject(nature=ENTITY) mandatory with @PersistenceCapable
> ---------------------------------------------------------------
>
>                 Key: ISIS-1562
>                 URL: https://issues.apache.org/jira/browse/ISIS-1562
>             Project: Isis
>          Issue Type: Improvement
>          Components: Isis Applib (programming model)
>    Affects Versions: 1.13.2
>            Reporter: Daniel Keir Haywood
>            Priority: Minor
>
> Metamodel validator if forget to annotate...
>  
> Also, RepositoryService#persist(...) is a no-op if the domain object passed 
> in is not an entity; this should probably fail-fast.
> This was originally prompted by an obscure message being thrown in 
> Memento#updateFieldsAndResolveState(...), as the result of an entity being 
> treated as transient, because (a) the @PersistenceCapable annotation was 
> accidentally omitted, and (b) a call to RepositoryService#persist(...) just 
> did nothing.
> So, this ticket would be a fail-fast for that scenario.
> {code:java}
>     private void updateFieldsAndResolveState(final ObjectAdapter 
> objectAdapter, final Data data) {
>         
>         boolean dataIsTransient = data.getOid().isTransient();
>         
>         if (!dataIsTransient) {
>            ...
>         } else if (objectAdapter.isTransient() && dataIsTransient) {
>            ...
>             
>         } else if (objectAdapter.isParentedCollection()) {
>            ...
>             
>         } else {
>            // THIS IS THE BRANCH THAT'S TRIGGERED IF @PersistenceCapable IS 
> ACCIDENTALLY OMITTED.
>             final ObjectData od = (ObjectData) data;
>             if (od.containsField()) {
>                 throw new IsisException("Resolve state (for " + objectAdapter 
> + ") inconsistent with fact that data exists for fields");
>             }
>         }
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to