Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEsteban Dugueperoux2013-08-06 07:48:26 +0000
committerEike Stepper2013-08-07 06:22:18 +0000
commit843fb3a079b79d19266f614182fa635c829e1243 (patch)
tree008187d8ae6dc2f0a87adbec9b44458c5f73ee15
parent768ac9122ff2cb4abbc7cdc92261de7aa3d0e8a1 (diff)
downloadcdo-843fb3a079b79d19266f614182fa635c829e1243.tar.gz
cdo-843fb3a079b79d19266f614182fa635c829e1243.tar.xz
cdo-843fb3a079b79d19266f614182fa635c829e1243.zip
[414532] "IllegalArgumentException: id is null on" on
ResourceSet.getResource() with connection aware URI with prefetch query https://bugs.eclipse.org/bugs/show_bug.cgi?id=412767
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_412767_Test.java118
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java30
2 files changed, 133 insertions, 15 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_412767_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_412767_Test.java
new file mode 100644
index 0000000000..9992d044d1
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_412767_Test.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2013 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Esteban Dugueperoux - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.bugzilla;
+
+import org.eclipse.emf.cdo.CDOState;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.eresource.CDOResourceFactory;
+import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.config.ISessionConfig;
+import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
+import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.tests.model1.Customer;
+import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
+import org.eclipse.emf.cdo.tests.model1.SalesOrder;
+import org.eclipse.emf.cdo.tests.model1.Supplier;
+import org.eclipse.emf.cdo.util.CDOURIData;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.Resource.Factory.Registry;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import java.util.Collections;
+
+/**
+ * Bug 412767: "IllegalArgumentException: id is null on" on ResourceSet.getResource() with connection aware URI with prefetch query.
+ *
+ * @author Esteban Dugueperoux
+ */
+@Requires(ISessionConfig.CAPABILITY_NET4J_TCP)
+public class Bugzilla_412767_Test extends AbstractCDOTest
+{
+ public void testConnectionAwareURIWithPrefetch() throws Exception
+ {
+ getRepository();
+
+ Registry registry = Resource.Factory.Registry.INSTANCE;
+ registry.getProtocolToFactoryMap().put(CDONet4jUtil.PROTOCOL_TCP, CDOResourceFactory.INSTANCE);
+
+ try
+ {
+ URI sharedResourceURI = createRemoteResource();
+ URI sharedResourceURIWithPrefetch = sharedResourceURI.appendQuery(sharedResourceURI.query() + "&"
+ + CDOResource.PREFETCH_PARAMETER + "=true");
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOResource sharedResource = (CDOResource)resourceSet.getResource(sharedResourceURIWithPrefetch, true);
+ assertEquals(CDOState.PROXY, sharedResource.cdoState());
+ }
+ finally
+ {
+ registry.getProtocolToFactoryMap().remove(CDONet4jUtil.PROTOCOL_TCP);
+ }
+ }
+
+ public void testConnectionAwareURIWithPrefetchAfter() throws Exception
+ {
+ getRepository();
+
+ Registry registry = Resource.Factory.Registry.INSTANCE;
+ registry.getProtocolToFactoryMap().put(CDONet4jUtil.PROTOCOL_TCP, CDOResourceFactory.INSTANCE);
+
+ try
+ {
+ URI sharedResourceURI = createRemoteResource();
+ ResourceSet resourceSet = new ResourceSetImpl();
+ CDOResource sharedResource = (CDOResource)resourceSet.getResource(sharedResourceURI, true);
+ sharedResource.cdoPrefetch(CDORevision.DEPTH_INFINITE);
+ assertEquals(CDOState.PROXY, sharedResource.cdoState());
+ }
+ finally
+ {
+ registry.getProtocolToFactoryMap().remove(CDONet4jUtil.PROTOCOL_TCP);
+ }
+ }
+
+ private URI createRemoteResource() throws Exception
+ {
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ URI sharedResourceURI = URI.createURI(
+ CDONet4jUtil.PROTOCOL_TCP + "://localhost:2036/" + RepositoryConfig.REPOSITORY_NAME
+ + getResourcePath("/sharedResource")).appendQuery(CDOURIData.TRANSACTIONAL_PARAMETER + "=true");
+ Resource sharedResource = resourceSet.createResource(sharedResourceURI);
+
+ Company sharedCompany = getModel1Factory().createCompany();
+ sharedCompany.setName("sharedCompany");
+
+ Customer sharedCustomer = getModel1Factory().createCustomer();
+ sharedCustomer.setName("sharedCustomer");
+
+ Supplier sharedSupplier = getModel1Factory().createSupplier();
+ sharedSupplier.setName("sharedSupplier");
+
+ SalesOrder sharedSalesOrder = getModel1Factory().createSalesOrder();
+ PurchaseOrder sharedPurchaseOrder = getModel1Factory().createPurchaseOrder();
+
+ sharedCompany.getCustomers().add(sharedCustomer);
+ sharedCompany.getSuppliers().add(sharedSupplier);
+ sharedCompany.getSalesOrders().add(sharedSalesOrder);
+ sharedCompany.getPurchaseOrders().add(sharedPurchaseOrder);
+
+ sharedResource.getContents().add(sharedCompany);
+ sharedResource.save(Collections.emptyMap());
+ return sharedResourceURI;
+ }
+}
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 ee7f72bdc8..67fff423a7 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
@@ -1057,6 +1057,21 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements InternalCDOR
}
}
+ String query = initialURI.query();
+ if (query != null && query.length() != 0)
+ {
+ Map<String, String> parameters = CDOURIUtil.getParameters(query);
+ String value = parameters.get(CDOResource.PREFETCH_PARAMETER);
+ if (value != null)
+ {
+ boolean prefetch = Boolean.parseBoolean(value);
+ if (prefetch)
+ {
+ cdoPrefetch(CDORevision.DEPTH_INFINITE);
+ }
+ }
+ }
+
Notification notification = setLoaded(true);
if (notification != null)
{
@@ -1524,21 +1539,6 @@ public class CDOResourceImpl extends CDOResourceLeafImpl implements InternalCDOR
viewProvider = pair.getElement2();
}
}
-
- String query = getURI().query();
- if (query != null && query.length() != 0)
- {
- Map<String, String> parameters = CDOURIUtil.getParameters(query);
- String value = parameters.get(CDOResource.PREFETCH_PARAMETER);
- if (value != null)
- {
- boolean prefetch = Boolean.parseBoolean(value);
- if (prefetch)
- {
- cdoPrefetch(CDORevision.DEPTH_INFINITE);
- }
- }
- }
}
if (eNotificationRequired())

Back to the top