db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matthew T. Adams (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JDO-467) Named PMF proposal / JDOHelper enhancements
Date Thu, 08 Mar 2007 18:32:24 GMT

    [ https://issues.apache.org/jira/browse/JDO-467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12479388
] 

Matthew T. Adams commented on JDO-467:
--------------------------------------

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".

> Named PMF proposal / JDOHelper enhancements
> -------------------------------------------
>
>                 Key: JDO-467
>                 URL: https://issues.apache.org/jira/browse/JDO-467
>             Project: JDO
>          Issue Type: New Feature
>          Components: api2, api2-legacy
>    Affects Versions: JDO 2 maintenance release 1
>            Reporter: Matthew T. Adams
>         Attachments: JDO-467.patch.txt, jdo-config.xsd.version-01.txt, jdoconfig.xsd
>
>
> From the email on the expert group & jdo-dev alias:
> This is a proposal we discussed on the Fri Feb 23 JDO conf call.  Please
> review and discuss.
> Overview:
> Currently, there is no way to bootstrap a JDO implementation completely
> externally to the source code.  The developer is required to provide at
> least a resource name that identifies a java.util.Properties file on the
> classpath that can configure a single PMF.  This makes deployment in
> different environments more challenging than necessary.
> Motivation:
> * Source code is required to be aware of external configuration:
>     * In all current JDOHelper.getPersistenceManagerFactory APIs and
>     * in order to configure listeners.
> * Aligns JDO bootstrapping with JPA bootstrapping concepts.
> Proposed Solution:
> * Introduce new API methods and JDO equivalent of the JPA persistence
> unit concepts, including a jdo.xml file that provides for the
> configuration of one or more named PMFs.
> Details:
> * PersistenceManagerFactory additions
> /** Returns the persistence unit name of this PMF.  It's the JPA
> persistence unit name if configured via persistence.xml or the JDO
> persistence unit name if configured via javax.jdo.xml. */
> public String getName();
> * JDOHelper API additions
> /** The default name of the JDO configuration file. */
> public static final String DEFAULT_JDO_CONFIG_RESOURCE_NAME =
> "javax.jdo.xml";
> /** The name of the default persistence unit. */
> public static final String DEFAULT_PMF_NAME = "default";
> /** Gets the PMF named "default" in the resource "javax.jdo.xml" found
> via the current ClassLoader. */
> public static PersistenceManagerFactory getPersistenceFactoryManager() {
>     return getPersistenceFactoryManagerByName(DEFAULT_PMF_NAME);
> }
> /** Gets the PMF named pmfName in the resource "javax.jdo.xml" found via
> the current ClassLoader. */
> public static PersistenceManagerFactory
> getPersistenceManagerFactoryByName(String pmfName) {
>     return getPersistenceFactoryManagerByName(DEFAULT_PMF_NAME,
> DEFAULT_JDO_CONFIG_RESOURCE_NAME);
> }
> /** Gets the PMF named pmfName in the resource named resourceName found
> via the current ClassLoader. */
> public static PersistenceManagerFactory
> getPersistenceManagerFactoryByName(String pmfName, String resourceName)
> {
>     return getPersistenceFactoryManagerByName(DEFAULT_PMF_NAME,
> DEFAULT_JDO_CONFIG_RESOURCE_NAME, getClass().getClassLoader());
> }
> /** Gets the PMF named pmfName in the resource named resourceName found
> via the current ClassLoader. */
> public static PersistenceManagerFactory
> getPersistenceManagerFactoryByName(String pmfName, String resourceName,
> ClassLoader loader) {
>     // reads resource resourceName via given loader
>     // configures & returns PMF with the given name
> }
> * Possibilities for DEFAULT_JDO_CONFIG_RESOURCE_NAME value:
>     need to determine file name (similar to persistence.xml)
>     javax.jdo.xml
>     jdo.xml
>     ...
> * Proposal for JDO persistence unit configuration XML file
>     * Could be more like Spring beans.xml (supporting references, etc.)
>     * Note:  Square brackets indicate optional elements/attributes
> <jdo-config>
>     [<extension> elements wherever appropriate]
>     
>     <!-- Can use attributes for standardized properties -->
>     <!-- Can also support vendor-specific attributes and still validate
> against schema -->
>     <persistence-manager-factory
>         [name="default"] <!-- no name implies only the default PMF,
> named "default"; can only be one per file -->
>         [resource="..."] <!-- convenient for backward compatibility -->
>         
>         [class="xcalia.ic.jdo.PersistenceManagerFactory"]
>         [connection-driver="..."]
>         [connection-url="..."]
>         [connection-user-name="..."]
>         [connection-password="..."]
>         [...]
>     >
>         <!-- or XML-friendly <property> elements -->
>         [<property name="javax.jdo...." value="..."/>]
>         [<property name="javax.jdo...." value="..."/>]
>         [<property name="xcalia.ic...." value="..."/>]
>         [...]
>         
>         <!-- ...and/or properties in java.util.Properties file format?
> overrides <property> elements? -->
>         <!-- This allows people to continue to use good, old
> java.util.Properties format if they want -->
>         <properties><![CDATA[
>             javax.jdo....=...
>             javax.jdo....=...
>             xcalia.ic....=...
>             ...
>         ]]></properties>
>         <!-- This provides a way (currently, the only way) to configure
> listeners outside of the code -->
>         <!-- We'd have to address any class loading issues, since we're
> only given a class name -->
>         <!-- These should have javax.jdo.listener.... property &
> property value equivalents in order to keep old-fashioned
> java.util.Property-formatted values consistent with these values -->
>         <!-- Method names default to names of corresponding interfaces;
> if not present on listener-class, they're a no-op or not even called -->
>         [<instance-lifecycle-listener
>             listener-class="my.jdo.InstanceListener"
>             classes-observed="my.domain.Foo,my.domain.Bar,.."
>             [static-factory-method="..."]
>             [pre-attach="preAttach"]
>             [post-attach="postAttach"]
>             [pre-store="preStore"]
>             [...]
>         />]
>         
>         <!-- The <instance-lifecycle-listener> element is sufficient,
> but we could provide elements for each of the listener types -->
>         [<attach-lifecycle-listener
>             class="..."
>             [factory-method="..."]
>             [pre-attach="preAttach"]
>             [post-attach="postAttach"]
>         />]
>         [...]
>         <!-- Can optionally include <jdo>, <orm> and <jdoquery>
elements
> here in order to override annotations, or developer-provided .jdo, .orm,
> and/or .jdoquery files (from Erik Bengston) -->
>         <!-- Can add attribute to <jdo>, <orm>, and <jdoquery> to
allow
> for the specifiation of another resource or set of resources on the
> classpath (from Craig Russell), for example: -->
>         <jdo
> resources="META-INF/production-1;META-INF/production-2;..."/>
>         
>     </persistence-manager-factory>
> </jdo-config> 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message