From dd2209e1dcdf369d9342f7f6bc0142999c2cac3d Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Mon, 25 Jun 2012 12:41:23 +0200 Subject: [383292] Thread names missing, thread management. https://bugs.eclipse.org/bugs/show_bug.cgi?id=383292 --- .../META-INF/MANIFEST.MF | 68 +-- .../commit/handler/AsyncCommitInfoHandler.java | 122 ++--- .../common/model/CDOPackageRegistryPopulator.java | 324 ++++++------- .../common/revision/AbstractCDORevisionCache.java | 319 +++++++------ .../META-INF/MANIFEST.MF | 6 +- .../emf/cdo/examples/server/DemoServer.java | 324 ++++++------- .../server/syncing/RepositorySynchronizer.java | 2 +- .../eclipse/emf/cdo/server/CDOServerBrowser.java | 2 +- plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF | 52 +- .../eclipse/emf/internal/cdo/view/CDOViewImpl.java | 2 +- .../META-INF/MANIFEST.MF | 10 +- .../net4j/http/internal/server/HTTPAcceptor.java | 528 +++++++++++---------- .../util/concurrent/ExecutorServiceFactory.java | 246 +++++----- plugins/org.eclipse.net4j/META-INF/MANIFEST.MF | 28 +- .../eclipse/internal/net4j/buffer/BufferPool.java | 486 +++++++++---------- .../src/org/eclipse/spi/net4j/Channel.java | 2 +- 16 files changed, 1277 insertions(+), 1244 deletions(-) diff --git a/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF index 1029d2bb75..40ab0374c6 100644 --- a/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.common/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.emf.cdo.common -Bundle-Version: 4.1.0.qualifier +Bundle-Version: 4.1.100.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin @@ -15,21 +15,21 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)";resoluti org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)", org.eclipse.net4j.util;bundle-version="[3.0.0,4.0.0)";visibility:=reexport Import-Package: org.osgi.framework;version="[1.3.0,2.0.0)";resolution:=optional -Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", - org.eclipse.emf.cdo.common.admin;version="4.1.0", - org.eclipse.emf.cdo.common.branch;version="4.1.0", - org.eclipse.emf.cdo.common.commit;version="4.1.0", - org.eclipse.emf.cdo.common.commit.handler;version="4.1.0", - org.eclipse.emf.cdo.common.id;version="4.1.0", - org.eclipse.emf.cdo.common.lob;version="4.1.0", - org.eclipse.emf.cdo.common.lock;version="4.1.0", - org.eclipse.emf.cdo.common.model;version="4.1.0", - org.eclipse.emf.cdo.common.protocol;version="4.1.0", - org.eclipse.emf.cdo.common.revision;version="4.1.0", - org.eclipse.emf.cdo.common.revision.delta;version="4.1.0", - org.eclipse.emf.cdo.common.security;version="4.1.0", - org.eclipse.emf.cdo.common.util;version="4.1.0", - org.eclipse.emf.cdo.internal.common;version="4.1.0"; +Export-Package: org.eclipse.emf.cdo.common;version="4.1.100", + org.eclipse.emf.cdo.common.admin;version="4.1.100", + org.eclipse.emf.cdo.common.branch;version="4.1.100", + org.eclipse.emf.cdo.common.commit;version="4.1.100", + org.eclipse.emf.cdo.common.commit.handler;version="4.1.100", + org.eclipse.emf.cdo.common.id;version="4.1.100", + org.eclipse.emf.cdo.common.lob;version="4.1.100", + org.eclipse.emf.cdo.common.lock;version="4.1.100", + org.eclipse.emf.cdo.common.model;version="4.1.100", + org.eclipse.emf.cdo.common.protocol;version="4.1.100", + org.eclipse.emf.cdo.common.revision;version="4.1.100", + org.eclipse.emf.cdo.common.revision.delta;version="4.1.100", + org.eclipse.emf.cdo.common.security;version="4.1.100", + org.eclipse.emf.cdo.common.util;version="4.1.100", + org.eclipse.emf.cdo.internal.common;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -38,9 +38,9 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.server.net4j, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.internal.common.branch;version="4.1.0";x-friends:="org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.internal.common.bundle;version="4.1.0";x-internal:=true, - org.eclipse.emf.cdo.internal.common.commit;version="4.1.0"; + org.eclipse.emf.cdo.internal.common.branch;version="4.1.100";x-friends:="org.eclipse.emf.cdo.tests", + org.eclipse.emf.cdo.internal.common.bundle;version="4.1.100";x-internal:=true, + org.eclipse.emf.cdo.internal.common.commit;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -49,7 +49,7 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.server.net4j, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.internal.common.id;version="4.1.0"; + org.eclipse.emf.cdo.internal.common.id;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -60,9 +60,9 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.admin, org.eclipse.emf.cdo.server.admin", - org.eclipse.emf.cdo.internal.common.lock;version="4.1.0";x-internal:=true, - org.eclipse.emf.cdo.internal.common.messages;version="4.1.0";x-internal:=true, - org.eclipse.emf.cdo.internal.common.model;version="4.1.0"; + org.eclipse.emf.cdo.internal.common.lock;version="4.1.100";x-internal:=true, + org.eclipse.emf.cdo.internal.common.messages;version="4.1.100";x-internal:=true, + org.eclipse.emf.cdo.internal.common.model;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -71,7 +71,7 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.server.net4j, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.internal.common.protocol;version="4.1.0"; + org.eclipse.emf.cdo.internal.common.protocol;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -80,7 +80,7 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.server.net4j, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.internal.common.revision;version="4.1.0"; + org.eclipse.emf.cdo.internal.common.revision;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -89,7 +89,7 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.server.net4j, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.internal.common.revision.delta;version="4.1.0"; + org.eclipse.emf.cdo.internal.common.revision.delta;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.common, org.eclipse.emf.cdo.common.db, org.eclipse.emf.cdo, @@ -98,11 +98,11 @@ Export-Package: org.eclipse.emf.cdo.common;version="4.1.0", org.eclipse.emf.cdo.server.net4j, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests", - org.eclipse.emf.cdo.spi.common;version="4.1.0", - org.eclipse.emf.cdo.spi.common.admin;version="4.1.0", - org.eclipse.emf.cdo.spi.common.branch;version="4.1.0", - org.eclipse.emf.cdo.spi.common.commit;version="4.1.0", - org.eclipse.emf.cdo.spi.common.id;version="4.1.0", - org.eclipse.emf.cdo.spi.common.lock;version="4.1.0", - org.eclipse.emf.cdo.spi.common.model;version="4.1.0", - org.eclipse.emf.cdo.spi.common.revision;version="4.1.0" + org.eclipse.emf.cdo.spi.common;version="4.1.100", + org.eclipse.emf.cdo.spi.common.admin;version="4.1.100", + org.eclipse.emf.cdo.spi.common.branch;version="4.1.100", + org.eclipse.emf.cdo.spi.common.commit;version="4.1.100", + org.eclipse.emf.cdo.spi.common.id;version="4.1.100", + org.eclipse.emf.cdo.spi.common.lock;version="4.1.100", + org.eclipse.emf.cdo.spi.common.model;version="4.1.100", + org.eclipse.emf.cdo.spi.common.revision;version="4.1.100" diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/handler/AsyncCommitInfoHandler.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/handler/AsyncCommitInfoHandler.java index 441ce866fe..a48309fb36 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/handler/AsyncCommitInfoHandler.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/handler/AsyncCommitInfoHandler.java @@ -1,58 +1,64 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.emf.cdo.common.commit.handler; - -import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; -import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; -import org.eclipse.emf.cdo.internal.common.bundle.OM; - -import org.eclipse.net4j.util.concurrent.QueueWorker; - -/** - * A {@link CDOCommitInfoHandler commit info handler} that asynchronously delegates {@link CDOCommitInfo commit infos} - * to another handler. - * - * @author Eike Stepper - * @since 4.0 - */ -public class AsyncCommitInfoHandler extends QueueWorker implements CDOCommitInfoHandler -{ - private CDOCommitInfoHandler delegate; - - public AsyncCommitInfoHandler(CDOCommitInfoHandler delegate) - { - this.delegate = delegate; - } - - public void handleCommitInfo(CDOCommitInfo commitInfo) - { - addWork(commitInfo); - } - - @Override - protected void work(WorkContext context, CDOCommitInfo commitInfo) - { - try - { - delegate.handleCommitInfo(commitInfo); - } - catch (Exception ex) - { - OM.LOG.error(ex); - } - } - - @Override - protected boolean doRemainingWorkBeforeDeactivate() - { - return true; - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.cdo.common.commit.handler; + +import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; +import org.eclipse.emf.cdo.internal.common.bundle.OM; + +import org.eclipse.net4j.util.concurrent.QueueWorker; + +/** + * A {@link CDOCommitInfoHandler commit info handler} that asynchronously delegates {@link CDOCommitInfo commit infos} + * to another handler. + * + * @author Eike Stepper + * @since 4.0 + */ +public class AsyncCommitInfoHandler extends QueueWorker implements CDOCommitInfoHandler +{ + private CDOCommitInfoHandler delegate; + + public AsyncCommitInfoHandler(CDOCommitInfoHandler delegate) + { + this.delegate = delegate; + } + + public void handleCommitInfo(CDOCommitInfo commitInfo) + { + addWork(commitInfo); + } + + @Override + protected void work(WorkContext context, CDOCommitInfo commitInfo) + { + try + { + delegate.handleCommitInfo(commitInfo); + } + catch (Exception ex) + { + OM.LOG.error(ex); + } + } + + @Override + protected boolean doRemainingWorkBeforeDeactivate() + { + return true; + } + + @Override + protected String getThreadName() + { + return "CDOAsyncCommitInfoHandler"; + } +} diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageRegistryPopulator.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageRegistryPopulator.java index 26e11b8b96..1157bf5b08 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageRegistryPopulator.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOPackageRegistryPopulator.java @@ -1,159 +1,165 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.emf.cdo.common.model; - -import org.eclipse.net4j.util.concurrent.Worker; - -import org.eclipse.emf.ecore.EFactory; -import org.eclipse.emf.ecore.EPackage; - -import java.util.Map.Entry; - -/** - * Populates a {@link #getTarget() target} package registry by asynchronously polling a {@link #getSource() source} - * package registry for new {@link EPackage} registrations. - * - * @author Eike Stepper - * @since 2.0 - * @apiviz.uses {@link CDOPackageRegistryPopulator.Descriptor} - - creates - * @apiviz.uses {@link CDOPackageRegistry} - - populates - * @apiviz.uses {@link org.eclipse.emf.ecore.EPackage.Registry} - - polls - */ -public class CDOPackageRegistryPopulator extends Worker -{ - public static final int DEFAULT_SOURCE_POLL_INTERVAL = 5000; - - private long sourcePollInterval = DEFAULT_SOURCE_POLL_INTERVAL; - - private EPackage.Registry source; - - private CDOPackageRegistry target; - - public CDOPackageRegistryPopulator(CDOPackageRegistry target) - { - this(EPackage.Registry.INSTANCE, target); - } - - public CDOPackageRegistryPopulator(EPackage.Registry source, CDOPackageRegistry target) - { - this.source = source; - this.target = target; - } - - public EPackage.Registry getSource() - { - return source; - } - - public CDOPackageRegistry getTarget() - { - return target; - } - - public long getSourcePollInterval() - { - return sourcePollInterval; - } - - public void setSourcePollInterval(long sourcePollInterval) - { - this.sourcePollInterval = sourcePollInterval; - } - - @Override - protected void work(WorkContext context) throws Exception - { - doWork(); - context.nextWork(getSourcePollInterval()); - } - - protected void doWork() - { - populate(getSource(), getTarget()); - } - - @Override - protected void doActivate() throws Exception - { - doWork(); - super.doActivate(); - } - - public static boolean populate(CDOPackageRegistry target) - { - return populate(EPackage.Registry.INSTANCE, target); - } - - public static boolean populate(EPackage.Registry source, CDOPackageRegistry target) - { - boolean populated = false; - while (populateFirstMatch(source, target)) - { - populated = true; - } - - return populated; - } - - private static boolean populateFirstMatch(EPackage.Registry source, CDOPackageRegistry target) - { - for (Entry entry : source.entrySet()) - { - String nsURI = entry.getKey(); - if (!target.containsKey(nsURI)) - { - target.put(nsURI, new Descriptor(source, nsURI)); - return true; - } - } - - return false; - } - - /** - * A package {@link org.eclipse.emf.ecore.EPackage.Descriptor descriptor} that resolves {@link EPackage packages} from - * a {@link #getSource() source } package registry. - * - * @author Eike Stepper - */ - public static class Descriptor implements EPackage.Descriptor - { - private EPackage.Registry source; - - private String nsURI; - - public Descriptor(EPackage.Registry source, String nsURI) - { - this.source = source; - this.nsURI = nsURI; - } - - public EPackage.Registry getSource() - { - return source; - } - - public String getNsURI() - { - return nsURI; - } - - public EFactory getEFactory() - { - return source.getEFactory(nsURI); - } - - public EPackage getEPackage() - { - return source.getEPackage(nsURI); - } - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.cdo.common.model; + +import org.eclipse.net4j.util.concurrent.Worker; + +import org.eclipse.emf.ecore.EFactory; +import org.eclipse.emf.ecore.EPackage; + +import java.util.Map.Entry; + +/** + * Populates a {@link #getTarget() target} package registry by asynchronously polling a {@link #getSource() source} + * package registry for new {@link EPackage} registrations. + * + * @author Eike Stepper + * @since 2.0 + * @apiviz.uses {@link CDOPackageRegistryPopulator.Descriptor} - - creates + * @apiviz.uses {@link CDOPackageRegistry} - - populates + * @apiviz.uses {@link org.eclipse.emf.ecore.EPackage.Registry} - - polls + */ +public class CDOPackageRegistryPopulator extends Worker +{ + public static final int DEFAULT_SOURCE_POLL_INTERVAL = 5000; + + private long sourcePollInterval = DEFAULT_SOURCE_POLL_INTERVAL; + + private EPackage.Registry source; + + private CDOPackageRegistry target; + + public CDOPackageRegistryPopulator(CDOPackageRegistry target) + { + this(EPackage.Registry.INSTANCE, target); + } + + public CDOPackageRegistryPopulator(EPackage.Registry source, CDOPackageRegistry target) + { + this.source = source; + this.target = target; + } + + public EPackage.Registry getSource() + { + return source; + } + + public CDOPackageRegistry getTarget() + { + return target; + } + + public long getSourcePollInterval() + { + return sourcePollInterval; + } + + public void setSourcePollInterval(long sourcePollInterval) + { + this.sourcePollInterval = sourcePollInterval; + } + + @Override + protected void work(WorkContext context) throws Exception + { + doWork(); + context.nextWork(getSourcePollInterval()); + } + + protected void doWork() + { + populate(getSource(), getTarget()); + } + + @Override + protected void doActivate() throws Exception + { + doWork(); + super.doActivate(); + } + + @Override + protected String getThreadName() + { + return "CDOPackageRegistryPopulator"; + } + + public static boolean populate(CDOPackageRegistry target) + { + return populate(EPackage.Registry.INSTANCE, target); + } + + public static boolean populate(EPackage.Registry source, CDOPackageRegistry target) + { + boolean populated = false; + while (populateFirstMatch(source, target)) + { + populated = true; + } + + return populated; + } + + private static boolean populateFirstMatch(EPackage.Registry source, CDOPackageRegistry target) + { + for (Entry entry : source.entrySet()) + { + String nsURI = entry.getKey(); + if (!target.containsKey(nsURI)) + { + target.put(nsURI, new Descriptor(source, nsURI)); + return true; + } + } + + return false; + } + + /** + * A package {@link org.eclipse.emf.ecore.EPackage.Descriptor descriptor} that resolves {@link EPackage packages} from + * a {@link #getSource() source } package registry. + * + * @author Eike Stepper + */ + public static class Descriptor implements EPackage.Descriptor + { + private EPackage.Registry source; + + private String nsURI; + + public Descriptor(EPackage.Registry source, String nsURI) + { + this.source = source; + this.nsURI = nsURI; + } + + public EPackage.Registry getSource() + { + return source; + } + + public String getNsURI() + { + return nsURI; + } + + public EFactory getEFactory() + { + return source.getEFactory(nsURI); + } + + public EPackage getEPackage() + { + return source.getEPackage(nsURI); + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/AbstractCDORevisionCache.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/AbstractCDORevisionCache.java index 43f0cf2f8c..363f2ae540 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/AbstractCDORevisionCache.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/revision/AbstractCDORevisionCache.java @@ -1,156 +1,163 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - * Simon McDuff - bug 201266 - * Simon McDuff - bug 230832 - */ -package org.eclipse.emf.cdo.internal.common.revision; - -import org.eclipse.emf.cdo.common.branch.CDOBranch; -import org.eclipse.emf.cdo.common.id.CDOID; -import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.common.revision.CDORevisionKey; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache; - -import org.eclipse.net4j.util.event.IListener; -import org.eclipse.net4j.util.ref.ReferenceQueueWorker; - -import java.lang.ref.Reference; -import java.lang.ref.ReferenceQueue; -import java.lang.ref.SoftReference; -import java.text.MessageFormat; - -/** - * @author Eike Stepper - */ -public abstract class AbstractCDORevisionCache extends ReferenceQueueWorker implements - InternalCDORevisionCache -{ - private static boolean disableGC; - - public AbstractCDORevisionCache() - { - } - - @Override - protected void work(Reference reference) - { - CDORevisionKey key = (CDORevisionKey)reference; - - CDOID id = key.getID(); - CDOBranch branch = key.getBranch(); - int version = key.getVersion(); - - InternalCDORevision revision = (InternalCDORevision)removeRevision(id, branch.getVersion(version)); - if (revision == null) - { - // Use revision in eviction event - key = revision; - } - - IListener[] listeners = getListeners(); - if (listeners != null) - { - fireEvent(new EvictionEventImpl(this, key), listeners); - } - } - - protected Reference createReference(CDORevision revision) - { - if (disableGC) - { - return new CacheStrongReference((InternalCDORevision)revision); - } - - return new CacheSoftReference((InternalCDORevision)revision, getQueue()); - } - - /** - * @author Eike Stepper - */ - private static final class CacheSoftReference extends SoftReference implements CDORevisionKey - { - private CDOID id; - - private CDOBranch branch; - - private int version; - - public CacheSoftReference(InternalCDORevision revision, ReferenceQueue queue) - { - super(revision, queue); - id = revision.getID(); - branch = revision.getBranch(); - version = revision.getVersion(); - } - - public CDOID getID() - { - return id; - } - - public CDOBranch getBranch() - { - return branch; - } - - public int getVersion() - { - return version; - } - - @Override - public String toString() - { - return MessageFormat.format("{0}:{1}v{2}", getID(), getBranch().getID(), getVersion()); - } - } - - /** - * @author Eike Stepper - */ - private static final class CacheStrongReference extends SoftReference implements CDORevisionKey - { - private CDOID id; - - private CDOBranch branch; - - private int version; - - public CacheStrongReference(InternalCDORevision revision) - { - super(revision); - id = revision.getID(); - branch = revision.getBranch(); - version = revision.getVersion(); - } - - public CDOID getID() - { - return id; - } - - public CDOBranch getBranch() - { - return branch; - } - - public int getVersion() - { - return version; - } - - @Override - public String toString() - { - return MessageFormat.format("{0}:{1}v{2}", getID(), getBranch().getID(), getVersion()); - } - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + * Simon McDuff - bug 201266 + * Simon McDuff - bug 230832 + */ +package org.eclipse.emf.cdo.internal.common.revision; + +import org.eclipse.emf.cdo.common.branch.CDOBranch; +import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionKey; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache; + +import org.eclipse.net4j.util.event.IListener; +import org.eclipse.net4j.util.ref.ReferenceQueueWorker; + +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.text.MessageFormat; + +/** + * @author Eike Stepper + */ +public abstract class AbstractCDORevisionCache extends ReferenceQueueWorker implements + InternalCDORevisionCache +{ + private static boolean disableGC; + + public AbstractCDORevisionCache() + { + setDaemon(true); + } + + @Override + protected void work(Reference reference) + { + CDORevisionKey key = (CDORevisionKey)reference; + + CDOID id = key.getID(); + CDOBranch branch = key.getBranch(); + int version = key.getVersion(); + + InternalCDORevision revision = (InternalCDORevision)removeRevision(id, branch.getVersion(version)); + if (revision == null) + { + // Use revision in eviction event + key = revision; + } + + IListener[] listeners = getListeners(); + if (listeners != null) + { + fireEvent(new EvictionEventImpl(this, key), listeners); + } + } + + protected Reference createReference(CDORevision revision) + { + if (disableGC) + { + return new CacheStrongReference((InternalCDORevision)revision); + } + + return new CacheSoftReference((InternalCDORevision)revision, getQueue()); + } + + @Override + protected String getThreadName() + { + return "CDORevisionCacheCleaner"; + } + + /** + * @author Eike Stepper + */ + private static final class CacheSoftReference extends SoftReference implements CDORevisionKey + { + private CDOID id; + + private CDOBranch branch; + + private int version; + + public CacheSoftReference(InternalCDORevision revision, ReferenceQueue queue) + { + super(revision, queue); + id = revision.getID(); + branch = revision.getBranch(); + version = revision.getVersion(); + } + + public CDOID getID() + { + return id; + } + + public CDOBranch getBranch() + { + return branch; + } + + public int getVersion() + { + return version; + } + + @Override + public String toString() + { + return MessageFormat.format("{0}:{1}v{2}", getID(), getBranch().getID(), getVersion()); + } + } + + /** + * @author Eike Stepper + */ + private static final class CacheStrongReference extends SoftReference implements CDORevisionKey + { + private CDOID id; + + private CDOBranch branch; + + private int version; + + public CacheStrongReference(InternalCDORevision revision) + { + super(revision); + id = revision.getID(); + branch = revision.getBranch(); + version = revision.getVersion(); + } + + public CDOID getID() + { + return id; + } + + public CDOBranch getBranch() + { + return branch; + } + + public int getVersion() + { + return version; + } + + @Override + public String toString() + { + return MessageFormat.format("{0}:{1}v{2}", getID(), getBranch().getID(), getVersion()); + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF index d378eee4f0..4d6673a2d3 100644 --- a/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.examples.server/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.emf.cdo.examples.server; singleton:=true -Bundle-Version: 4.0.100.qualifier +Bundle-Version: 4.0.200.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin @@ -14,7 +14,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", org.eclipse.net4j.jvm;bundle-version="[4.0.0,5.0.0)", org.eclipse.net4j.tcp;bundle-version="[4.0.0,5.0.0)" Import-Package: org.h2.jdbcx;version="[1.0.0,2.0.0)" -Export-Package: org.eclipse.emf.cdo.examples.internal.server;version="4.0.100";x-internal:=true, - org.eclipse.emf.cdo.examples.server;version="4.0.100" +Export-Package: org.eclipse.emf.cdo.examples.internal.server;version="4.0.200";x-internal:=true, + org.eclipse.emf.cdo.examples.server;version="4.0.200" Bundle-Activator: org.eclipse.emf.cdo.examples.internal.server.OM$Activator Bundle-ActivationPolicy: lazy diff --git a/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoServer.java b/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoServer.java index 955efb05e9..17c228c853 100644 --- a/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoServer.java +++ b/plugins/org.eclipse.emf.cdo.examples.server/src/org/eclipse/emf/cdo/examples/server/DemoServer.java @@ -1,159 +1,165 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.emf.cdo.examples.server; - -import org.eclipse.emf.cdo.examples.internal.server.OM; -import org.eclipse.emf.cdo.examples.server.DemoConfiguration.Mode; - -import org.eclipse.net4j.acceptor.IAcceptor; -import org.eclipse.net4j.tcp.TCPUtil; -import org.eclipse.net4j.util.concurrent.Worker; -import org.eclipse.net4j.util.container.IPluginContainer; -import org.eclipse.net4j.util.lifecycle.Lifecycle; -import org.eclipse.net4j.util.lifecycle.LifecycleUtil; -import org.eclipse.net4j.util.om.OMPlatform; -import org.eclipse.net4j.util.om.log.EclipseLoggingBridge; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Eike Stepper - */ -public class DemoServer extends Lifecycle -{ - public static final String PROP_BROWSER_PORT = OM.BUNDLE_ID + ".browser.port"; //$NON-NLS-1$ - - public static final int PORT = 3003; - - public static final int MAX_IDLE_MINUTES = 15; - - public static final long MAX_IDLE_MILLIS = MAX_IDLE_MINUTES * 60 * 1000; - - public static final DemoServer INSTANCE = new DemoServer(); - - private IAcceptor acceptor; - - private Map configs = new HashMap(); - - private Cleaner cleaner = new Cleaner(); - - private DemoServer() - { - } - - public IAcceptor getAcceptor() - { - return acceptor; - } - - public DemoConfiguration[] getConfigs() - { - synchronized (configs) - { - return configs.values().toArray(new DemoConfiguration[configs.size()]); - } - } - - public DemoConfiguration getConfig(String name) - { - synchronized (configs) - { - return configs.get(name); - } - } - - public DemoConfiguration addConfig(Mode mode) - { - DemoConfiguration config = new DemoConfiguration(mode, null); - config.activate(); - - synchronized (configs) - { - configs.put(config.getName(), config); - } - - return config; - } - - @Override - protected void doActivate() throws Exception - { - super.doActivate(); - OMPlatform.INSTANCE.removeLogHandler(EclipseLoggingBridge.INSTANCE); - OM.LOG.info("Demo server starting"); - - IPluginContainer container = IPluginContainer.INSTANCE; - acceptor = TCPUtil.getAcceptor(container, "0.0.0.0:" + PORT); - - String port = OMPlatform.INSTANCE.getProperty(PROP_BROWSER_PORT); - if (port != null) - { - container.getElement("org.eclipse.emf.cdo.server.db.browsers", "default", port); //$NON-NLS-1$ //$NON-NLS-2$ - } - - cleaner.activate(); - OM.LOG.info("Demo server started"); - } - - @Override - protected void doDeactivate() throws Exception - { - OM.LOG.info("Demo server stopping"); - cleaner.deactivate(); - - for (DemoConfiguration config : getConfigs()) - { - config.deactivate(); - } - - configs.clear(); - - if (acceptor != null) - { - LifecycleUtil.deactivate(acceptor); - acceptor = null; - } - - OM.LOG.info("Demo server stopped"); - super.doDeactivate(); - } - - /** - * @author Eike Stepper - */ - private final class Cleaner extends Worker - { - @Override - protected void work(WorkContext context) throws Exception - { - for (DemoConfiguration config : getConfigs()) - { - cleanIfNeeded(config); - } - - context.nextWork(2000L); - } - - protected void cleanIfNeeded(DemoConfiguration config) - { - if (config.getTimeoutMillis() == 0) - { - synchronized (configs) - { - configs.remove(config.getName()); - } - - config.deactivate(); - } - } - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.cdo.examples.server; + +import org.eclipse.emf.cdo.examples.internal.server.OM; +import org.eclipse.emf.cdo.examples.server.DemoConfiguration.Mode; + +import org.eclipse.net4j.acceptor.IAcceptor; +import org.eclipse.net4j.tcp.TCPUtil; +import org.eclipse.net4j.util.concurrent.Worker; +import org.eclipse.net4j.util.container.IPluginContainer; +import org.eclipse.net4j.util.lifecycle.Lifecycle; +import org.eclipse.net4j.util.lifecycle.LifecycleUtil; +import org.eclipse.net4j.util.om.OMPlatform; +import org.eclipse.net4j.util.om.log.EclipseLoggingBridge; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Eike Stepper + */ +public class DemoServer extends Lifecycle +{ + public static final String PROP_BROWSER_PORT = OM.BUNDLE_ID + ".browser.port"; //$NON-NLS-1$ + + public static final int PORT = 3003; + + public static final int MAX_IDLE_MINUTES = 15; + + public static final long MAX_IDLE_MILLIS = MAX_IDLE_MINUTES * 60 * 1000; + + public static final DemoServer INSTANCE = new DemoServer(); + + private IAcceptor acceptor; + + private Map configs = new HashMap(); + + private Cleaner cleaner = new Cleaner(); + + private DemoServer() + { + } + + public IAcceptor getAcceptor() + { + return acceptor; + } + + public DemoConfiguration[] getConfigs() + { + synchronized (configs) + { + return configs.values().toArray(new DemoConfiguration[configs.size()]); + } + } + + public DemoConfiguration getConfig(String name) + { + synchronized (configs) + { + return configs.get(name); + } + } + + public DemoConfiguration addConfig(Mode mode) + { + DemoConfiguration config = new DemoConfiguration(mode, null); + config.activate(); + + synchronized (configs) + { + configs.put(config.getName(), config); + } + + return config; + } + + @Override + protected void doActivate() throws Exception + { + super.doActivate(); + OMPlatform.INSTANCE.removeLogHandler(EclipseLoggingBridge.INSTANCE); + OM.LOG.info("Demo server starting"); + + IPluginContainer container = IPluginContainer.INSTANCE; + acceptor = TCPUtil.getAcceptor(container, "0.0.0.0:" + PORT); + + String port = OMPlatform.INSTANCE.getProperty(PROP_BROWSER_PORT); + if (port != null) + { + container.getElement("org.eclipse.emf.cdo.server.db.browsers", "default", port); //$NON-NLS-1$ //$NON-NLS-2$ + } + + cleaner.activate(); + OM.LOG.info("Demo server started"); + } + + @Override + protected void doDeactivate() throws Exception + { + OM.LOG.info("Demo server stopping"); + cleaner.deactivate(); + + for (DemoConfiguration config : getConfigs()) + { + config.deactivate(); + } + + configs.clear(); + + if (acceptor != null) + { + LifecycleUtil.deactivate(acceptor); + acceptor = null; + } + + OM.LOG.info("Demo server stopped"); + super.doDeactivate(); + } + + /** + * @author Eike Stepper + */ + private final class Cleaner extends Worker + { + @Override + protected String getThreadName() + { + return "DemoServerCleaner"; + } + + @Override + protected void work(WorkContext context) throws Exception + { + for (DemoConfiguration config : getConfigs()) + { + cleanIfNeeded(config); + } + + context.nextWork(2000L); + } + + protected void cleanIfNeeded(DemoConfiguration config) + { + if (config.getTimeoutMillis() == 0) + { + synchronized (configs) + { + configs.remove(config.getName()); + } + + config.deactivate(); + } + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java index d4bba43cf6..175b2e611e 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/syncing/RepositorySynchronizer.java @@ -173,7 +173,7 @@ public class RepositorySynchronizer extends QueueRunner implements InternalRepos @Override protected String getThreadName() { - return "RepositorySynchronizer"; //$NON-NLS-1$ + return "CDORepositorySynchronizer"; //$NON-NLS-1$ } @Override diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java index 690462f755..52d3ab1f3e 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java @@ -338,7 +338,7 @@ public class CDOServerBrowser extends Worker @Override protected String getThreadName() { - return "DBBrowser"; + return "CDOServerBrowser"; } protected void initPages(List pages) diff --git a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF index 77cf7ea5ee..868186ee5d 100644 --- a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.emf.cdo; singleton:=true -Bundle-Version: 4.1.0.qualifier +Bundle-Version: 4.1.100.qualifier Bundle-ClassPath: . Bundle-Vendor: %providerName Bundle-Localization: plugin @@ -13,43 +13,43 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", org.eclipse.emf.ecore;bundle-version="[2.4.0,3.0.0)";visibility:=reexport, org.eclipse.emf.ecore.xmi;bundle-version="[2.4.0,3.0.0)";visibility:=reexport, org.eclipse.emf.cdo.common;bundle-version="[4.0.0,5.0.0)";visibility:=reexport -Export-Package: org.eclipse.emf.cdo;version="4.1.0", - org.eclipse.emf.cdo.eresource;version="4.1.0", - org.eclipse.emf.cdo.eresource.impl;version="4.1.0", - org.eclipse.emf.cdo.eresource.util;version="4.1.0", - org.eclipse.emf.cdo.eresource.validation;version="4.1.0", - org.eclipse.emf.cdo.etypes;version="4.1.0", - org.eclipse.emf.cdo.etypes.impl;version="4.1.0", - org.eclipse.emf.cdo.etypes.util;version="4.1.0", - org.eclipse.emf.cdo.session;version="4.1.0", - org.eclipse.emf.cdo.session.remote;version="4.1.0", - org.eclipse.emf.cdo.transaction;version="4.1.0", - org.eclipse.emf.cdo.util;version="4.1.0", - org.eclipse.emf.cdo.view;version="4.1.0", - org.eclipse.emf.internal.cdo;version="4.1.0", - org.eclipse.emf.internal.cdo.analyzer;version="4.1.0"; +Export-Package: org.eclipse.emf.cdo;version="4.1.100", + org.eclipse.emf.cdo.eresource;version="4.1.100", + org.eclipse.emf.cdo.eresource.impl;version="4.1.100", + org.eclipse.emf.cdo.eresource.util;version="4.1.100", + org.eclipse.emf.cdo.eresource.validation;version="4.1.100", + org.eclipse.emf.cdo.etypes;version="4.1.100", + org.eclipse.emf.cdo.etypes.impl;version="4.1.100", + org.eclipse.emf.cdo.etypes.util;version="4.1.100", + org.eclipse.emf.cdo.session;version="4.1.100", + org.eclipse.emf.cdo.session.remote;version="4.1.100", + org.eclipse.emf.cdo.transaction;version="4.1.100", + org.eclipse.emf.cdo.util;version="4.1.100", + org.eclipse.emf.cdo.view;version="4.1.100", + org.eclipse.emf.internal.cdo;version="4.1.100", + org.eclipse.emf.internal.cdo.analyzer;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui", - org.eclipse.emf.internal.cdo.bundle;version="4.1.0";x-friends:="org.eclipse.emf.cdo.ui", - org.eclipse.emf.internal.cdo.messages;version="4.1.0";x-internal:=true, - org.eclipse.emf.internal.cdo.object;version="4.1.0"; + org.eclipse.emf.internal.cdo.bundle;version="4.1.100";x-friends:="org.eclipse.emf.cdo.ui", + org.eclipse.emf.internal.cdo.messages;version="4.1.100";x-internal:=true, + org.eclipse.emf.internal.cdo.object;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.ui.ide", - org.eclipse.emf.internal.cdo.query;version="4.1.0"; + org.eclipse.emf.internal.cdo.query;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.tests.objectivity", - org.eclipse.emf.internal.cdo.session;version="4.1.0"; + org.eclipse.emf.internal.cdo.session;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, @@ -57,30 +57,30 @@ Export-Package: org.eclipse.emf.cdo;version="4.1.0", org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.team, org.eclipse.emf.cdo.ui.admin", - org.eclipse.emf.internal.cdo.session.remote;version="4.1.0"; + org.eclipse.emf.internal.cdo.session.remote;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui", - org.eclipse.emf.internal.cdo.transaction;version="4.1.0"; + org.eclipse.emf.internal.cdo.transaction;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui", - org.eclipse.emf.internal.cdo.util;version="4.1.0"; + org.eclipse.emf.internal.cdo.util;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui", - org.eclipse.emf.internal.cdo.view;version="4.1.0"; + org.eclipse.emf.internal.cdo.view;version="4.1.100"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, org.eclipse.emf.cdo.ui, org.eclipse.emf.cdo.ui.ide", - org.eclipse.emf.spi.cdo;version="4.1.0" + org.eclipse.emf.spi.cdo;version="4.1.100" Bundle-ActivationPolicy: lazy diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java index 70c743636f..93804818d4 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOViewImpl.java @@ -863,7 +863,7 @@ public class CDOViewImpl extends AbstractCDOView @Override protected String getThreadName() { - return "InvalidationRunner-" + CDOViewImpl.this; //$NON-NLS-1$ + return "CDOInvalidationRunner-" + CDOViewImpl.this; //$NON-NLS-1$ } @Override diff --git a/plugins/org.eclipse.net4j.http.server/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j.http.server/META-INF/MANIFEST.MF index 00980bcbda..8af8ced103 100644 --- a/plugins/org.eclipse.net4j.http.server/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.net4j.http.server/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.net4j.http.server;singleton:=true -Bundle-Version: 4.0.100.qualifier +Bundle-Version: 4.0.200.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin @@ -14,7 +14,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)";resoluti org.eclipse.equinox.http.registry;bundle-version="[1.0.0,2.0.0)" Import-Package: javax.servlet;version="[2.3.0,3.0.0)", javax.servlet.http;version="[2.3.0,3.0.0)" -Export-Package: org.eclipse.net4j.http.internal.server;version="4.0.100";x-friends:="org.eclipse.net4j.http.tests,org.eclipse.net4j.defs", - org.eclipse.net4j.http.internal.server.bundle;version="4.0.100";x-internal:=true, - org.eclipse.net4j.http.internal.server.messages;version="4.0.100";x-internal:=true, - org.eclipse.net4j.http.server;version="4.0.100" +Export-Package: org.eclipse.net4j.http.internal.server;version="4.0.200";x-friends:="org.eclipse.net4j.http.tests,org.eclipse.net4j.defs", + org.eclipse.net4j.http.internal.server.bundle;version="4.0.200";x-internal:=true, + org.eclipse.net4j.http.internal.server.messages;version="4.0.200";x-internal:=true, + org.eclipse.net4j.http.server;version="4.0.200" diff --git a/plugins/org.eclipse.net4j.http.server/src/org/eclipse/net4j/http/internal/server/HTTPAcceptor.java b/plugins/org.eclipse.net4j.http.server/src/org/eclipse/net4j/http/internal/server/HTTPAcceptor.java index 933b1eef39..57ba9fb911 100644 --- a/plugins/org.eclipse.net4j.http.server/src/org/eclipse/net4j/http/internal/server/HTTPAcceptor.java +++ b/plugins/org.eclipse.net4j.http.server/src/org/eclipse/net4j/http/internal/server/HTTPAcceptor.java @@ -1,261 +1,267 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.net4j.http.internal.server; - -import org.eclipse.net4j.connector.IConnector; -import org.eclipse.net4j.http.common.IHTTPConnector; -import org.eclipse.net4j.http.internal.common.HTTPConnector; -import org.eclipse.net4j.http.internal.server.bundle.OM; -import org.eclipse.net4j.http.internal.server.messages.Messages; -import org.eclipse.net4j.http.server.IHTTPAcceptor; -import org.eclipse.net4j.http.server.INet4jTransportServlet; -import org.eclipse.net4j.util.StringUtil; -import org.eclipse.net4j.util.concurrent.Worker; -import org.eclipse.net4j.util.io.ExtendedDataInputStream; -import org.eclipse.net4j.util.io.ExtendedDataOutputStream; -import org.eclipse.net4j.util.lifecycle.LifecycleUtil; -import org.eclipse.net4j.util.om.log.OMLogger; -import org.eclipse.net4j.util.om.trace.ContextTracer; -import org.eclipse.net4j.util.security.IRandomizer; - -import org.eclipse.spi.net4j.Acceptor; -import org.eclipse.spi.net4j.InternalConnector; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Eike Stepper - */ -public class HTTPAcceptor extends Acceptor implements IHTTPAcceptor, INet4jTransportServlet.RequestHandler -{ - public static final int DEFAULT_CONNECTOR_ID_LENGTH = 32; - - public static final int DEFAULT_MAX_IDLE_TIME = 30 * 60 * 1000; // 30 minutes - - private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HTTPAcceptor.class); - - private IRandomizer randomizer; - - private INet4jTransportServlet servlet; - - private int connectorIDLength = DEFAULT_CONNECTOR_ID_LENGTH; - - private int maxIdleTime = DEFAULT_MAX_IDLE_TIME; - - private Map httpConnectors = new HashMap(); - - private Worker cleaner = new Worker() - { - @Override - protected void work(WorkContext context) throws Exception - { - int pause = cleanIdleConnectors(); - context.nextWork(pause); - } - }; - - public HTTPAcceptor() - { - } - - public IRandomizer getRandomizer() - { - return randomizer; - } - - public void setRandomizer(IRandomizer randomizer) - { - this.randomizer = randomizer; - } - - public INet4jTransportServlet getServlet() - { - return servlet; - } - - public void setServlet(INet4jTransportServlet servlet) - { - if (this.servlet != null) - { - this.servlet.setRequestHandler(null); - } - - this.servlet = servlet; - if (this.servlet != null) - { - this.servlet.setRequestHandler(this); - } - } - - public int getConnectorIDLength() - { - return connectorIDLength; - } - - public void setConnectorIDLength(int connectorIDLength) - { - this.connectorIDLength = connectorIDLength; - } - - public int getMaxIdleTime() - { - return maxIdleTime; - } - - public void setMaxIdleTime(int maxIdleTime) - { - this.maxIdleTime = maxIdleTime; - } - - public IHTTPConnector[] getHTTPConnectors() - { - List result = new ArrayList(); - for (IConnector acceptedConnector : getAcceptedConnectors()) - { - IHTTPConnector connector = (IHTTPConnector)acceptedConnector; - result.add(connector); - } - - return result.toArray(new IHTTPConnector[result.size()]); - } - - public IHTTPConnector[] handleList(String connectorID) - { - if (StringUtil.isEmpty(connectorID)) - { - return getHTTPConnectors(); - } - - return new IHTTPConnector[] { httpConnectors.get(connectorID) }; - } - - public IHTTPConnector handleConnect(String userID) - { - String connectorID = createConnectorID(userID); - HTTPServerConnector connector = createServerConnector(); - prepareConnector(connector); - connector.setConnectorID(connectorID); - connector.setUserID(userID); - addConnector(connector); - connector.activate(); - - return connector; - } - - public void handleDisonnect(String connectorID) - { - HTTPConnector connector = httpConnectors.get(connectorID); - if (connector == null) - { - throw new IllegalArgumentException("Invalid connectorID: " + connectorID); //$NON-NLS-1$ - } - - connector.deactivate(); - } - - public void handleOperations(String connectorID, ExtendedDataInputStream in, ExtendedDataOutputStream out) - throws IOException - { - HTTPServerConnector connector = httpConnectors.get(connectorID); - if (connector == null) - { - throw new IllegalArgumentException("Invalid connectorID: " + connectorID); //$NON-NLS-1$ - } - - connector.readInputOperations(in); - connector.writeOutputOperations(out); - } - - @Override - public String toString() - { - return "HTTPAcceptor"; //$NON-NLS-1$ - } - - @Override - public void addConnector(InternalConnector connector) - { - super.addConnector(connector); - HTTPServerConnector httpConnector = (HTTPServerConnector)connector; - httpConnectors.put(httpConnector.getConnectorID(), httpConnector); - } - - @Override - public void removeConnector(IConnector connector) - { - HTTPConnector httpConnector = (HTTPConnector)connector; - httpConnectors.remove(httpConnector.getConnectorID()); - super.removeConnector(connector); - } - - @Override - protected void doBeforeActivate() throws Exception - { - super.doBeforeActivate(); - checkState(randomizer, "randomizer"); //$NON-NLS-1$ - checkState(connectorIDLength > 0, "Constraint violated: connectorIDLength > 0"); //$NON-NLS-1$ - checkState(maxIdleTime >= 100, "Constraint violated: maxIdleTime >= 100"); //$NON-NLS-1$ - } - - @Override - protected void doActivate() throws Exception - { - super.doActivate(); - cleaner.setDaemon(true); - cleaner.activate(); - } - - @Override - protected void doDeactivate() throws Exception - { - LifecycleUtil.deactivate(cleaner, OMLogger.Level.WARN); - super.doDeactivate(); - } - - protected String createConnectorID(String userID) - { - return randomizer.nextString(connectorIDLength, "0123456789ABCDEF"); //$NON-NLS-1$ - } - - protected HTTPServerConnector createServerConnector() - { - return new HTTPServerConnector(this); - } - - protected int cleanIdleConnectors() - { - long now = System.currentTimeMillis(); - IConnector[] connectors = getAcceptedConnectors(); - if (TRACER.isEnabled()) - { - TRACER.format("Checking {0} HTTP server connectors for idle time: {1,time}", connectors.length, new Date()); //$NON-NLS-1$ - } - - for (IConnector connector : connectors) - { - HTTPServerConnector serverConnector = (HTTPServerConnector)connector; - long lastTraffic = serverConnector.getLastTraffic(); - long idleTime = now - lastTraffic; - if (idleTime > maxIdleTime) - { - serverConnector.deactivate(); - OM.LOG.info(Messages.getString("HTTPAcceptor.8") + serverConnector); //$NON-NLS-1$ - } - } - - return maxIdleTime; - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.net4j.http.internal.server; + +import org.eclipse.net4j.connector.IConnector; +import org.eclipse.net4j.http.common.IHTTPConnector; +import org.eclipse.net4j.http.internal.common.HTTPConnector; +import org.eclipse.net4j.http.internal.server.bundle.OM; +import org.eclipse.net4j.http.internal.server.messages.Messages; +import org.eclipse.net4j.http.server.IHTTPAcceptor; +import org.eclipse.net4j.http.server.INet4jTransportServlet; +import org.eclipse.net4j.util.StringUtil; +import org.eclipse.net4j.util.concurrent.Worker; +import org.eclipse.net4j.util.io.ExtendedDataInputStream; +import org.eclipse.net4j.util.io.ExtendedDataOutputStream; +import org.eclipse.net4j.util.lifecycle.LifecycleUtil; +import org.eclipse.net4j.util.om.log.OMLogger; +import org.eclipse.net4j.util.om.trace.ContextTracer; +import org.eclipse.net4j.util.security.IRandomizer; + +import org.eclipse.spi.net4j.Acceptor; +import org.eclipse.spi.net4j.InternalConnector; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Eike Stepper + */ +public class HTTPAcceptor extends Acceptor implements IHTTPAcceptor, INet4jTransportServlet.RequestHandler +{ + public static final int DEFAULT_CONNECTOR_ID_LENGTH = 32; + + public static final int DEFAULT_MAX_IDLE_TIME = 30 * 60 * 1000; // 30 minutes + + private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, HTTPAcceptor.class); + + private IRandomizer randomizer; + + private INet4jTransportServlet servlet; + + private int connectorIDLength = DEFAULT_CONNECTOR_ID_LENGTH; + + private int maxIdleTime = DEFAULT_MAX_IDLE_TIME; + + private Map httpConnectors = new HashMap(); + + private Worker cleaner = new Worker() + { + @Override + protected void work(WorkContext context) throws Exception + { + int pause = cleanIdleConnectors(); + context.nextWork(pause); + } + + @Override + protected String getThreadName() + { + return "HTTPAcceptorCleaner"; + } + }; + + public HTTPAcceptor() + { + } + + public IRandomizer getRandomizer() + { + return randomizer; + } + + public void setRandomizer(IRandomizer randomizer) + { + this.randomizer = randomizer; + } + + public INet4jTransportServlet getServlet() + { + return servlet; + } + + public void setServlet(INet4jTransportServlet servlet) + { + if (this.servlet != null) + { + this.servlet.setRequestHandler(null); + } + + this.servlet = servlet; + if (this.servlet != null) + { + this.servlet.setRequestHandler(this); + } + } + + public int getConnectorIDLength() + { + return connectorIDLength; + } + + public void setConnectorIDLength(int connectorIDLength) + { + this.connectorIDLength = connectorIDLength; + } + + public int getMaxIdleTime() + { + return maxIdleTime; + } + + public void setMaxIdleTime(int maxIdleTime) + { + this.maxIdleTime = maxIdleTime; + } + + public IHTTPConnector[] getHTTPConnectors() + { + List result = new ArrayList(); + for (IConnector acceptedConnector : getAcceptedConnectors()) + { + IHTTPConnector connector = (IHTTPConnector)acceptedConnector; + result.add(connector); + } + + return result.toArray(new IHTTPConnector[result.size()]); + } + + public IHTTPConnector[] handleList(String connectorID) + { + if (StringUtil.isEmpty(connectorID)) + { + return getHTTPConnectors(); + } + + return new IHTTPConnector[] { httpConnectors.get(connectorID) }; + } + + public IHTTPConnector handleConnect(String userID) + { + String connectorID = createConnectorID(userID); + HTTPServerConnector connector = createServerConnector(); + prepareConnector(connector); + connector.setConnectorID(connectorID); + connector.setUserID(userID); + addConnector(connector); + connector.activate(); + + return connector; + } + + public void handleDisonnect(String connectorID) + { + HTTPConnector connector = httpConnectors.get(connectorID); + if (connector == null) + { + throw new IllegalArgumentException("Invalid connectorID: " + connectorID); //$NON-NLS-1$ + } + + connector.deactivate(); + } + + public void handleOperations(String connectorID, ExtendedDataInputStream in, ExtendedDataOutputStream out) + throws IOException + { + HTTPServerConnector connector = httpConnectors.get(connectorID); + if (connector == null) + { + throw new IllegalArgumentException("Invalid connectorID: " + connectorID); //$NON-NLS-1$ + } + + connector.readInputOperations(in); + connector.writeOutputOperations(out); + } + + @Override + public String toString() + { + return "HTTPAcceptor"; //$NON-NLS-1$ + } + + @Override + public void addConnector(InternalConnector connector) + { + super.addConnector(connector); + HTTPServerConnector httpConnector = (HTTPServerConnector)connector; + httpConnectors.put(httpConnector.getConnectorID(), httpConnector); + } + + @Override + public void removeConnector(IConnector connector) + { + HTTPConnector httpConnector = (HTTPConnector)connector; + httpConnectors.remove(httpConnector.getConnectorID()); + super.removeConnector(connector); + } + + @Override + protected void doBeforeActivate() throws Exception + { + super.doBeforeActivate(); + checkState(randomizer, "randomizer"); //$NON-NLS-1$ + checkState(connectorIDLength > 0, "Constraint violated: connectorIDLength > 0"); //$NON-NLS-1$ + checkState(maxIdleTime >= 100, "Constraint violated: maxIdleTime >= 100"); //$NON-NLS-1$ + } + + @Override + protected void doActivate() throws Exception + { + super.doActivate(); + cleaner.setDaemon(true); + cleaner.activate(); + } + + @Override + protected void doDeactivate() throws Exception + { + LifecycleUtil.deactivate(cleaner, OMLogger.Level.WARN); + super.doDeactivate(); + } + + protected String createConnectorID(String userID) + { + return randomizer.nextString(connectorIDLength, "0123456789ABCDEF"); //$NON-NLS-1$ + } + + protected HTTPServerConnector createServerConnector() + { + return new HTTPServerConnector(this); + } + + protected int cleanIdleConnectors() + { + long now = System.currentTimeMillis(); + IConnector[] connectors = getAcceptedConnectors(); + if (TRACER.isEnabled()) + { + TRACER.format("Checking {0} HTTP server connectors for idle time: {1,time}", connectors.length, new Date()); //$NON-NLS-1$ + } + + for (IConnector connector : connectors) + { + HTTPServerConnector serverConnector = (HTTPServerConnector)connector; + long lastTraffic = serverConnector.getLastTraffic(); + long idleTime = now - lastTraffic; + if (idleTime > maxIdleTime) + { + serverConnector.deactivate(); + OM.LOG.info(Messages.getString("HTTPAcceptor.8") + serverConnector); //$NON-NLS-1$ + } + } + + return maxIdleTime; + } +} diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/ExecutorServiceFactory.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/ExecutorServiceFactory.java index 80340b9098..e1c973fdcd 100644 --- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/ExecutorServiceFactory.java +++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/concurrent/ExecutorServiceFactory.java @@ -1,122 +1,124 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.net4j.util.concurrent; - -import org.eclipse.net4j.util.container.IManagedContainer; -import org.eclipse.net4j.util.event.EventUtil; -import org.eclipse.net4j.util.event.IListener; -import org.eclipse.net4j.util.factory.Factory; -import org.eclipse.net4j.util.lifecycle.ILifecycle; -import org.eclipse.net4j.util.lifecycle.LifecycleException; -import org.eclipse.net4j.util.lifecycle.LifecycleState; -import org.eclipse.net4j.util.lifecycle.LifecycleUtil; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; - -/** - * @author Eike Stepper - * @since 2.0 - */ -public class ExecutorServiceFactory extends Factory -{ - public static final String PRODUCT_GROUP = "org.eclipse.net4j.executorServices"; //$NON-NLS-1$ - - public static final String TYPE = "default"; //$NON-NLS-1$ - - public static final String DEFAULT_THREAD_GROUP_NAME = "net4j"; //$NON-NLS-1$ - - public ExecutorServiceFactory() - { - super(PRODUCT_GROUP, TYPE); - } - - public ExecutorService create(String threadGroupName) - { - if (threadGroupName == null) - { - threadGroupName = DEFAULT_THREAD_GROUP_NAME; - } - - final ThreadGroup threadGroup = new ThreadGroup(threadGroupName); - ThreadFactory threadFactory = new ThreadFactory() - { - public Thread newThread(Runnable r) - { - Thread thread = new Thread(threadGroup, r); - thread.setDaemon(true); - return thread; - } - }; - - final ExecutorService executorService = Executors.newCachedThreadPool(threadFactory); - return LifecycleUtil.delegateLifecycle(getClass().getClassLoader(), executorService, ExecutorService.class, - new ILifecycle() - { - private boolean active; - - public void activate() throws LifecycleException - { - active = true; - } - - public Exception deactivate() - { - try - { - executorService.shutdown(); - active = false; - return null; - } - catch (Exception ex) - { - return ex; - } - } - - public LifecycleState getLifecycleState() - { - return active ? LifecycleState.ACTIVE : LifecycleState.INACTIVE; - } - - public boolean isActive() - { - return active; - } - - public void addListener(IListener listener) - { - // Do nothing - } - - public void removeListener(IListener listener) - { - // Do nothing - } - - public IListener[] getListeners() - { - return EventUtil.NO_LISTENERS; - } - - public boolean hasListeners() - { - return false; - } - }); - } - - public static ExecutorService get(IManagedContainer container) - { - return (ExecutorService)container.getElement(PRODUCT_GROUP, TYPE, null); - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.net4j.util.concurrent; + +import org.eclipse.net4j.util.container.IManagedContainer; +import org.eclipse.net4j.util.event.EventUtil; +import org.eclipse.net4j.util.event.IListener; +import org.eclipse.net4j.util.factory.Factory; +import org.eclipse.net4j.util.lifecycle.ILifecycle; +import org.eclipse.net4j.util.lifecycle.LifecycleException; +import org.eclipse.net4j.util.lifecycle.LifecycleState; +import org.eclipse.net4j.util.lifecycle.LifecycleUtil; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; + +/** + * @author Eike Stepper + * @since 2.0 + */ +public class ExecutorServiceFactory extends Factory +{ + public static final String PRODUCT_GROUP = "org.eclipse.net4j.executorServices"; //$NON-NLS-1$ + + public static final String TYPE = "default"; //$NON-NLS-1$ + + public static final String DEFAULT_THREAD_GROUP_NAME = "net4j"; //$NON-NLS-1$ + + public ExecutorServiceFactory() + { + super(PRODUCT_GROUP, TYPE); + } + + public ExecutorService create(String threadGroupName) + { + if (threadGroupName == null) + { + threadGroupName = DEFAULT_THREAD_GROUP_NAME; + } + + final ThreadGroup threadGroup = new ThreadGroup(threadGroupName); + ThreadFactory threadFactory = new ThreadFactory() + { + private int num; + + public Thread newThread(Runnable r) + { + Thread thread = new Thread(threadGroup, r, threadGroup.getName() + "-Thread-" + ++num); + thread.setDaemon(true); + return thread; + } + }; + + final ExecutorService executorService = Executors.newCachedThreadPool(threadFactory); + return LifecycleUtil.delegateLifecycle(getClass().getClassLoader(), executorService, ExecutorService.class, + new ILifecycle() + { + private boolean active; + + public void activate() throws LifecycleException + { + active = true; + } + + public Exception deactivate() + { + try + { + executorService.shutdown(); + active = false; + return null; + } + catch (Exception ex) + { + return ex; + } + } + + public LifecycleState getLifecycleState() + { + return active ? LifecycleState.ACTIVE : LifecycleState.INACTIVE; + } + + public boolean isActive() + { + return active; + } + + public void addListener(IListener listener) + { + // Do nothing + } + + public void removeListener(IListener listener) + { + // Do nothing + } + + public IListener[] getListeners() + { + return EventUtil.NO_LISTENERS; + } + + public boolean hasListeners() + { + return false; + } + }); + } + + public static ExecutorService get(IManagedContainer container) + { + return (ExecutorService)container.getElement(PRODUCT_GROUP, TYPE, null); + } +} diff --git a/plugins/org.eclipse.net4j/META-INF/MANIFEST.MF b/plugins/org.eclipse.net4j/META-INF/MANIFEST.MF index 13aaba9be3..743b1e2dbb 100644 --- a/plugins/org.eclipse.net4j/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.net4j/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.net4j;singleton:=true -Bundle-Version: 4.1.0.qualifier +Bundle-Version: 4.1.100.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin @@ -11,7 +11,7 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-ClassPath: . Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)";resolution:=optional, org.eclipse.net4j.util;bundle-version="[3.0.0,4.0.0)";visibility:=reexport -Export-Package: org.eclipse.internal.net4j;version="4.1.0"; +Export-Package: org.eclipse.internal.net4j;version="4.1.100"; x-friends:="org.eclipse.net4j.http.server, org.eclipse.net4j.jvm, org.eclipse.net4j.tcp, @@ -20,7 +20,7 @@ Export-Package: org.eclipse.internal.net4j;version="4.1.0"; org.eclipse.net4j.http.tests, org.eclipse.net4j.tests, org.eclipse.net4j.defs", - org.eclipse.internal.net4j.buffer;version="4.1.0"; + org.eclipse.internal.net4j.buffer;version="4.1.100"; x-friends:="org.eclipse.net4j.http.server, org.eclipse.net4j.jvm, org.eclipse.net4j.tcp, @@ -29,15 +29,15 @@ Export-Package: org.eclipse.internal.net4j;version="4.1.0"; org.eclipse.net4j.http.tests, org.eclipse.net4j.tests, org.eclipse.net4j.defs", - org.eclipse.internal.net4j.bundle;version="4.1.0";x-internal:=true, - org.eclipse.net4j;version="4.1.0", - org.eclipse.net4j.acceptor;version="4.1.0", - org.eclipse.net4j.buffer;version="4.1.0", - org.eclipse.net4j.channel;version="4.1.0", - org.eclipse.net4j.connector;version="4.1.0", - org.eclipse.net4j.protocol;version="4.1.0", - org.eclipse.net4j.signal;version="4.1.0", - org.eclipse.net4j.signal.heartbeat;version="4.1.0", - org.eclipse.net4j.signal.wrapping;version="4.1.0", - org.eclipse.spi.net4j;version="4.1.0" + org.eclipse.internal.net4j.bundle;version="4.1.100";x-internal:=true, + org.eclipse.net4j;version="4.1.100", + org.eclipse.net4j.acceptor;version="4.1.100", + org.eclipse.net4j.buffer;version="4.1.100", + org.eclipse.net4j.channel;version="4.1.100", + org.eclipse.net4j.connector;version="4.1.100", + org.eclipse.net4j.protocol;version="4.1.100", + org.eclipse.net4j.signal;version="4.1.100", + org.eclipse.net4j.signal.heartbeat;version="4.1.100", + org.eclipse.net4j.signal.wrapping;version="4.1.100", + org.eclipse.spi.net4j;version="4.1.100" Eclipse-BuddyPolicy: registered diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/buffer/BufferPool.java b/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/buffer/BufferPool.java index 26d0fd85ae..15ef34c123 100644 --- a/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/buffer/BufferPool.java +++ b/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/buffer/BufferPool.java @@ -1,243 +1,243 @@ -/* - * Copyright (c) 2004 - 2012 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: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.internal.net4j.buffer; - -import org.eclipse.net4j.buffer.IBuffer; -import org.eclipse.net4j.buffer.IBufferPool; -import org.eclipse.net4j.buffer.IBufferProvider; -import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump; -import org.eclipse.net4j.util.om.trace.ContextTracer; - -import org.eclipse.internal.net4j.bundle.OM; - -import org.eclipse.spi.net4j.InternalBuffer; - -import java.lang.ref.Reference; -import java.lang.ref.ReferenceQueue; -import java.lang.ref.SoftReference; -import java.text.MessageFormat; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; - -/** - * @author Eike Stepper - */ -public class BufferPool extends BufferProvider implements IBufferPool.Introspection -{ - private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_BUFFER, BufferPool.class); - - private final IBufferProvider provider; - - private int pooledBuffers; - - @ExcludeFromDump - private final Queue buffers = new ConcurrentLinkedQueue(); - - @ExcludeFromDump - private final ReferenceQueue referenceQueue = new ReferenceQueue(); - - @ExcludeFromDump - private Monitor monitor; - - public BufferPool(IBufferProvider provider) - { - super(provider.getBufferCapacity()); - this.provider = provider; - } - - public IBufferProvider getProvider() - { - return provider; - } - - public ReferenceQueue getReferenceQueue() - { - return referenceQueue; - } - - public int getPooledBuffers() - { - return pooledBuffers; - } - - public boolean evictOne() - { - for (;;) - { - BufferRef bufferRef = buffers.poll(); - if (bufferRef == null) - { - return false; - } - - IBuffer buffer = bufferRef.get(); - if (buffer != null) - { - if (TRACER.isEnabled()) - { - TRACER.trace("Evicting " + buffer); //$NON-NLS-1$ - } - - provider.retainBuffer(buffer); - --pooledBuffers; - return true; - } - } - } - - public int evict(int survivors) - { - int evictedBuffers = 0; - while (pooledBuffers > survivors) - { - if (evictOne()) - { - ++evictedBuffers; - } - else - { - break; - } - } - - return evictedBuffers; - } - - @Override - public String toString() - { - return MessageFormat.format("BufferPool[{0}]", getBufferCapacity()); //$NON-NLS-1$ - } - - protected BufferRef createBufferRef(IBuffer buffer) - { - return new BufferRef(buffer, referenceQueue); - } - - @Override - protected IBuffer doProvideBuffer() - { - IBuffer buffer = null; - BufferRef bufferRef = buffers.poll(); - if (bufferRef != null) - { - buffer = bufferRef.get(); - } - - if (buffer == null) - { - buffer = provider.provideBuffer(); - ((InternalBuffer)buffer).setBufferProvider(this); - } - else - { - --pooledBuffers; - } - - buffer.clear(); - if (TRACER.isEnabled()) - { - TRACER.trace("Obtained " + buffer); //$NON-NLS-1$ - } - - return buffer; - } - - @Override - protected void doRetainBuffer(IBuffer buffer) - { - if (buffer.getCapacity() != getBufferCapacity()) - { - throw new IllegalArgumentException("buffer.getCapacity() != getBufferCapacity()"); //$NON-NLS-1$ - } - - if (TRACER.isEnabled()) - { - TRACER.trace("Retaining " + buffer); //$NON-NLS-1$ - } - - BufferRef bufferRef = createBufferRef(buffer); - buffers.add(bufferRef); - ++pooledBuffers; - } - - @Override - protected void doActivate() throws Exception - { - super.doActivate(); - monitor = new Monitor(); - monitor.start(); - } - - @Override - protected void doDeactivate() throws Exception - { - monitor.interrupt(); - monitor = null; - super.doDeactivate(); - } - - private static final class BufferRef extends SoftReference - { - public BufferRef(IBuffer buffer, ReferenceQueue queue) - { - super(buffer, queue); - } - } - - private final class Monitor extends Thread - { - public Monitor() - { - setName("BufferPoolMonitor"); //$NON-NLS-1$ - setDaemon(true); - } - - @Override - public void run() - { - if (TRACER.isEnabled()) - { - TRACER.trace("Start monitoring"); //$NON-NLS-1$ - } - - try - { - while (isActive() && !isInterrupted()) - { - Reference bufferRef = referenceQueue.remove(200); - if (bufferRef != null) - { - if (buffers.remove(bufferRef)) - { - --pooledBuffers; - if (TRACER.isEnabled()) - { - TRACER.trace("Collected buffer"); //$NON-NLS-1$ - } - } - } - } - } - catch (InterruptedException ex) - { - return; - } - finally - { - if (TRACER.isEnabled()) - { - TRACER.trace("Stop monitoring"); //$NON-NLS-1$ - } - } - } - } -} +/* + * Copyright (c) 2004 - 2012 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: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.internal.net4j.buffer; + +import org.eclipse.net4j.buffer.IBuffer; +import org.eclipse.net4j.buffer.IBufferPool; +import org.eclipse.net4j.buffer.IBufferProvider; +import org.eclipse.net4j.util.ReflectUtil.ExcludeFromDump; +import org.eclipse.net4j.util.om.trace.ContextTracer; + +import org.eclipse.internal.net4j.bundle.OM; + +import org.eclipse.spi.net4j.InternalBuffer; + +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.text.MessageFormat; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +/** + * @author Eike Stepper + */ +public class BufferPool extends BufferProvider implements IBufferPool.Introspection +{ + private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_BUFFER, BufferPool.class); + + private final IBufferProvider provider; + + private int pooledBuffers; + + @ExcludeFromDump + private final Queue buffers = new ConcurrentLinkedQueue(); + + @ExcludeFromDump + private final ReferenceQueue referenceQueue = new ReferenceQueue(); + + @ExcludeFromDump + private Monitor monitor; + + public BufferPool(IBufferProvider provider) + { + super(provider.getBufferCapacity()); + this.provider = provider; + } + + public IBufferProvider getProvider() + { + return provider; + } + + public ReferenceQueue getReferenceQueue() + { + return referenceQueue; + } + + public int getPooledBuffers() + { + return pooledBuffers; + } + + public boolean evictOne() + { + for (;;) + { + BufferRef bufferRef = buffers.poll(); + if (bufferRef == null) + { + return false; + } + + IBuffer buffer = bufferRef.get(); + if (buffer != null) + { + if (TRACER.isEnabled()) + { + TRACER.trace("Evicting " + buffer); //$NON-NLS-1$ + } + + provider.retainBuffer(buffer); + --pooledBuffers; + return true; + } + } + } + + public int evict(int survivors) + { + int evictedBuffers = 0; + while (pooledBuffers > survivors) + { + if (evictOne()) + { + ++evictedBuffers; + } + else + { + break; + } + } + + return evictedBuffers; + } + + @Override + public String toString() + { + return MessageFormat.format("BufferPool[{0}]", getBufferCapacity()); //$NON-NLS-1$ + } + + protected BufferRef createBufferRef(IBuffer buffer) + { + return new BufferRef(buffer, referenceQueue); + } + + @Override + protected IBuffer doProvideBuffer() + { + IBuffer buffer = null; + BufferRef bufferRef = buffers.poll(); + if (bufferRef != null) + { + buffer = bufferRef.get(); + } + + if (buffer == null) + { + buffer = provider.provideBuffer(); + ((InternalBuffer)buffer).setBufferProvider(this); + } + else + { + --pooledBuffers; + } + + buffer.clear(); + if (TRACER.isEnabled()) + { + TRACER.trace("Obtained " + buffer); //$NON-NLS-1$ + } + + return buffer; + } + + @Override + protected void doRetainBuffer(IBuffer buffer) + { + if (buffer.getCapacity() != getBufferCapacity()) + { + throw new IllegalArgumentException("buffer.getCapacity() != getBufferCapacity()"); //$NON-NLS-1$ + } + + if (TRACER.isEnabled()) + { + TRACER.trace("Retaining " + buffer); //$NON-NLS-1$ + } + + BufferRef bufferRef = createBufferRef(buffer); + buffers.add(bufferRef); + ++pooledBuffers; + } + + @Override + protected void doActivate() throws Exception + { + super.doActivate(); + monitor = new Monitor(); + monitor.start(); + } + + @Override + protected void doDeactivate() throws Exception + { + monitor.interrupt(); + monitor = null; + super.doDeactivate(); + } + + private static final class BufferRef extends SoftReference + { + public BufferRef(IBuffer buffer, ReferenceQueue queue) + { + super(buffer, queue); + } + } + + private final class Monitor extends Thread + { + public Monitor() + { + setName("Net4jBufferPoolMonitor"); //$NON-NLS-1$ + setDaemon(true); + } + + @Override + public void run() + { + if (TRACER.isEnabled()) + { + TRACER.trace("Start monitoring"); //$NON-NLS-1$ + } + + try + { + while (isActive() && !isInterrupted()) + { + Reference bufferRef = referenceQueue.remove(200); + if (bufferRef != null) + { + if (buffers.remove(bufferRef)) + { + --pooledBuffers; + if (TRACER.isEnabled()) + { + TRACER.trace("Collected buffer"); //$NON-NLS-1$ + } + } + } + } + } + catch (InterruptedException ex) + { + return; + } + finally + { + if (TRACER.isEnabled()) + { + TRACER.trace("Stop monitoring"); //$NON-NLS-1$ + } + } + } + } +} diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Channel.java b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Channel.java index 44b0ccc8f5..09cafd650c 100644 --- a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Channel.java +++ b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Channel.java @@ -329,7 +329,7 @@ public class Channel extends Lifecycle implements InternalChannel @Override protected String getThreadName() { - return "ReceiveSerializer-" + Channel.this; //$NON-NLS-1$ + return "Net4jReceiveSerializer-" + Channel.this; //$NON-NLS-1$ } } -- cgit v1.2.3