You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2012/11/30 21:34:23 UTC
svn commit: r1415841 - in
/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src:
main/java/org/apache/chemistry/opencmis/inmemory/server/
test/java/org/apache/chemistry/opencmis/inmemory/
Author: jens
Date: Fri Nov 30 20:34:21 2012
New Revision: 1415841
URL: http://svn.apache.org/viewvc?rev=1415841&view=rev
Log:
InMemoryService: prepare for more CMIS 1.1 features, make call context globally available
Added:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java?rev=1415841&r1=1415840&r2=1415841&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java Fri Nov 30 20:34:21 2012
@@ -56,7 +56,6 @@ public class InMemoryService extends Abs
private static final Logger LOG = LoggerFactory.getLogger(InMemoryService.class.getName());
private final StoreManager storeManager; // singleton root of everything
- private CallContext context;
private final InMemoryRepositoryServiceImpl fRepSvc;
private final InMemoryObjectServiceImpl fObjSvc;
@@ -82,16 +81,22 @@ public class InMemoryService extends Abs
}
public CallContext getCallContext() {
- return context;
+ return InMemoryServiceContext.getCallContext();
}
public void setCallContext(CallContext context) {
- this.context = context;
+ InMemoryServiceContext.setCallContext(context);
}
// --- repository service ---
@Override
+ public void close() {
+ super.close();
+ setCallContext(null);
+ }
+
+ @Override
public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
return fRepSvc.getRepositoryInfos(getCallContext(), extension);
}
Added: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java?rev=1415841&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceContext.java Fri Nov 30 20:34:21 2012
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.inmemory.server;
+
+import org.apache.chemistry.opencmis.commons.server.CallContext;
+import org.apache.chemistry.opencmis.server.support.CmisServiceWrapper;
+
+/**
+ * Helper class to associate context information with each incoming call
+ *
+ */
+public class InMemoryServiceContext {
+
+ private static class ContextHolder {
+ private CmisServiceWrapper<InMemoryService> wrapper;
+ private CallContext callContext;
+
+ ContextHolder(CmisServiceWrapper<InMemoryService> wrapper) {
+ this.wrapper = wrapper;
+ }
+
+ public CmisServiceWrapper<InMemoryService> getServiceWrapper() {
+ return wrapper;
+ }
+
+ public void setCallContext(CallContext context) {
+ this.callContext = context;
+ }
+
+ public CallContext getCallContext() {
+ return callContext;
+ }
+ }
+
+ private static ThreadLocal<ContextHolder> threadLocalService = new ThreadLocal<ContextHolder>();
+
+ public static synchronized void setWrapperService(CmisServiceWrapper<InMemoryService> wrapperService) {
+ threadLocalService.remove();
+ if (null != wrapperService) {
+ ContextHolder holder = new ContextHolder(wrapperService);
+ threadLocalService.set(holder);
+ }
+ }
+
+ public static synchronized InMemoryService getCmisService() {
+ ContextHolder holder = threadLocalService.get();
+ if (null == holder)
+ return null;
+ else {
+ CmisServiceWrapper<InMemoryService> wrapperService = holder.getServiceWrapper();
+ return wrapperService == null ? null : wrapperService.getWrappedService();
+ }
+ }
+
+ public static synchronized void setCallContext(CallContext context) {
+ ContextHolder holder = threadLocalService.get();
+ if (null == holder)
+ throw new IllegalStateException("Cannot store call context, no service wrapper set.");
+ else {
+ holder.setCallContext(context);
+ }
+ }
+
+ public static CallContext getCallContext() {
+ ContextHolder holder = threadLocalService.get();
+ return null == holder ? null : holder.getCallContext();
+ }
+
+}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java?rev=1415841&r1=1415840&r2=1415841&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.java Fri Nov 30 20:34:21 2012
@@ -74,7 +74,6 @@ public class InMemoryServiceFactoryImpl
private static CallContext OVERRIDE_CTX;
private Map<String, String> inMemoryServiceParameters;
- private ThreadLocal<CmisServiceWrapper<InMemoryService>> threadLocalService = new ThreadLocal<CmisServiceWrapper<InMemoryService>>();
private boolean fUseOverrideCtx = false;
private StoreManager storeManager; // singleton root of everything
private CleanManager cleanManager = null;
@@ -154,18 +153,19 @@ public class InMemoryServiceFactoryImpl
context = OVERRIDE_CTX;
}
- CmisServiceWrapper<InMemoryService> wrapperService = threadLocalService.get();
- if (wrapperService == null) {
- wrapperService = new CmisServiceWrapper<InMemoryService>(new InMemoryService(inMemoryServiceParameters,
- storeManager), DEFAULT_MAX_ITEMS_TYPES, DEFAULT_DEPTH_TYPES, DEFAULT_MAX_ITEMS_OBJECTS,
- DEFAULT_DEPTH_OBJECTS);
- threadLocalService.set(wrapperService);
+ InMemoryService inMemoryService = InMemoryServiceContext.getCmisService();
+ if (inMemoryService == null) {
+ CmisServiceWrapper<InMemoryService> wrapperService;
+ inMemoryService = new InMemoryService(inMemoryServiceParameters, storeManager);
+ wrapperService = new CmisServiceWrapper<InMemoryService>(inMemoryService, DEFAULT_MAX_ITEMS_TYPES,
+ DEFAULT_DEPTH_TYPES, DEFAULT_MAX_ITEMS_OBJECTS, DEFAULT_DEPTH_OBJECTS);
+ InMemoryServiceContext.setWrapperService(wrapperService);
}
- wrapperService.getWrappedService().setCallContext(context);
+ inMemoryService.setCallContext(context);
LOG.debug("stop getService()");
- return wrapperService.getWrappedService(); // wrapperService;
+ return inMemoryService; // wrapperService;
}
@Override
@@ -193,7 +193,7 @@ public class InMemoryServiceFactoryImpl
if (null != cleanManager) {
cleanManager.stopCleanRepositoryJob();
}
- threadLocalService = null;
+ InMemoryServiceContext.setWrapperService(null);
}
public StoreManager getStoreManger() {
@@ -358,10 +358,7 @@ public class InMemoryServiceFactoryImpl
String contentKindStr = parameters.get(ConfigConstants.CONTENT_KIND);
boolean doFillRepository = doFillRepositoryStr == null ? false : Boolean.parseBoolean(doFillRepositoryStr);
- if (doFillRepository /*
- * &&
- * !allAvailableRepositories.contains(repositoryId)
- */) {
+ if (doFillRepository) {
// create an initial temporary service instance to fill the
// repository
@@ -452,10 +449,10 @@ public class InMemoryServiceFactoryImpl
// Simulate a runtime context with configuration parameters
// Attach the CallContext to a thread local context that can be
- // accessed
- // from everywhere
+ // accessed from everywhere
DummyCallContext ctx = new DummyCallContext();
- svc.setCallContext(ctx);
+ // create thread local storage and attach call context
+ getService(ctx);
// Build the tree
RepositoryInfo rep = svc.getRepositoryInfo(repositoryId, null);
@@ -469,6 +466,7 @@ public class InMemoryServiceFactoryImpl
LOG.error("Could not create folder hierarchy with documents. " + e);
e.printStackTrace();
}
+ destroy();
} // if
} // fillRepositoryIfConfigured
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java?rev=1415841&r1=1415840&r2=1415841&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java Fri Nov 30 20:34:21 2012
@@ -81,6 +81,8 @@ public class AbstractServiceTest {
protected CallContext fTestCallContext;
private String fTypeCreatorClassName;
+ private CmisBinding binding;
+
public AbstractServiceTest() {
// The in-memory server unit tests can either be run directly against
// the
@@ -104,7 +106,6 @@ public class AbstractServiceTest {
}
protected void setUp() {
- // super.setUp();
LOG.debug("Initializing InMemory Test with type creator class: " + fTypeCreatorClassName);
Map<String, String> parameters = new HashMap<String, String>();
@@ -112,8 +113,7 @@ public class AbstractServiceTest {
parameters.put(ConfigConstants.TYPE_CREATOR_CLASS, fTypeCreatorClassName);
parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
- // give subclasses a chance to provide additional parameters for special
- // tests
+ // give subclasses a chance to provide additional parameters for special tests
addParameters(parameters);
fTestCallContext = new DummyCallContext();
@@ -142,7 +142,7 @@ public class AbstractServiceTest {
}
protected void tearDown() {
- // super.tearDown();
+ binding.close();
}
public void testDummy() {
@@ -404,7 +404,7 @@ public class AbstractServiceTest {
// get factory and create binding
CmisBindingFactory factory = CmisBindingFactory.newInstance();
- CmisBinding binding = factory.createCmisLocalBinding(parameters);
+ binding = factory.createCmisLocalBinding(parameters);
assertNotNull(binding);
fFactory = binding.getObjectFactory();
fRepSvc = binding.getRepositoryService();
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java?rev=1415841&r1=1415840&r2=1415841&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/DiscoveryServiceTest.java Fri Nov 30 20:34:21 2012
@@ -28,10 +28,11 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class DiscoveryServiceTest extends AbstractServiceTest {
@@ -48,6 +49,11 @@ public class DiscoveryServiceTest extend
super.setUp();
}
+ @After
+ public void tearDown() {
+ super.tearDown();
+ }
+
@Test
public void testQuery() {
log.info("starting testQuery() ...");