Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2011-01-04 11:53:33 +0000
committerEike Stepper2011-01-04 11:53:33 +0000
commitccf1832bdbd4b97ed12e78b0a78de6624affa07e (patch)
tree6d0f6c3e05f36e94d79522f67b3ef9375ccda106 /plugins/org.eclipse.emf.cdo/src
parent8d0e942cadedaa0c44bed06f1eaca27d734a7aef (diff)
downloadcdo-ccf1832bdbd4b97ed12e78b0a78de6624affa07e.tar.gz
cdo-ccf1832bdbd4b97ed12e78b0a78de6624affa07e.tar.xz
cdo-ccf1832bdbd4b97ed12e78b0a78de6624affa07e.zip
[333459] Client gets a duplicate OID error
https://bugs.eclipse.org/bugs/show_bug.cgi?id=333459
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java35
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties4
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java19
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java5
4 files changed, 42 insertions, 21 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
index 475af1142d..0ef79217d3 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
@@ -779,18 +779,18 @@ public class CDOResourceImpl extends CDOResourceNodeImpl implements CDOResource,
if (!FSMUtil.isTransient(this))
{
CDOID id = cdoID();
- if (id == null || !view.isObjectRegistered(id))
+ if (id == null)
{
- try
- {
- view.registerProxyResource(this);
- }
- catch (Exception ex)
+ registerProxy(view);
+ }
+ else
+ {
+ synchronized (view.getObjectsLock())
{
- OM.LOG.error(ex);
- setExisting(false);
- cdoInternalSetState(CDOState.TRANSIENT);
- throw new IOWrappedException(ex);
+ if (!view.isObjectRegistered(id))
+ {
+ registerProxy(view);
+ }
}
}
}
@@ -854,6 +854,21 @@ public class CDOResourceImpl extends CDOResourceNodeImpl implements CDOResource,
}
}
+ private void registerProxy(InternalCDOView view) throws IOWrappedException
+ {
+ try
+ {
+ view.registerProxyResource(this);
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ setExisting(false);
+ cdoInternalSetState(CDOState.TRANSIENT);
+ throw new IOWrappedException(ex);
+ }
+ }
+
/**
* Returns the URI converter. This typically gets the {@link ResourceSet#getURIConverter converter} from the
* {@link #getResourceSet containing} resource set, but it calls {@link #getDefaultURIConverter} when there is no
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties
index c32252bd6a..34d409fef4 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/messages/messages.properties
@@ -44,11 +44,11 @@ CDOViewImpl.16=Unable to provideCDOID: {0}
CDOViewImpl.17=ID not registered: {0}
CDOViewImpl.18=CDO view is read-only: {0}
CDOViewImpl.2=Can not find {0}
-CDOViewImpl.20=Duplicate ID: {0}
+CDOViewImpl.20=Object was already registered: {0}
CDOViewImpl.26=Invalid view type: {0}
CDOViewImpl.27=Object {0} does not belong to this view
CDOViewImpl.29=Unknown referenceType
-CDOViewImpl.30=Different objects have been registered for {0}
+CDOViewImpl.30=Different object was registered for {0}
CDOViewImpl.3=name == null
CDOViewImpl.4=Expected folder for id = {0}
CDOViewImpl.5=Node {0} not found
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
index 5aef66b1ec..c31320753f 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java
@@ -301,6 +301,11 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi
return stateLock;
}
+ public Object getObjectsLock()
+ {
+ return objects;
+ }
+
public boolean isDirty()
{
return false;
@@ -1074,18 +1079,14 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi
if (old != null)
{
- if (CDOUtil.isLegacyObject(object))
+ if (old != object)
{
- if (old != object)
- {
- throw new IllegalStateException(MessageFormat.format(Messages.getString("CDOViewImpl.30"), object.cdoID())); //$NON-NLS-1$
- }
-
- OM.LOG.warn("Legacy object has been registered multiple times: " + object);
+ throw new IllegalStateException(MessageFormat.format(Messages.getString("CDOViewImpl.30"), object.cdoID())); //$NON-NLS-1$
}
- else
+
+ if (TRACER.isEnabled())
{
- throw new IllegalStateException(MessageFormat.format(Messages.getString("CDOViewImpl.20"), object)); //$NON-NLS-1$
+ TRACER.format(Messages.getString("CDOViewImpl.20"), old); //$NON-NLS-1$
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
index 1b435f0cac..55db92cd4e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOView.java
@@ -134,4 +134,9 @@ public interface InternalCDOView extends CDOView, CDOIDProvider, ILifecycle
* give them want they need.
*/
public ReentrantLock getStateLock();
+
+ /**
+ * @since 4.0
+ */
+ public Object getObjectsLock();
}

Back to the top