As part of implementing the PersistenceProviderResolver in 9.3 and hooking it into the createEMF() bootstraping in 9.2, another grey area has surfaced.

At the end of Section 9.2 -
"If a provider does not qualify as the provider for the named persistence unit, it must return null when createEntityManagerFactory is invoked on it. "

Our testcase - org.apache.openjpa.conf.TestSpecificationConfiguration
   .testHigherVersionCanNotBeSet(TestSpecificationConfiguration.java:62)
that sets the property openjpa.Specification="JPA 3.0" on createEMF() falls under bullet 3 right above that sentence - "A provider may deem itself as appropriate for the persistence unit if any of the following are true: No provider was specified for the persistence unit in either the persistence.xml or the property map."

Since no Provider was specified as a property, we (or any other provider) can choose to handle the createEMF() request. Now, since an openjpa.* property was passed in, should we return an openjpa.ArgumentException (current behavior) or NULL on the createEMF() since we know we cannot handle the request? For some other JPA provider, they would ignore the openjpa.Specification and possibly still fail or maybe they have implemented JPA 3.0 and would return a valid EMF.

So, the question is, do we make a major runtime change and return NULL, so another provider can try creating an EMF, or keep returning an exception and have the geronimo-jpa_2.0_spec rethrow it as a PersistenceException (which was the 1.0 behavior)?



-Donald

Reply via email to