svn commit: r16644 - trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
Tom Morris <[email protected]>
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: tfmorris
Date: 2009-01-17 20:20:07-0800
New Revision: 16644
Modified:
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
Log:
RESOLVED - issue 5634: InvalidObjectException in extent management
http://argouml.tigris.org/issues/show_bug.cgi?id=5634
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java?view=diff&pathrev=16644&r1=16643&r2=16644
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java 2009-01-17 20:20:07-0800
@@ -38,6 +38,7 @@
import javax.jmi.model.ModelPackage;
import javax.jmi.model.MofPackage;
+import javax.jmi.reflect.InvalidObjectException;
import javax.jmi.reflect.RefPackage;
import javax.jmi.xmi.MalformedXMIException;
@@ -202,40 +203,50 @@
}
RefPackage createExtent(String name, boolean readOnly) {
- try {
- UmlPackage extent = (UmlPackage) getRepository().createExtent(name,
- getMofPackage());
- extents.put(extent, Boolean.valueOf(readOnly));
-
- if (!readOnly) {
- // TODO: This will need to change when we support multiple user
- // models.
-
- // Delete the old extent first
- if (umlPackage != null) {
- deleteExtent(umlPackage);
- }
- umlPackage = extent;
- }
- if (LOG.isDebugEnabled()) {
- LOG.debug("Created new " + (readOnly ? "readonly " : "")
- + "extent " + umlPackage);
- LOG.debug("All registered extents = "
- + Arrays.toString(repository.getExtentNames()));
+ synchronized (extents) {
+ try {
+ UmlPackage extent = (UmlPackage) getRepository().createExtent(
+ name, getMofPackage());
+ extents.put(extent, Boolean.valueOf(readOnly));
+
+ if (!readOnly) {
+ // TODO: This will need to change when we support multiple
+ // user
+ // models.
+
+ // Delete the old extent first
+ if (umlPackage != null) {
+ deleteExtent(umlPackage);
+ }
+ umlPackage = extent;
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Created new " + (readOnly ? "readonly " : "")
+ + "extent " + umlPackage);
+ LOG.debug("All registered extents = "
+ + Arrays.toString(repository.getExtentNames()));
+ }
+ return extent;
+ } catch (CreationFailedException e) {
+ LOG.error("Extent creation failed for " + name);
+ return null;
}
- return extent;
- } catch (CreationFailedException e) {
- LOG.error("Extent creation failed for " + name);
- return null;
}
}
void deleteExtent(UmlPackage extent) {
- if (umlPackage.equals(extent)) {
- umlPackage = null;
+ synchronized (extents) {
+ if (extent.equals(umlPackage)) {
+ umlPackage = null;
+ }
+ extents.remove(extent);
+ try {
+ LOG.debug("Deleting extent " + extent);
+ extent.refDelete();
+ } catch (InvalidObjectException e) {
+ LOG.debug("Attempted to delete same extent twice " + extent);
+ }
}
- extents.remove(extent);
- extent.refDelete();
}
Collection<UmlPackage> getExtents() {
@@ -446,20 +457,20 @@
void createDefaultExtent() {
- // Create a default extent for the user UML model. This will get
+ // Create a default extent for the user UML model. This will get
// replaced if a new model is read in from an XMI file.
- umlPackage = (UmlPackage) repository.getExtent(MODEL_EXTENT_NAME);
- if (umlPackage != null) {
- // NOTE: If we switch to a persistent repository like the b-tree
- // repository we'll want to keep the old extent(s) around
- extents.remove(umlPackage);
- umlPackage.refDelete();
- umlPackage = null;
- LOG.debug("MDR Init - UML extent existed - "
- + "deleted it and all UML data");
+ synchronized (extents) {
+ umlPackage = (UmlPackage) repository.getExtent(MODEL_EXTENT_NAME);
+ if (umlPackage != null) {
+ // NOTE: If we switch to a persistent repository like the b-tree
+ // repository we'll want to keep the old extent(s) around
+ deleteExtent(umlPackage);
+ LOG.debug("MDR Init - UML extent existed - "
+ + "deleted it and all UML data");
+ }
+ umlPackage = (UmlPackage) createExtent(MODEL_EXTENT_NAME, false);
+ LOG.debug("Created default extent");
}
- umlPackage = (UmlPackage) createExtent(MODEL_EXTENT_NAME, false);
- LOG.debug("Created default extent");
}
/**
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=1032014
To unsubscribe from this discussion, e-mail: [[email protected]].