Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/DataStoreCache.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/DataStoreCache.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/DataStoreCache.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/DataStoreCache.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * DataStoreCache.java
+ *
+ */
+ 
+package javax.jdo.datastore;
+
+import java.util.Collection;
+
+
+/** 
+ * Many JDO implementations allow instances to be cached in a
+ * second-level cache, and allow direct management of the cache by
+ * knowledgeable applications. This interface standardizes this
+ * behavior.
+ * @since 2.0
+ * @version 2.0
+ */
+public interface DataStoreCache {
+
+    /** Evict the parameter instance from the second-level cache.
+     * @param oid the object id of the instance to evict.
+     * @since 2.0
+     */
+    void evict (Object oid);
+
+    /** Evict the parameter instances from the second-level cache.
+     * All instances in the PersistenceManager's cache are evicted 
+     * from the second-level cache.
+     * @since 2.0
+     */
+    void evictAll ();
+
+    /** Evict the parameter instances from the second-level cache.
+     * @param oids the object ids of the instance to evict.
+     * @since 2.0
+     */
+    void evictAll (Object[] oids);
+
+    /** Evict the parameter instances from the second-level cache.
+     * @param oids the object ids of the instance to evict.
+     * @since 2.0
+     */
+    void evictAll (Collection oids);
+
+    /** Evict the parameter instances from the second-level cache.
+     * @param pcClass the class of instances to evict
+     * @param subclasses if true, evict instances of subclasses also
+     * @since 2.0
+     */
+    void evictAll (Class pcClass, boolean subclasses);
+
+    /** Pin the parameter instance in the second-level cache.
+     * @param oid the object id of the instance to pin.
+     * @since 2.0
+     */
+    void pin (Object oid);
+
+    /** Pin the parameter instances in the second-level cache.
+     * @param oids the object ids of the instances to pin.
+     * @since 2.0
+     */
+    void pinAll (Collection oids);
+
+    /** Pin the parameter instances in the second-level cache.
+     * @param oids the object ids of the instances to pin.
+     * @since 2.0
+     */
+    void pinAll (Object[] oids);
+
+    /** Pin instances in the second-level cache.
+     * @param pcClass the class of instances to pin
+     * @param subclasses if true, pin instances of subclasses also
+     * @since 2.0
+     */
+    void pinAll (Class pcClass, boolean subclasses);
+
+    /** Unpin the parameter instance from the second-level cache.
+     * @param oid the object id of the instance to unpin.
+     * @since 2.0
+     */
+    void unpin(Object oid);
+
+    /** Unpin the parameter instances from the second-level cache.
+     * @param oids the object ids of the instance to evict.
+     * @since 2.0
+     */
+    void unpinAll(Collection oids);
+
+    /** Unpin the parameter instance from the second-level cache.
+     * @param oids the object id of the instance to evict.
+     * @since 2.0
+     */
+    void unpinAll(Object[] oids);
+
+    /** Unpin instances from the second-level cache.
+     * @param pcClass the class of instances to unpin
+     * @param subclasses if true, unpin instances of subclasses also
+     * @since 2.0
+     */
+    void unpinAll(Class pcClass, boolean subclasses);
+    
+    /** 
+     * This class is an empty implementation of the DataStoreCache 
+     * interface. It can be used by an implementation that does not
+     * support a second-level cache.
+     * @since 2.0
+     */
+    public class EmptyDataStoreCache implements DataStoreCache {
+        
+        public EmptyDataStoreCache() {
+        }
+        
+        public void evict(Object oid) {
+        }
+
+        public void evictAll() {
+        }
+
+        public void evictAll(Object[] oids) {
+        }
+
+        public void evictAll(Collection oids) {
+        }
+
+        public void evictAll(Class pcClass, boolean subclasses) {
+        }
+
+        public void pin(Object oid) {
+        }
+
+        public void pinAll(Object[] oids) {
+        }
+
+        public void pinAll(Collection oids) {
+        }
+
+        public void pinAll(Class pcClass, boolean subclasses) {
+        }
+
+        public void unpin(Object oid) {
+        }
+
+        public void unpinAll(Object[] oids) {
+        }
+
+        public void unpinAll(Collection oids) {
+        }
+
+        public void unpinAll(Class pcClass, boolean subclasses) {
+        }
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/JDOConnection.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/JDOConnection.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/JDOConnection.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/JDOConnection.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * JDOConnection.java
+ *
+ */
+ 
+package javax.jdo.datastore;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * The underlying connection that is being used by a 
+ * [EMAIL PROTECTED] PersistenceManager}. 
+ * @version 2.0
+ * @since 2.0
+ */
+public interface JDOConnection {
+
+    /**
+     * Returns the native, datastore-specific connection that this
+     * connection wraps. In general, it is not recommended that this
+     * native connection be used directly, since the JDO
+     * implementation has no way to intercept calls to it, so it is
+     * quite possible to put the <code>PersistenceManager</code>'s
+     * connection into an invalid state.
+     * @return the native connection
+     * @since 2.0
+     */
+    Object getNativeConnection ();
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/Sequence.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/Sequence.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/Sequence.java (added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/Sequence.java Mon 
Mar 28 10:25:05 2005
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * Sequence.java
+ *
+ */
+ 
+package javax.jdo.datastore;
+
+
+/**
+ *     Implementations of this interface can be used to obtain
+ *     sequences. The behavior with regard to the transaction and
+ *     rollover behavior are defined in the metadata.
+ *
+ *     @version 2.0
+ *     @since 2.0
+ */
+public interface Sequence {
+
+    /**
+     * Returns the fully qualified name of the <code>Sequence</code>.
+     */
+    String getName ();
+
+    /**
+     * Returns the next sequence value object.
+     */
+    Object next ();
+
+    /**
+     * Provides a hint to the implementation that the application
+     * will need <code>additional</code> sequence value objects in
+     * short order. There is no externally visible behavior of this
+     * method. It is used to potentially improve the efficiency of
+     * the algorithm of obtaining additional sequence value objects.
+     */
+    void allocate ();
+
+    /**
+     * Returns the current sequence value object if it is
+     * available. It is intended to return a sequence value object
+     * previously used. The implementation might choose to return
+     * <code>null</code> for all cases or for any cases where a
+     * sequence value object is not available.
+     */
+    Object current ();
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/package.html
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/package.html?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/package.html (added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/datastore/package.html Mon Mar 
28 10:25:05 2005
@@ -0,0 +1,26 @@
+<!--
+ Copyright 2005 The Apache Software Foundation.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at 
+ 
+     http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software 
+ distributed under the License is distributed on an "AS IS" BASIS, 
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ See the License for the specific language governing permissions and 
+ limitations under the License.
+-->
+
+<html>
+<head>
+<title>Datastore package</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF">
+This package contains the JDO specification datastore interfaces.
+</body>
+</html>

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ByteIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ByteIdentity.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ByteIdentity.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ByteIdentity.java Mon 
Mar 28 10:25:05 2005
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * ByteIdentity.java
+ *
+ */
+ 
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/** This class is for identity with a single byte field.
+ * @version 2.0
+ */
+public class ByteIdentity extends SingleFieldIdentity {
+    
+    /** The key.
+     */
+    private byte key;
+    
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param key the key
+     */
+    public ByteIdentity(Class pcClass, byte key) {
+        super (pcClass);
+        this.key = key;
+        hashCode = super.hashClassName() ^ key;
+    }
+    
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param key the key
+     */
+    public ByteIdentity(Class pcClass, Byte key) {
+        this (pcClass, key.byteValue());
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param key the key
+     */
+    public ByteIdentity(Class pcClass, int key) {
+        this (pcClass, (byte)key);
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param str the key
+     */
+    public ByteIdentity(Class pcClass, String str) {
+        this (pcClass, Byte.parseByte(str));
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public ByteIdentity() {
+    }
+
+    /** Return the key.
+     * @return the key
+     */
+    public byte getKey() {
+        return key;
+    }
+
+    /** Return the String version of the key.
+     * @return the key.
+     */
+    public String toString() {
+        return getTargetClassName() + " " + Byte.toString(key);
+    }
+
+    /** Determine if the other object represents the same object id.
+     * @param obj the other object
+     * @return true if both objects represent the same object id
+     */
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (!super.equals (obj)) {
+            return false;
+        } else {
+            ByteIdentity other = (ByteIdentity)obj;
+            return key == other.key;
+        }
+    }
+
+    /** Write this object. Write the superclass first.
+     * @param out the output
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal (out);
+        out.writeByte (key);
+    }
+
+    /** Read this object. Read the superclass first.
+     * @param in the input
+     */
+    public void readExternal(ObjectInput in)
+               throws IOException, ClassNotFoundException {
+        super.readExternal (in);
+        key = in.readByte ();
+        hashCode = super.hashCode() ^ key;
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/CharIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/CharIdentity.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/CharIdentity.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/CharIdentity.java Mon 
Mar 28 10:25:05 2005
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * CharIdentity.java
+ *
+ */
+
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import javax.jdo.spi.I18NHelper;
+
+/** This class is for identity with a single character field.
+ * @version 2.0
+ */
+public class CharIdentity extends SingleFieldIdentity {
+
+    /** The Internationalization message helper.
+     */
+    private static I18NHelper msg = I18NHelper.getInstance 
("javax.jdo.Bundle"); //NOI18N
+
+    /** The key.
+     */
+    private char key;
+
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param key the key
+     */
+    public CharIdentity (Class pcClass, char key) {
+        super (pcClass);
+        this.key = key;
+        computeHashCode();
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param key the key
+     */
+    public CharIdentity (Class pcClass, Character key) {
+        this (pcClass, key.charValue ());
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the target class
+     * @param key the key
+     */
+    public CharIdentity (Class pcClass, int key) {
+        this (pcClass, (char)key);
+    }
+
+    /** Constructor with class and key. The String must have exactly one
+     * character.
+     * @param pcClass the target class
+     * @param str the key
+     */
+    public CharIdentity (Class pcClass, String str) {
+        super(pcClass);
+        if (str.length() != 1) 
+            throw new 
IllegalArgumentException(msg.msg("EXC_StringWrongLength"));
+        this.key = str.charAt(0);
+        computeHashCode();
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public CharIdentity () {
+    }
+
+    /** Return the key.
+     * @return the key
+     */
+    public char getKey () {
+        return key;
+    }
+
+    /** Return the String form of the key.
+     * @return the String form of the key
+     */
+    public String toString () {
+        return getTargetClassName() + " " + key;
+    }
+
+    /** Determine if the other object represents the same object id.
+     * @param obj the other object
+     * @return true if both objects represent the same object id
+     */
+    public boolean equals (Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (!super.equals (obj)) {
+            return false;
+        } else {
+            CharIdentity other = (CharIdentity) obj;
+            return key == other.key;
+        }
+    }
+
+    /** Write this object. Write the superclass first.
+     * @param out the output
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal (out);
+        out.writeChar(key);
+    }
+
+    /** Read this object. Read the superclass first.
+     * @param in the input
+     */
+    public void readExternal(ObjectInput in)
+               throws IOException, ClassNotFoundException {
+        super.readExternal (in);
+        key = in.readChar();
+    }
+    
+    private void computeHashCode() {
+        hashCode = hashClassName() ^ key;
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/IntIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/IntIdentity.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/IntIdentity.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/IntIdentity.java Mon 
Mar 28 10:25:05 2005
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * IntIdentity.java
+ *
+ */
+ 
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/** This class is for identity with a single int field.
+ * @version 2.0
+ */
+public class IntIdentity extends SingleFieldIdentity {
+    private int key;
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public IntIdentity (Class pcClass, int key) {
+        super (pcClass);
+        this.key = key;
+        hashCode = hashClassName() ^ key;
+       }
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public IntIdentity (Class pcClass, Integer key) {
+        this (pcClass, key.intValue ());
+    }
+
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param str the key
+     */
+    public IntIdentity (Class pcClass, String str) {
+        this (pcClass, Integer.parseInt (str));
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public IntIdentity () {
+    }
+
+    /** Return the key.
+     * @return the key
+     */
+    public int getKey () {
+        return key;
+    }
+
+    /** Return the String form of the key.
+     * @return the String form of the key
+     */
+    public String toString () {
+        return getTargetClassName() + " " + key;
+    }
+
+    /** Determine if the other object represents the same object id.
+     * @param obj the other object
+     * @return true if both objects represent the same object id
+     */
+    public boolean equals (Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (!super.equals (obj)) {
+            return false;
+        } else {
+            IntIdentity other = (IntIdentity) obj;
+            return key == other.key;
+        }
+    }
+
+    /** Write this object. Write the superclass first.
+     * @param out the output
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal (out);
+        out.writeInt(key);
+    }
+
+    /** Read this object. Read the superclass first.
+     * @param in the input
+     */
+    public void readExternal(ObjectInput in)
+               throws IOException, ClassNotFoundException {
+        super.readExternal (in);
+        key = in.readInt();
+        hashCode = hashClassName() ^ key;
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/LongIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/LongIdentity.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/LongIdentity.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/LongIdentity.java Mon 
Mar 28 10:25:05 2005
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * LongIdentity.java
+ *
+ */
+ 
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/** This class is for identity with a single long field.
+ * @version 2.0
+ */
+public class LongIdentity extends SingleFieldIdentity {
+       
+    /** The key.
+     */
+    private long key;
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public LongIdentity (Class pcClass, long key) {
+        super (pcClass);
+        this.key = key;
+        hashCode = hashClassName() ^ (int)key;
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public LongIdentity (Class pcClass, Long key) {
+        this (pcClass, key.longValue ());
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param str the key
+     */
+    public LongIdentity (Class pcClass, String str) {
+        this (pcClass, Long.parseLong (str));
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public LongIdentity () {
+    }
+
+    /** Return the key.
+     * @return the key
+     */
+    public long getKey () {
+        return key;
+    }
+
+    /** Return the String form of the key.
+     * @return the String form of the key
+     */
+    public String toString () {
+        return getTargetClassName() + " " + key;
+    }
+
+    /** Determine if the other object represents the same object id.
+     * @param obj the other object
+     * @return true if both objects represent the same object id
+     */
+    public boolean equals (Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (!super.equals (obj)) {
+            return false;
+        } else {
+            LongIdentity other = (LongIdentity) obj;
+            return key == other.key;
+        }
+    }
+
+    /** Write this object. Write the superclass first.
+     * @param out the output
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal (out);
+        out.writeLong(key);
+    }
+
+    /** Read this object. Read the superclass first.
+     * @param in the input
+     */
+    public void readExternal(ObjectInput in)
+               throws IOException, ClassNotFoundException {
+        super.readExternal (in);
+        key = in.readLong();
+        hashCode = hashClassName() ^ (int)key;
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ShortIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ShortIdentity.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ShortIdentity.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/ShortIdentity.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * ShortIdentity.java
+ *
+ */
+ 
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/** This class is for identity with a single short field.
+ * @version 2.0
+ */
+public class ShortIdentity
+       extends SingleFieldIdentity
+{
+       private short key;
+
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public ShortIdentity (Class pcClass, short key) {
+        super (pcClass);
+        this.key = key;
+        hashCode = hashClassName() ^ key;
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public ShortIdentity (Class pcClass, Short key) {
+        this (pcClass, key.shortValue ());
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public ShortIdentity (Class pcClass, int key) {
+        this (pcClass, (short)key);
+    }
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param str the key
+     */
+    public ShortIdentity (Class pcClass, String str) {
+        this (pcClass, Short.parseShort (str));
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public ShortIdentity () {
+    }
+
+    /** Return the key.
+     * @return the key
+     */
+    public short getKey () {
+        return key;
+    }
+
+    /** Return the String form of the key.
+     * @return the String form of the key
+     */
+    public String toString () {
+        return getTargetClassName() + " " + key;
+    }
+
+    /** Determine if the other object represents the same object id.
+     * @param obj the other object
+     * @return true if both objects represent the same object id
+     */
+    public boolean equals (Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (!super.equals (obj)) {
+            return false;
+        } else {
+            ShortIdentity other = (ShortIdentity) obj;
+            return key == other.key;
+        }
+    }
+
+    /** Write this object. Write the superclass first.
+     * @param out the output
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal (out);
+        out.writeShort(key);
+    }
+
+    /** Read this object. Read the superclass first.
+     * @param in the input
+     */
+    public void readExternal(ObjectInput in)
+               throws IOException, ClassNotFoundException {
+        super.readExternal (in);
+        key = in.readShort();
+        hashCode = hashClassName() ^ key;
+    }
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java 
(added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/identity/SingleFieldIdentity.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * SingleFieldIdentity.java
+ *
+ */
+ 
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/** This class is the abstract base class for all single field identity
+ * classes. A common case of application identity uses exactly one 
+ * persistent field in the class to represent identity. In this case, 
+ * the application can use a standard JDO class instead of creating 
+ * a new user-defined class for the purpose.
+ * @version 2.0
+ */
+public abstract class SingleFieldIdentity
+    implements Externalizable {
+    
+    /** The class of the target object.
+     */
+    transient private Class targetClass;
+    
+    /** The name of the class of the target object.
+     */
+    private String targetClassName;
+
+    /** The hashCode.
+     */
+    protected int hashCode;
+
+    /** Constructor with target class.
+     * @param pcClass the class of the target
+     * @since 2.0
+     */
+    protected SingleFieldIdentity(Class pcClass) {
+        if (pcClass == null)
+            throw new NullPointerException();
+        targetClass = pcClass;
+        targetClassName = pcClass.getName();
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public SingleFieldIdentity () {
+    }
+
+    /** Return the target class.
+     * @return the target class.
+     * @since 2.0
+     */
+    public Class getTargetClass() {
+        return targetClass;
+    }
+
+    /** Return the target class name.
+     * @return the target class name.
+     * @since 2.0
+     */
+    public String getTargetClassName() {
+        return targetClassName;
+    }
+
+    /** Check the class and class name and object type. If restored
+     * from serialization, class will be null so compare class name.
+     * @param obj the other object
+     * @return true if the class or class name is the same
+     * @since 2.0
+     */
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (obj == null || this.getClass() != obj.getClass()) {
+            return false;
+        } else {
+            SingleFieldIdentity other = (SingleFieldIdentity) obj;
+            if (targetClass != null && targetClass == other.targetClass)
+                return true;
+            return targetClassName.equals (other.targetClassName);
+        }
+    }
+
+    /** Return the hash code of the class name.
+     * @return the hash code of the class name
+     */
+    protected int hashClassName() {
+        return targetClassName.hashCode();
+    }
+    
+    /** Return the cached hash code.
+     * @return the cached hash code.
+     */
+    public int hashCode() {
+        return hashCode;
+    }
+
+    /** Write to the output stream.
+     * @param out the stream
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(targetClassName);
+        out.writeInt(hashCode);
+    }
+
+    /** Read from the input stream.
+     * @return a new instance with the target class name set
+     * @since 2.0
+     */
+    public void readExternal(ObjectInput in)
+            throws IOException, ClassNotFoundException {
+        targetClass = null;
+        targetClassName = (String)in.readObject();
+        hashCode = in.readInt();
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/StringIdentity.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/StringIdentity.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/StringIdentity.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/StringIdentity.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * StringIdentity.java
+ *
+ */
+ 
+package javax.jdo.identity;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/** This class is for identity with a single String field.
+ * @version 2.0
+ */
+public class StringIdentity extends SingleFieldIdentity {
+    
+    /** The key.
+     */
+    private String key;
+
+
+    /** Constructor with class and key.
+     * @param pcClass the class
+     * @param key the key
+     */
+    public StringIdentity (Class pcClass, String key) {
+        super (pcClass);
+        if (key == null)
+            throw new NullPointerException ();
+        this.key = key;
+        hashCode = hashClassName() ^ key.hashCode();
+    }
+
+    /** Constructor only for Externalizable.
+     */
+    public StringIdentity () {
+    }
+
+    /** Return the key.
+     * @return the key
+     */
+    public String getKey () {
+        return key;
+    }
+
+    /** Return the String form of the key.
+     * @return the String form of the key
+     */
+    public String toString () {
+        return getTargetClassName() + " " + key;
+    }
+
+    /** Determine if the other object represents the same object id.
+     * @param obj the other object
+     * @return true if both objects represent the same object id
+     */
+    public boolean equals (Object obj) {
+        if (this == obj) {
+            return true;
+        } else if (!super.equals (obj)) {
+            return false;
+        } else {
+            StringIdentity other = (StringIdentity) obj;
+            return key.equals(other.key);
+        }
+    }
+
+    /** Write this object. Write the superclass first.
+     * @param out the output
+     */
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal (out);
+        out.writeObject(key);
+    }
+
+    /** Read this object. Read the superclass first.
+     * @param in the input
+     */
+    public void readExternal(ObjectInput in)
+               throws IOException, ClassNotFoundException {
+        super.readExternal (in);
+        key = (String)in.readObject();
+        hashCode = hashClassName() ^ key.hashCode();
+    }
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/identity/package.html
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/identity/package.html?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/identity/package.html (added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/identity/package.html Mon Mar 
28 10:25:05 2005
@@ -0,0 +1,26 @@
+<!--
+ Copyright 2005 The Apache Software Foundation.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at 
+ 
+     http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software 
+ distributed under the License is distributed on an "AS IS" BASIS, 
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ See the License for the specific language governing permissions and 
+ limitations under the License.
+-->
+
+<html>
+<head>
+<title>Listener package</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF">
+This package contains the JDO specification identity interfaces and classes.
+</body>
+</html>

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachCallback.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachCallback.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachCallback.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachCallback.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * AttachCallback.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is used to notify instances of attach events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface AttachCallback {
+    
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#attachCopy} before the copy is 
made.
+     * @since 2.0
+     */
+    public void jdoPreAttach();
+
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#attachCopy} on the persistent
+     * instance after the copy is made.
+     * @param attached The corresponding (non-attached) instance that was
+     * attached in the call to [EMAIL PROTECTED] 
PersistenceManager#attachCopy}.
+     * @since 2.0
+     */
+    public void jdoPostAttach(Object attached);
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/AttachLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * AttachLifecycleListener.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * attach events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface AttachLifecycleListener
+    extends InstanceLifecycleListener {
+    
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#attachCopy} before the copy is 
made.
+     * It is called before the method [EMAIL PROTECTED] 
AttachCallback#jdoPreAttach}
+     * is invoked on the instance to be attached.
+     * @param event the attach event.
+     * @since 2.0
+        */
+    void preAttach (InstanceLifecycleEvent event);
+    
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#attachCopy} on the persistent
+     * instance after the copy is made.
+     * @param event the attach event.
+     * @since 2.0
+     */
+    void postAttach (InstanceLifecycleEvent event);
+}

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearCallback.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearCallback.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearCallback.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearCallback.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * ClearCallback.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is used to notify instances of clear events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface ClearCallback {
+    
+    /**
+     * Called before the values in the instance are cleared.
+     *
+     * <P>Transient fields should be cleared in this method.  
+     * Associations between this
+     * instance and others in the runtime environment should be cleared.
+     *
+     * <P>This method is not modified by the enhancer.
+     */
+    void jdoPreClear();
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/ClearLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * ClearLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * clear events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface ClearLifecycleListener
+    extends InstanceLifecycleListener {
+
+    /**
+     * This method is called before the implementation calls the instance
+     *  method [EMAIL PROTECTED] ClearCallback#jdoPreClear} and before it 
clears the values 
+     *  in the instance to their Java default values. This happens during 
+     *  an application call to evict, and in afterCompletion for commit 
+     *  with RetainValues false and rollback with RestoreValues false. 
+     *  <P>The method is called during any state transition to hollow.
+     *  Non-persistent, non-transactional fields should be cleared 
+     *  in this method. Associations between this instance and others 
+     *  in the runtime environment should be cleared. 
+     *  <P>This method is not modified by the enhancer, so access to fields 
+     *  is not mediated.
+     * @param event the clear event.
+     * @since 2.0
+     */
+    void preClear (InstanceLifecycleEvent event);
+    
+    /**
+     * This method is called after the [EMAIL PROTECTED] 
ClearCallback#jdoPreClear} 
+     * method is invoked on the instance and the fields have been cleared 
+     * by the JDO implementation.
+     * @param event the clear event.
+     * @since 2.0
+     */
+    void postClear (InstanceLifecycleEvent event);
+}
\ No newline at end of file

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/CreateLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * CreateLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * create events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface CreateLifecycleListener
+    extends InstanceLifecycleListener {
+
+    /**
+     * Invoked whenever an instance is made persistent via a
+     * call to [EMAIL PROTECTED] PersistenceManager#makePersistent} or during
+     * persistence by reachability.
+     * @param event the create event.
+     * @since 2.0
+     */
+    void postCreate (InstanceLifecycleEvent event);
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteCallback.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteCallback.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteCallback.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteCallback.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * DeleteCallback.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/** 
+ * This interface is used to notify instances of delete events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface DeleteCallback
+{
+    /**
+     * Called before the instance is deleted.
+     * This method is called before the state transition to persistent-deleted 
+     * or persistent-new-deleted. Access to field values within this call 
+     * are valid. Access to field values after this call are disallowed. 
+     * <P>This method is modified by the enhancer so that fields referenced 
+     * can be used in the business logic of the method.
+     */
+    void jdoPreDelete();
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DeleteLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * DeleteLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * delete events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface DeleteLifecycleListener
+    extends InstanceLifecycleListener {
+
+    /**
+     * Invoked whenever a persistent instance is deleted, for example
+     * during [EMAIL PROTECTED] PersistenceManager#deletePersistent}. Access 
to field
+     * values within this call are permitted.  
+     * <P>This method is called before the instance callback
+     * [EMAIL PROTECTED] DeleteCallback#jdoPreDelete}.
+     * @param event the delete event.
+     * @since 2.0
+     */
+    void preDelete (InstanceLifecycleEvent event);
+
+    /**
+     * Invoked whenever a persistent instance is deleted, for example
+     * during [EMAIL PROTECTED] PersistenceManager#deletePersistent}.
+     * <P>This method is called after the instance transitions
+     * to persistent-deleted. Access to field values is not permitted.
+     * @param event the delete event.
+     * @since 2.0
+     */
+    void postDelete (InstanceLifecycleEvent event);
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachCallback.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachCallback.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachCallback.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachCallback.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * DetachCallback.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is used to notify instances of detach events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface DetachCallback {
+    
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#detachCopy} on the
+     * persistent instance before the copy is made.
+     * @since 2.0
+     */
+    public void jdoPreDetach();
+
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#detachCopy} on the
+     * detached instance after the copy is made.
+     * @param detached The corresponding (attached) persistent instance.
+     * @since 2.0
+     */
+    public void jdoPostDetach(Object detached);
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DetachLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * DetachLifecycleListener.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * detach events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface DetachLifecycleListener
+    extends InstanceLifecycleListener {
+    
+    /** 
+     * This method is called during the execution of 
+     * [EMAIL PROTECTED] PersistenceManager#detachCopy} before the 
+     * detached copy is made. It is called before the method
+     * [EMAIL PROTECTED] DetachCallback#jdoPreDetach} is called on the
+     * instance to be detached.
+     * @param event the detach event.
+     * @since 2.0
+     */
+    void preDetach (InstanceLifecycleEvent event);
+    
+    /**
+     * This method is called during the execution of
+     * [EMAIL PROTECTED] PersistenceManager#detachCopy} after the 
+     * detached copy is made. It is called after the method
+     * [EMAIL PROTECTED] DetachCallback#jdoPreDetach} is called on
+     * the detached instance.
+     * @param event the detach event.
+     * @since 2.0
+     */
+    void postDetach (InstanceLifecycleEvent event); 
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/DirtyLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * DirtyLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * dirty events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface DirtyLifecycleListener
+    extends InstanceLifecycleListener {
+
+    /**
+     * Invoked whenever a persistent instance is first made dirty,
+     * during an operation that modifies the value of a persistent or
+     * transactional field. Called before the value is changed.
+     * @since 2.0
+     */
+    void preDirty (InstanceLifecycleEvent event);
+
+    /**
+     * Invoked whenever a persistent instance is first made dirty,
+     * during an operation that modifies the value of a persistent or
+     * transactional field. Called after the value is changed.
+     * @since 2.0
+     */
+    void postDirty (InstanceLifecycleEvent event);
+}
\ No newline at end of file

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleEvent.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * InstanceLifecycleEvent.java
+ *
+ */
+
+package javax.jdo.listener;
+
+/**
+ * This is the event class used in life cycle event notifications.
+ * <P>Note that although InstanceLifecycleEvent inherits Serializable 
interface 
+ * from EventObject, it is not intended to be Serializable. Appropriate 
+ * serialization methods are implemented to throw NotSerializableException.
+ * @version 2.0
+ * @since 2.0
+ */
+public class InstanceLifecycleEvent
+    extends java.util.EventObject {
+
+    public static final int CREATE = 0;
+    public static final int LOAD = 1;
+    public static final int STORE = 2;
+    public static final int CLEAR = 3;
+    public static final int DELETE = 4;
+    public static final int DIRTY = 5;
+    public static final int DETACH = 6;
+    public static final int ATTACH = 7;
+
+    /**
+     * The event type that triggered the construction of this event object.
+     */
+    private final int eventType;
+    
+    /** 
+     * The "other" object associated with the event.
+     */
+    private final Object target;
+
+    /**
+     * Creates a new event object with the specified
+     * <code>source</code> and <code>type</code>.
+     * @param source the instance that triggered the event
+     * @param type the event type
+     * @since 2.0
+     */
+    public InstanceLifecycleEvent (Object source, int type) {
+        super (source);
+        eventType = type;
+        target = null;
+    }
+
+    /**
+     * Creates a new event object with the specified
+     * <code>source</code>, <code>type</code>, and <code>target</code>.
+     * @param source the instance that triggered the event
+     * @param type the event type
+     * @param target the "other" instance
+     * @since 2.0
+     */
+    public InstanceLifecycleEvent (Object source, int type, Object target) {
+        super (source);
+        eventType = type;
+        this.target = target;
+    }
+
+    /**
+     * Returns the event type that triggered this event.
+     * @return the event type
+     * @since 2.0
+     */
+    public int getEventType () {
+        return eventType;
+    }
+
+    /**
+     * Returns the "other" object.
+     * @return the "other" object
+     * @since 2.0
+     */
+    public Object getTarget () {
+        return target;
+    }
+    
+    /**
+     * Serialization is not supported for InstanceLifecycleEvents.
+     * param out the output stream
+     * @since 2.0
+     */
+    private void writeObject(java.io.ObjectOutputStream out) 
+        throws java.io.IOException {
+        throw new java.io.NotSerializableException();
+    }
+}
\ No newline at end of file

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/InstanceLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * InstanceLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+/**
+ * All lifecycle listeners extend from this base interface.
+ * In order to minimize the impact on domain classes, instance callbacks 
+ * can be defined to use a life-cycle listener pattern instead of 
+ * having the domain class implement the callback interface(s).
+ *
+ * @version 2.0
+ * @since 2.0
+ */
+public interface InstanceLifecycleListener {
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadCallback.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadCallback.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadCallback.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadCallback.java Mon 
Mar 28 10:25:05 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * LoadCallback.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+/**
+ * This interface is used to notify instances of load events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface LoadCallback {
+    
+    /**
+     * Called after the values are loaded from the data store into
+     * this instance.
+     *
+     * <P>This method is not modified by the enhancer.
+     * <P>Derived fields should be initialized in this method.
+     * The context in which this call is made does not allow access to 
+     * other persistent JDO instances.
+     */
+    void jdoPostLoad();
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/LoadLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * LoadLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * load events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface LoadLifecycleListener
+    extends InstanceLifecycleListener {
+
+    /**
+     * Invoked whenever a persistent instance is loaded from the data
+     * store. It is called after the method [EMAIL PROTECTED] 
LoadCallback#jdoPostLoad}
+     * is invoked on the persistent instance.
+     * @param event the load event.
+     * @since 2.0
+     */
+    void postLoad (InstanceLifecycleEvent event);
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreCallback.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreCallback.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreCallback.java 
(added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreCallback.java 
Mon Mar 28 10:25:05 2005
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * StoreCallback.java
+ *
+ */
+ 
+package javax.jdo.listener;
+
+/**
+ * This interface is used to notify instances of store events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface StoreCallback {
+    
+    /**
+     * Called before the values are stored from this instance to the
+     * data store.
+     *
+     * <P>Data store fields that might have been affected by modified
+     * non-persistent fields should be updated in this method.
+     *
+     * <P>This method is modified by the enhancer so that changes to 
+     * persistent fields will be reflected in the data store. 
+     * The context in which this call is made allows access to the 
+     * <code>PersistenceManager</code> and other persistent JDO instances.
+     */
+    void jdoPreStore();
+}

Added: 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java?view=auto&rev=159273
==============================================================================
--- 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java
 (added)
+++ 
incubator/jdo/trunk/api20/src/java/javax/jdo/listener/StoreLifecycleListener.java
 Mon Mar 28 10:25:05 2005
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * StoreLifecycleListener.java
+ *
+ */
+
+package javax.jdo.listener;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+/**
+ * This interface is implemented by listeners to be notified of
+ * store events.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface StoreLifecycleListener
+       extends InstanceLifecycleListener {
+
+    /**
+     * Invoked whenever a persistent instance is stored, for example
+     * during [EMAIL PROTECTED] PersistenceManager#flush} or [EMAIL PROTECTED]
+     * Transaction#commit}. It is called before the
+     * method [EMAIL PROTECTED] StoreCallback#jdoPreStore} is invoked.
+     * @param event the store event.
+     * @since 2.0
+     */
+    void preStore (InstanceLifecycleEvent event);
+    
+    /**
+     * Invoked whenever a persistent instance is stored, for example
+     * during [EMAIL PROTECTED] PersistenceManager#flush} or [EMAIL PROTECTED]
+     * Transaction#commit}. It is called after the
+     * field values have been stored.
+     * @param event the store event.
+     * @since 2.0
+     */
+    void postStore (InstanceLifecycleEvent event);
+}
\ No newline at end of file

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/listener/package.html
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/listener/package.html?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/listener/package.html (added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/listener/package.html Mon Mar 
28 10:25:05 2005
@@ -0,0 +1,54 @@
+<!--
+ Copyright 2005 The Apache Software Foundation.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at 
+ 
+     http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software 
+ distributed under the License is distributed on an "AS IS" BASIS, 
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ See the License for the specific language governing permissions and 
+ limitations under the License.
+-->
+
+<html>
+<head>
+<title>Listener package</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF">
+This package contains the JDO specification listener interfaces and classes.
+<P>There are two kinds of interfaces defined to allow an application to 
+manage life cycle changes to persistent objects. 
+<P>The first kind is defined
+on the persistent domain class itself. This allows methods in the domain class
+to be called during life cycle events. The domain class implements one or more
+of the interfaces 
[EMAIL PROTECTED] javax.jdo.listener.AttachCallback}, 
[EMAIL PROTECTED] javax.jdo.listener.ClearCallback}, 
[EMAIL PROTECTED] javax.jdo.listener.DeleteCallback}, 
[EMAIL PROTECTED] javax.jdo.listener.DetachCallback},
[EMAIL PROTECTED] javax.jdo.listener.LoadCallback}, or 
[EMAIL PROTECTED] javax.jdo.listener.StoreCallback}. 
+The methods in the interfaces
+are called during life cycle events.
+<P>The second kind is defined on an external class using the listener pattern.
+Instances of classes that implement one or more of the listener interfaces 
[EMAIL PROTECTED] javax.jdo.listener.AttachLifecycleListener}, 
[EMAIL PROTECTED] javax.jdo.listener.ClearLifecycleListener}, 
[EMAIL PROTECTED] javax.jdo.listener.CreateLifecycleListener}, 
[EMAIL PROTECTED] javax.jdo.listener.DeleteLifecycleListener}, 
[EMAIL PROTECTED] javax.jdo.listener.DetachLifecycleListener}, 
[EMAIL PROTECTED] javax.jdo.listener.DirtyLifecycleListener}, 
[EMAIL PROTECTED] javax.jdo.listener.LoadLifecycleListener}, or 
[EMAIL PROTECTED] javax.jdo.listener.StoreLifecycleListener}
+are registered
+with the PersistenceManager or PersistenceManagerFactory
+and receive callbacks during life cycle events
+of the persistent instances of interest.
+</body>
+</html>

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/package.html
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/package.html?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/package.html (added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/package.html Mon Mar 28 
10:25:05 2005
@@ -0,0 +1,90 @@
+<!--
+ Copyright 2005 The Apache Software Foundation.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at 
+ 
+     http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software 
+ distributed under the License is distributed on an "AS IS" BASIS, 
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ See the License for the specific language governing permissions and 
+ limitations under the License.
+-->
+
+<html>
+<head>
+<title>JDO package</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+
+<body bgcolor="#FFFFFF">
+This package contains the JDO specification interfaces and classes. 
+<P>There are two major objectives of the JDO architecture: 
+first, to provide application programmers a transparent,
+Java-centric view of persistent information, including enterprise data 
+and locally stored data; and second, to enable pluggable implementations 
+of data stores into 
+application servers.  Data stored in data stores is presented as
+instances of persistence-capable classes.
+<P>JDO defines interfaces and classes to be used by application programmers 
+when using classes whose instances are to be stored in persistent storage 
+(persistence-capable classes), and specifies the contracts between 
+suppliers of persistence-capable classes and the 
+runtime environment (which is part of the JDO implementation).
+<P>The JDO architecture defines a standard set of contracts between an 
+application programmer and an JDO vendor. These contracts focus on the 
+view of the Java instances of persistence capable classes.
+<P>The JDO PersistenceManagerFactory is the boostrap class for a JDO
+application.  The application gets an instance of the
+PersistenceManagerFactory by construction or via JDNI lookup.
+<P>The application acquires an instance of the JDO PersistenceManager by
+calling the getPersistenceManager method on an instance of JDO
+PersistenceManagerFactory.  
+<P>The JDO PersistenceManager is the primary interface for JDO-aware 
+application components: 
+<ul>
+<li>it gives access to the current Transaction interface;
+<li>it is the factory for the Query interface;
+<li>it contains methods for managing the life cycle of persistent instances.
+</ul>
+<P>A JDO PersistenceManager instance supports any number of JDO instances 
+at a time. It is responsible for managing the identity of its 
+associated JDO instances. A JDO instance is associated with either 
+zero or one JDO PersistenceManager. It will be zero if and only if the 
+JDO instance is transient nontransactional. As soon as the instance is made 
persistent 
+or transactional, it will be associated with exactly one JDO 
PersistenceManager.
+<P>A JDO PersistenceManager instance supports one transaction at a time, 
+and uses one connection to the underlying data source at a time. The JDO 
+PersistenceManager instance might use multiple transactions serially, 
+and might use multiple connections serially.
+<P>Normally, cache management is automatic and transparent. When instances 
+are queried, navigated to, or modified, instantiation of instances and 
+their fields and garbage collection of unreferenced instances occurs 
+without any explicit control. When the transaction in which persistent 
+instances are created, deleted, or modified commits, eviction is 
+automatically done by the transaction completion mechanisms. 
+<P>Operations on persistent JDO instances at the user's choice might be 
+performed in the context of a transaction. That is, the view of data 
+in the data store is transactionally consistent, according to the 
+standard definition of ACID transactions.
+<P>The Transaction interface is used to mark the beginning and end of a 
+application-defined unit of work.  The PersistenceManager allows the 
+application to get the instance that manages these transactional
+boundaries via the currentTransaction method.
+<P>The persistent manager instance is a factory for query instances, 
+and queries are executed in the context of the persistent manager instance. 
+The actual query execution might be performed by the JDO PersistenceManager 
+or might be delegated by the JDO PersistenceManager to its data store. 
+The actual query executed thus might be implemented in a very different 
+language from Java, and might be optimized to take advantage of particular 
+query language implementations.
+<P>Extents are collections of data store objects managed by the data store, 
+not by explicit user operations on collections. Extent capability is a 
+boolean property of classes that are persistence capable. If an instance 
+of a class that has a managed extent is made persistent via reachability, 
+the instance is put into the extent implicitly.
+</body>
+</html>

Added: incubator/jdo/trunk/api20/src/java/javax/jdo/spi/Detachable.java
URL: 
http://svn.apache.org/viewcvs/incubator/jdo/trunk/api20/src/java/javax/jdo/spi/Detachable.java?view=auto&rev=159273
==============================================================================
--- incubator/jdo/trunk/api20/src/java/javax/jdo/spi/Detachable.java (added)
+++ incubator/jdo/trunk/api20/src/java/javax/jdo/spi/Detachable.java Mon Mar 28 
10:25:05 2005
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+/*
+ * Detachable.java
+ *
+ */
+
+package javax.jdo.spi;
+
+/**
+ * This interface is implemented by classes that can be detached from the
+ * persistence context and later attached. The interface includes the 
+ * contract by which the StateManager can set the object id and version
+ * so they are preserved while outside the persistence environment.
+ * @version 2.0
+ * @since 2.0
+ */
+public interface Detachable {
+    
+    /** Replace the object id in the detached object.
+     */
+    void jdoReplaceObjectId();
+    
+    /** Replace the version in the detached object.
+     */
+    void jdoReplaceVersion();
+    
+    /** Provide the loaded field list in the detached object.
+     */
+    void jdoProvideLoadedFieldList();
+    
+    /** Replace the loaded field list in the detached object.
+     */
+    void jdoReplaceLoadedFieldList();
+    
+    /** Provide the modified field list in the detached object.
+     */
+    void jdoProvideModifiedFieldList();
+    
+    /** Replace the modified field list in the detached object.
+     */
+    void jdoReplaceModifiedFieldList();
+}


Reply via email to