|
[
Permlink
| « Hide
]
Matthew T. Adams added a comment - 24/Feb/07 02:14 AM
Here is the XSD as a work in progress, in a pre-alpha state.
Matthew T. Adams made changes - 24/Feb/07 02:14 AM
Synopsis of discussion on conf call on Fri 2 Mar 07 follows.
NOTE: See questions at the end of this comment! * PMF already has proposed method getPersistenceUnitName() for 2.1 -- no further changes required * JDOHelper will have the following changes: * Add: public static final String JDO_CONFIG_RESOURCE_NAME = "jdo.xml"; * Add: public static PersistenceManagerFactory getPersistenceManagerFactory() { return getPersistenceManagerFactory((String)null); } * Change: Semantics of methods getPersistenceManagerFactory(String resource) & getPersistenceManagerFactory(String resource, ClassLoader loader) to reflect that if the resource argument is null, then JDOHelper will look for the jdo.xml file and find a persistence-manager-factory element without a persistence-unit-name attribute, and that if the resource argument is non-null, it is taken as a persistence unit name if a jdo.xml is found in the expected location (META-INF) and as a properties file resource name if there is no jdo.xml found. * Add a default no-op implementation class DefaultInstanceLifecycleListener to javax.jdo.listener so people can extend it and only implement the methods they need to; otherwise, they'll have to implement no-op methods for those that they do not wish to. * jdo.xml schema * Rename to jdoconfig.xsd and root element to jdoconfig to match jdoquery element (no dash). * Add documentation * Ensure one instance-lifecycle-listener element per implementing class Questions: Q: If a jdo.xml is found but there is no persistence-factory-manager element whose name attribute matches the resource, should we throw JDOUserException or fall back to JDO 2.0 & prior behavior, looking for a properties resource by the given resource? Q: If both a jdo.xml and persistence.xml are found, which has precedence? Q: The persistence.xml file is required to be in the META-INF/ folder within the persistence archive. What is proposed in JDO 2.1 to align with JPA's concept of a persistence archive? Proposed answers to question in previous comment.
> Q: The persistence.xml file is required to be in the META-INF/ folder within the persistence archive. What is proposed in JDO 2.1 to align with JPA's concept of a persistence archive? > A: There is no longer the notion of "persistence archive" in JPA. Ignored. > Q: If both a jdo.xml and persistence.xml are found, which has precedence? > A: (Note: Multiple jdo.xml files are allowed.) This only matters when there are multiple persistence units (PMF and/or EMF) found with the same names and the user requested a persistence unit of the same name -- if that happens, a JDOUserException should be thrown. > Q: If a jdo.xml is found but there is no persistence-factory-manager element whose name attribute matches the resource, > should we throw JDOUserException or fall back to JDO 2.0 & prior behavior, looking for a properties resource by the given resource? > A: Fall back to JDO 2.0 behavior. Here is a patch relative to root/trunk/api20 containing the changes so far. It includes:
* JDOHelper API changes (everything up to the actual jdoconfig.xml parsing) * Bundle.properties changes * Addition of jdoconfig.xsd & jdoconfig.dtd Please review and comment.
Matthew T. Adams made changes - 03/Mar/07 02:01 AM
For convenience, here is what should be an RC version of jdoconfig.xsd.
Matthew T. Adams made changes - 03/Mar/07 02:03 AM
Matthew T. Adams made changes - 06/Mar/07 05:20 PM
This proposal allows external configuration of instance lifecycle listeners; the external configuration of these is currently not specified in JDO 2.1. The implementation direction for JDOHelper to support JDO persistence units (not JPA) is to read the jdoconfig.xml and create a Map instance and then call JDOHelper.getPersistenceManagerFactory(Map properties).
In order to support externally configured instance lifecycle listeners, I propose that we allow new properties in 2.1 of the form javax.jdo.option.InstanceLifecycleListener.LISTENER_CLASS_NAME=PERSISTENT_CLASS_NAMES where LISTENER_CLASS_NAME is the fully qualified class name of the user's class implementing InstanceLifecycleListener and PERSISTENT_CLASS_NAMES is the list of PC classes that the listener will observe. If empty or not present, all PC classes are observed. Example in .properties file format: javax.jdo.option.InstanceLifecycleListener.com.acme.bleck.blah.MyListener=com.acme.domain.Foo,com.acme.domain.Bar javax.jdo.option.InstanceLifecycleListener.com.acme.bleck.blah.MyOtherListener These are the equivalent of pmf.addLifecycleListener( new com.acme.bleck.blah.MyListener(), new Class[] {com.acme.domain.Foo.class,com.acme.domain.Bar.class}); pmf.addLifecycleListener( new com.acme.bleck.blah.MyOtherListener(), null); The spec would need to be updated to reflect the prefix "javax.jdo.option.InstanceLifecycleListener." and its use, and JDOHelper would need to be updated with the psf String "javax.jdo.option.InstanceLifecycleListener". Just a comment on style -- imports should be fully qualified, e.g. import java.util.Vector and not java.util.*
See the Coding Standards link at http://db.apache.org/jdo/index.html. Matthew,
Good start. Here's a partial review of your patches. 1. We don't like to have imports of package.* because it hides the classes/interfaces that are actually used. So your change of the various import java.util. classes to import java.util.* needs to be reverted. 2. Please split the long line containing JDO_CONFIG_RESOURCE_NAME into two < 80 char lines. 3. In general, please use < 80 char lines. 4. I think the javadoc describing the name parameter needs to discuss the jdoconfig.xml and the persistence.xml for configuration. 5. This comment + * If name is null, return the unnamed {@link PersistenceManagerFactory}; m ultiple persistence units with the given + * name are found (including null), throw JDOFatalUserException. could use a bit of editing. 6. Any reason to use "findNamed..." instead of "getNamed..."? 7. Eschew "Remember", as in Remember, if name == null or name == "", then 8. Stopped at line 211 of the diff, around + /* JDO 2.1: + Attempt to find & return named persistence unit here. + Remember, if name == null or name == "", then we're looking for the def ault PMF.
Craig Russell made changes - 14/Mar/07 08:45 PM
Craig Russell made changes - 14/Mar/07 08:48 PM
Latest version of patch (relative to trunk/api20), ready for review. Positive test cases all work ok; negative test cases still need to be authored, and code to handle reflection-based use of javax.persistence.Persistence is not yet tested.
Matthew T. Adams made changes - 15/Mar/07 06:35 AM
Craig Russell made changes - 16/Mar/07 05:49 AM
Craig Russell made changes - 23/Mar/07 04:28 PM
Craig Russell made changes - 23/Mar/07 04:30 PM
This patch includes the changes discussed on the conference call today:
* JDO 2.0 legacy behavior is attempted first in JDOHelper.getPersistenceManagerFactory(String, ...), then new 2.1 behavior is attempted. * All constants moved into javax.jdo.Constants; PMF no longer extends Constants, only JDOHelper * All JDO XML resource (DTD, schema) names are present & documented.
Matthew T. Adams made changes - 23/Mar/07 11:39 PM
Matthew T. Adams made changes - 23/Mar/07 11:41 PM
Slight refactoring:
* renamed methods "getNamedPersistenceManagerFactory*" to "getPersistenceUnit*" * refactored tests so that they look for META-INF/jdoconfig.xml in test-specific subdirectories using new test class javax.jdo.ClasspathHelper * added a few negative tests This patch supercedes patch
Matthew T. Adams made changes - 24/Mar/07 06:44 PM
This patch supercedes any previous ones. Please review.
Matthew T. Adams made changes - 30/Mar/07 04:21 PM
Committing changes. Still need to fix issues regarding
* use of namespace-aware JAXP APIs (see comment in JDOHelper.java "// TODO: prefer using namespace-aware APIs") * portable configuration of JAXP DocumentBuilderFactory (see comment in JDOHelper.java "// TODO: ensure DBF is initialized properly")
Matthew T. Adams made changes - 06/Apr/07 04:52 PM
Matthew T. Adams made changes - 13/Apr/07 10:00 PM
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||