You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ss...@apache.org on 2007/02/26 21:46:05 UTC
svn commit: r511998 - in /incubator/openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/
openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-kernel/src/main/...
Author: ssegu
Date: Mon Feb 26 12:46:03 2007
New Revision: 511998
URL: http://svn.apache.org/viewvc?view=rev&rev=511998
Log:
OPENJPA-151.
Modified:
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PersistenceCapable.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/StateManager.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedValueStateManager.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ObjectIdStateManager.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ProxySetupStateManager.java
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java Mon Feb 26 12:46:03 2007
@@ -945,10 +945,6 @@
// StateManager implementation
///////////////////////////////
- public byte replaceFlags() {
- throw new InternalException();
- }
-
public Object getPCPrimaryKey(Object oid, int field) {
throw new InternalException();
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java Mon Feb 26 12:46:03 2007
@@ -95,6 +95,11 @@
* @author Abe White
*/
public class PCEnhancer {
+ // Designates a version for maintaining compatbility when PCEnhancer
+ // modifies enhancement that can break serialization or other contracts
+ // Each enhanced class will return the value of this field via
+ // public int getEnhancementContractVersion()
+ public static final int ENHANCER_VERSION = 2;
public static final int ENHANCE_NONE = 0;
public static final int ENHANCE_AWARE = 2 << 0;
@@ -716,7 +721,6 @@
if (_meta.getPCSuperclass() == null) {
addStockMethods();
addGetVersionMethod();
- addReplaceFlagsMethod();
addReplaceStateManagerMethod();
if (_meta.getIdentityType() != ClassMetaData.ID_APPLICATION)
@@ -841,11 +845,6 @@
code.aload().setParam(0);
code.putfield().setField(SM, SMTYPE);
- // pc.pcFlags = LOAD_REQUIRED
- code.aload().setLocal(inst);
- code.constant().setValue(PersistenceCapable.LOAD_REQUIRED);
- code.putfield().setField(PRE + "Flags", byte.class);
-
// copy key fields from oid
if (oid) {
code.aload().setLocal(inst);
@@ -1330,35 +1329,6 @@
}
/**
- * Adds the {@link PersistenceCapable#pcReplaceFlags}
- * method to the bytecode.
- */
- private void addReplaceFlagsMethod() {
- // public final void pcReplaceFlags ()
- BCMethod method = _pc.declareMethod(PRE + "ReplaceFlags",
- void.class, null);
- Code code = method.getCode(true);
-
- // if (pcStateManager != null)
- loadManagedInstance(code, false);
- code.getfield().setField(SM, SMTYPE);
- JumpInstruction ifins = code.ifnonnull();
- code.vreturn();
-
- // pcFlags = pcStateManager.replaceFlags ();
- ifins.setTarget(loadManagedInstance(code, false));
- loadManagedInstance(code, false);
- code.getfield().setField(SM, SMTYPE);
- code.invokeinterface().setMethod(SMTYPE, "replaceFlags",
- byte.class, null);
- code.putfield().setField(PRE + "Flags", byte.class);
- code.vreturn();
-
- code.calculateMaxStack();
- code.calculateMaxLocals();
- }
-
- /**
* Adds the {@link PersistenceCapable#pcReplaceStateManager}
* method to the bytecode.
*/
@@ -2157,6 +2127,9 @@
// make the class implement PersistenceCapable
_pc.declareInterface(PCTYPE);
+ // add a version stamp
+ addGetEnhancementContractVersionMethod();
+
// find the default constructor
BCMethod method = _pc.getDeclaredMethod("<init>", (String[]) null);
@@ -2197,8 +2170,6 @@
* <li><code>private static byte[] pcFieldFlags</code></li>
* <li><code>protected transient StateManager pcStateManager</code>
* if no PersistenceCapable superclass present)</li>
- * <li><code>protected transient byte pcFlags</code>
- * if no PersistenceCapable superclass present)</li>
* </ul>
*/
private void addFields() {
@@ -2212,10 +2183,6 @@
BCField field = _pc.declareField(SM, SMTYPE);
field.makeProtected();
field.setTransient(true);
-
- field = _pc.declareField(PRE + "Flags", byte.class);
- field.makeProtected();
- field.setTransient(true);
}
}
@@ -2724,10 +2691,10 @@
/**
* Adds bytecode modifying the cloning behavior of the class being
- * enhanced to correctly replace the <code>pcFlags</code> and
- * <code>pcStateManager</code> instance fields of any clone created with
- * their default values. Also, if this class is the base PC type
- * and does not declared a clone method, one will be added.
+ * enhanced to correctly replace the <code>pcStateManager</code>
+ * instance fields of any clone created with their default values.
+ * Also, if this class is the base PC type and does not declared
+ * a clone method, one will be added.
*/
private void addCloningCode() {
if (_meta.getPCSuperclass() != null)
@@ -2781,12 +2748,6 @@
code.constant().setNull();
code.putfield().setField(SM, SMTYPE);
- // ((<type>) clone).pcFlags = 0;
- code.dup();
- code.checkcast().setType(_pc);
- code.constant().setValue(PersistenceCapable.READ_WRITE_OK);
- code.putfield().setField(PRE + "Flags", byte.class);
-
// if modified, increase stack
code.calculateMaxStack();
code.calculateMaxLocals();
@@ -2860,23 +2821,10 @@
return;
}
- // dfg: if (inst.pcFlags <= 0) return inst.<field>;
- JumpInstruction ifins = null;
- if ((fieldFlag & PersistenceCapable.CHECK_READ) > 0) {
- loadManagedInstance(code, true);
- code.getfield().setField(PRE + "Flags", byte.class);
- ifins = code.ifgt();
- loadManagedInstance(code, true);
- addGetManagedValueCode(code, fmd);
- code.xreturn().setType(fmd.getDeclaredType());
- }
-
// if (inst.pcStateManager == null) return inst.<field>;
Instruction ins = loadManagedInstance(code, true);
- if (ifins != null)
- ifins.setTarget(ins);
code.getfield().setField(SM, SMTYPE);
- ifins = code.ifnonnull();
+ JumpInstruction ifins = code.ifnonnull();
loadManagedInstance(code, true);
addGetManagedValueCode(code, fmd);
code.xreturn().setType(fmd.getDeclaredType());
@@ -2919,25 +2867,10 @@
// PCEnhancer uses static methods; PCSubclasser does not.
int firstParamOffset = getAccessorParameterOffset();
- // dfg: if (inst.pcFlags == 0) inst.<field> = value;
- JumpInstruction ifins = null;
- byte fieldFlag = getFieldFlag(fmd);
- if ((fieldFlag & PersistenceCapable.CHECK_WRITE) > 0) {
- loadManagedInstance(code, true);
- code.getfield().setField(PRE + "Flags", byte.class);
- ifins = code.ifne();
- loadManagedInstance(code, true);
- code.xload().setParam(firstParamOffset);
- addSetManagedValueCode(code, fmd);
- code.vreturn();
- }
-
// if (inst.pcStateManager == null) inst.<field> = value;
Instruction ins = loadManagedInstance(code, true);
- if (ifins != null)
- ifins.setTarget(ins);
code.getfield().setField(SM, SMTYPE);
- ifins = code.ifnonnull();
+ JumpInstruction ifins = code.ifnonnull();
loadManagedInstance(code, true);
code.xload().setParam(firstParamOffset);
addSetManagedValueCode(code, fmd);
@@ -3505,6 +3438,19 @@
newsetter.makePrivate();
transferCodeAttributes(setter, newsetter);
return setter;
+ }
+
+ private void addGetEnhancementContractVersionMethod() {
+ // public int getEnhancementContractVersion()
+ BCMethod method = _pc.declareMethod(PRE +
+ "GetEnhancementContractVersion", int.class, null);
+ method.makePublic();
+ Code code = method.getCode(true);
+ code.constant().setValue(ENHANCER_VERSION);
+ code.ireturn();
+ code.calculateMaxStack();
+ code.calculateMaxLocals();
+ return;
}
/**
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PersistenceCapable.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PersistenceCapable.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PersistenceCapable.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PersistenceCapable.java Mon Feb 26 12:46:03 2007
@@ -34,6 +34,8 @@
public static final Object DESERIALIZED = new Object();
+ int pcGetEnhancementContractVersion();
+
Object pcGetGenericContext();
StateManager pcGetStateManager();
@@ -47,8 +49,6 @@
void pcReplaceField(int fieldIndex);
void pcReplaceFields(int[] fieldIndex);
-
- void pcReplaceFlags();
void pcCopyFields(Object fromObject, int[] fields);
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/StateManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/StateManager.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/StateManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/StateManager.java Mon Feb 26 12:46:03 2007
@@ -41,11 +41,6 @@
public Object getPCPrimaryKey(Object oid, int field);
/**
- * Change internal flags.
- */
- public byte replaceFlags();
-
- /**
* Change state manager.
*/
public StateManager replaceStateManager(StateManager sm);
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedStateManager.java Mon Feb 26 12:46:03 2007
@@ -334,10 +334,6 @@
return null;
}
- public byte replaceFlags() {
- return PersistenceCapable.MEDIATE_WRITE;
- }
-
public Object getPCPrimaryKey(Object oid, int field) {
throw new UnsupportedOperationException();
}
@@ -939,5 +935,5 @@
public void unlock() {
if (_lock != null)
_lock.unlock();
- }
+ }
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedValueStateManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedValueStateManager.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedValueStateManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachedValueStateManager.java Mon Feb 26 12:46:03 2007
@@ -403,10 +403,6 @@
throw new UnsupportedOperationException();
}
- public byte replaceFlags() {
- throw new UnsupportedOperationException();
- }
-
public StateManager replaceStateManager(StateManager sm) {
return sm;
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ObjectIdStateManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ObjectIdStateManager.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ObjectIdStateManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ObjectIdStateManager.java Mon Feb 26 12:46:03 2007
@@ -71,10 +71,6 @@
throw new UnsupportedOperationException();
}
- public byte replaceFlags() {
- throw new UnsupportedOperationException();
- }
-
public StateManager replaceStateManager(StateManager sm) {
throw new UnsupportedOperationException();
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Mon Feb 26 12:46:03 2007
@@ -287,7 +287,6 @@
}
pc.pcSetDetachedState(null);
- pc.pcReplaceFlags();
_pc = pc;
if (_oid instanceof OpenJPAId)
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ProxySetupStateManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ProxySetupStateManager.java?view=diff&rev=511998&r1=511997&r2=511998
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ProxySetupStateManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ProxySetupStateManager.java Mon Feb 26 12:46:03 2007
@@ -85,10 +85,6 @@
throw new UnsupportedOperationException();
}
- public byte replaceFlags() {
- throw new InternalException();
- }
-
public StateManager replaceStateManager(StateManager sm) {
throw new InternalException();
}