1.1 --- a/mdr/src/org/netbeans/mdr/handlers/BaseObjectHandler.java Thu Oct 09 20:18:25 2003 +0000
1.2 +++ b/mdr/src/org/netbeans/mdr/handlers/BaseObjectHandler.java Fri Oct 10 13:17:48 2003 +0000
1.3 @@ -18,6 +18,7 @@
1.4
1.5 import javax.jmi.model.Namespace;
1.6 import javax.jmi.reflect.*;
1.7 +import javax.jmi.reflect.RefObject;
1.8
1.9 import org.netbeans.mdr.storagemodel.*;
1.10 import org.netbeans.mdr.persistence.MOFID;
1.11 @@ -297,7 +298,7 @@
1.12 // The storable hard reference is used only by transient objects
1.13 // to prevent garbage collection.
1.14 // For non transient objects it is null during the whole life cycle.
1.15 - private StorableBaseObject storable;
1.16 + private final StorableBaseObject storable;
1.17
1.18 /* --------------------------------------------------------------------- */
1.19 /* -- Constructor(s) --------------------------------------------------- */
1.20 @@ -308,20 +309,20 @@
1.21 this.mofId = storable.getMofId();
1.22 //this.storableDelegate = storable;
1.23 this.mdrStorage = storable.getMdrStorage();
1.24 + StorableBaseObject tempStorable;
1.25 try {
1.26 if (storable instanceof StorableObject &&
1.27 (((StorableObject)storable).getClassProxy ().isTransient ()) ||
1.28 (storable.getClass().getName().equals("org.netbeans.modules.classmodel.jmiimpl.physical.DeferredObject")) // [PENDING]
1.29 ) {
1.30 - this.storable = storable;
1.31 - }
1.32 -
1.33 - else {
1.34 - this.storable = null;
1.35 + tempStorable = storable;
1.36 + } else {
1.37 + tempStorable = null;
1.38 }
1.39 } catch (org.netbeans.mdr.persistence.StorageException se) {
1.40 - this.storable = null;
1.41 + tempStorable = null;
1.42 }
1.43 + this.storable = tempStorable;
1.44 }
1.45
1.46 /* --------------------------------------------------------------------- */
1.47 @@ -507,8 +508,8 @@
1.48
1.49 mofId = handler._getDelegate().getMofId();
1.50
1.51 - if (handler.refImmediatePackage() instanceof javax.jmi.model.ModelPackage) {
1.52 - // the object is from a metamodel => we will keep "hard" reference
1.53 + if (handler.refImmediatePackage() instanceof javax.jmi.model.ModelPackage || !(handler instanceof RefObject)) {
1.54 + // the object is from a metamodel or it is a proxy => we will keep "hard" reference
1.55 baseObject = (RefBaseObject) handler;
1.56 } else {
1.57 // the object is not a metamodel object => we will not keep "hard" reference on it
2.1 --- a/mdr/src/org/netbeans/mdr/storagemodel/StorableBaseObject.java Thu Oct 09 20:18:25 2003 +0000
2.2 +++ b/mdr/src/org/netbeans/mdr/storagemodel/StorableBaseObject.java Fri Oct 10 13:17:48 2003 +0000
2.3 @@ -33,6 +33,9 @@
2.4 /** MOFID of this object's outermost package */
2.5 private transient org.netbeans.mdr.persistence.MOFID outermostPackage = null; // value inited lazy on @link #getOutermostPackage method first call
2.6
2.7 + private transient StorablePackage immediatePackageObj = null;
2.8 + private transient StorablePackage outermostPackageObj = null;
2.9 +
2.10 /** Storage reference */
2.11 private transient Storage storage;
2.12
2.13 @@ -101,7 +104,10 @@
2.14 * @return immediate package
2.15 */
2.16 public StorablePackage getImmediatePackage() throws StorageException {
2.17 - return (StorablePackage) getMdrStorage().getObject(immediatePackage);
2.18 + if (immediatePackageObj == null) {
2.19 + immediatePackageObj = (StorablePackage) getMdrStorage().getObject(immediatePackage);
2.20 + }
2.21 + return immediatePackageObj;
2.22 }
2.23
2.24 /** Returns MOFID of immediate package of this object.
2.25 @@ -149,7 +155,10 @@
2.26 * @return outermost package
2.27 */
2.28 public StorablePackage getOutermostPackage() throws StorageException {
2.29 - return (StorablePackage) getMdrStorage().getObject(getOutermostPackageId());
2.30 + if (outermostPackageObj == null) {
2.31 + outermostPackageObj = (StorablePackage) getMdrStorage().getObject(getOutermostPackageId());
2.32 + }
2.33 + return outermostPackageObj;
2.34 }
2.35
2.36 /** Returns MOFID of this object.