db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig Russell <Craig.Russ...@Sun.COM>
Subject Re: Proposed solution for JDO-69 - embedded Address field issue
Date Tue, 12 Jul 2005 22:45:35 GMT
Hi Michelle,

Michael and I were talking this morning about a related issue with  
reading an object model and making some of the instances persistent.  
The test case we were talking about was the CompletenessTest but the  
results were relevant.

What we decided as an approach is to define another object in the  
bean xml file called "root". This object is a List that contains all  
of the objects to become persistent. In the case of the  
CompletenessTest with no relationships, we need this to be able to  
instantiate instances of Company, Department, PartTimeEmployee,  
FullTimeEmployee, MedicalInsurance, DentalInsurance, and Project and  
individually persist them and compare them. We don't need to persist  
the Address because these are embedded.

We discussed using this same approach for the QueryTest as well.  
Michael said he would look into modifying the query test to use the  
same pattern, and see if both tests could use the same company.xml  
input files.

Considering persistence by reachability, the only objects needed in  
the "root" list is the root of the connected objects. I think in the  
case of the query test, it is the single object "dept1" that is in  
the "root" list. I suppose it can't hurt to have emp1, emp2, and emp3  
in the root list as well, but it is only needed if the implementation  
has a bug in persistence by reachability.

I don't think we need an "isEmbedded" feature in the CompanyModelReader.

Craig

On Jul 12, 2005, at 2:47 PM, Michelle Caisse wrote:

> Hi,
>
> JDO-69 describes a test error that occurs when the test attempts to  
> make an embedded class persistent. The solution that I propose is  
> an extension of one we previously implemented for tearDownClasses   
> In this case, I propose adding to CompanyModelReader an array  
> containing the embedded classes for the model and a boolean method  
> isEmbedded(Class).  In QueryTest, I check if the class is embedded  
> before making it persistent.  See the attached patch.
>
> The concern that I have about this solution is that it only works  
> for a particular mapping of the company model.
>
> The proposed solution fixes most of the 17 errors caused by this  
> issue under application identity.  Under datastore identity, the  
> affected tests produce a different error --  the implementation  
> expects an identity field for the embedded Address class (JDO-83).
>
> -- Michelle
> Index: test/java/org/apache/jdo/tck/pc/company/CompanyModelReader.java
> ===================================================================
> --- test/java/org/apache/jdo/tck/pc/company/ 
> CompanyModelReader.java    (revision 215964)
> +++ test/java/org/apache/jdo/tck/pc/company/ 
> CompanyModelReader.java    (working copy)
> @@ -48,7 +48,7 @@
>          Project.class
>      };
>
> -    /** All classes in the model
> +    /** Non-embedded classes in the model
>       */
>      private static final Class[] tearDownClasses = new Class[] {
>          DentalInsurance.class, MedicalInsurance.class,
> @@ -56,6 +56,12 @@
>          Project.class, Department.class, Company.class
>      };
>
> +    /** Embedded classes in the model
> +     */
> +    private static final Class[] embeddedClasses = new Class[] {
> +        Address.class
> +    };
> +
>      /**
>       * Create a CompanyModelReader for the specified resourceName.
>       * @param resourceName the name of the resource
> @@ -240,5 +246,17 @@
>      public Class[] getTearDownClasses() {
>          return tearDownClasses;
>      }
> +
> +    /**
> +     * @return Returns true if class is embedded.
> +     */
> +    public boolean isEmbedded(Class c) {
> +        for (int i=0; i < embeddedClasses.length; i++) {
> +            if (c.equals(embeddedClasses[i])) {
> +                return true;
> +            }
> +        }
> +        return false;
> +    }
>  }
>
> Index: test/java/org/apache/jdo/tck/query/QueryTest.java
> ===================================================================
> --- test/java/org/apache/jdo/tck/query/QueryTest.java    (revision  
> 215964)
> +++ test/java/org/apache/jdo/tck/query/QueryTest.java    (working  
> copy)
> @@ -126,7 +126,9 @@
>          String[] names = reader.getBeanDefinitionNames();
>          for (int i = 0; i < names.length; i++) {
>              Object bean = reader.getBean(names[i]);
> -            pm.makePersistent(bean);
> +            if (!reader.isEmbedded(bean.getClass())) {
> +                pm.makePersistent(bean);
> +            }
>              if (debug) logger.debug("inserted " + bean);
>          }
>          tx.commit();
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message