Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2014-03-08 09:44:54 +0000
committerEike Stepper2014-03-08 11:01:50 +0000
commitccd53285217afb0f3cfdbfea336b82e9ffc1daae (patch)
treee91c1b022edfc46fcb2515659f6bcbf7a1a06315
parent63144000028802be2b39f2d9a2721d374203e5ce (diff)
downloadcdo-ccd53285217afb0f3cfdbfea336b82e9ffc1daae.tar.gz
cdo-ccd53285217afb0f3cfdbfea336b82e9ffc1daae.tar.xz
cdo-ccd53285217afb0f3cfdbfea336b82e9ffc1daae.zip
[345431] Make it possible to preregister epackages
https://bugs.eclipse.org/bugs/show_bug.cgi?id=345431
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java50
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java2
3 files changed, 34 insertions, 20 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
index 02744d06d5..f90b37fe27 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
@@ -1837,32 +1837,45 @@ public class Repository extends Container<Object> implements InternalRepository
}
}
- public void initSystemPackages()
+ public void initSystemPackages(boolean firstStart)
{
- List<InternalCDOPackageUnit> units = new ArrayList<InternalCDOPackageUnit>();
- units.add(initPackage(EcorePackage.eINSTANCE));
- units.add(initPackage(EresourcePackage.eINSTANCE));
- units.add(initPackage(EtypesPackage.eINSTANCE));
+ IStoreAccessor writer = store.getWriter(null);
+ StoreThreadLocal.setAccessor(writer);
- if (initialPackages != null)
+ try
{
- for (EPackage initialPackage : initialPackages)
+ List<InternalCDOPackageUnit> list = new ArrayList<InternalCDOPackageUnit>();
+ if (firstStart)
{
- if (!packageRegistry.containsKey(initialPackage.getNsURI()))
+ list.add(initPackage(EcorePackage.eINSTANCE));
+ list.add(initPackage(EresourcePackage.eINSTANCE));
+ list.add(initPackage(EtypesPackage.eINSTANCE));
+ }
+
+ boolean nonSystemPackages = false;
+ if (initialPackages != null)
+ {
+ for (EPackage initialPackage : initialPackages)
{
- units.add(initPackage(initialPackage));
+ if (!packageRegistry.containsKey(initialPackage.getNsURI()))
+ {
+ list.add(initPackage(initialPackage));
+ nonSystemPackages = true;
+ }
}
}
- }
- IStoreAccessor writer = store.getWriter(null);
- StoreThreadLocal.setAccessor(writer);
+ if (nonSystemPackages && !firstStart)
+ {
+ OM.LOG.info("Initial packages are about to be pre-registered. They may not become part of replications.");
+ }
- try
- {
- InternalCDOPackageUnit[] systemUnits = units.toArray(new InternalCDOPackageUnit[units.size()]);
- writer.writePackageUnits(systemUnits, new Monitor());
- writer.commit(new Monitor());
+ if (!list.isEmpty())
+ {
+ InternalCDOPackageUnit[] initialUnits = list.toArray(new InternalCDOPackageUnit[list.size()]);
+ writer.writePackageUnits(initialUnits, new Monitor());
+ writer.commit(new Monitor());
+ }
}
finally
{
@@ -2062,11 +2075,12 @@ public class Repository extends Container<Object> implements InternalRepository
if (store.isFirstStart())
{
- initSystemPackages();
+ initSystemPackages(true);
initRootResource();
}
else
{
+ initSystemPackages(false);
readPackageUnits();
readRootResource();
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java
index 8d0f69fce0..666eefb980 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerImporter.java
@@ -173,7 +173,7 @@ public abstract class CDOServerImporter
repository.initMainBranch(branchManager, created);
LifecycleUtil.activate(branchManager);
- repository.initSystemPackages();
+ repository.initSystemPackages(true);
repository.setRootResourceID(root);
// InternalSession session = repository.getSessionManager().openSession(null);
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java
index a35639c226..d998289829 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/spi/server/InternalRepository.java
@@ -259,7 +259,7 @@ public interface InternalRepository extends IRepository, PackageProcessor, Packa
/**
* @since 4.0
*/
- public void initSystemPackages();
+ public void initSystemPackages(boolean firstStart);
/**
* @since 4.0

Back to the top