You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2014/02/22 19:34:58 UTC
svn commit: r1570876 - in /chemistry/opencmis/trunk:
chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/
chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/or...
Author: fmui
Date: Sat Feb 22 18:34:57 2014
New Revision: 1570876
URL: http://svn.apache.org/r1570876
Log:
CMIS-752: added ability to provide a custom Type Definition Cache implementation
Added:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java
Removed:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCache.java
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/CmisBindingFactory.java Sat Feb 22 18:34:57 2014
@@ -22,6 +22,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.spi.AuthenticationProvider;
@@ -41,7 +42,9 @@ public class CmisBindingFactory {
/** Default CMIS local binding SPI implementation. */
public static final String BINDING_SPI_LOCAL = "org.apache.chemistry.opencmis.client.bindings.spi.local.CmisLocalSpi";
- /** Default HTTP invoker clas.s */
+ /** Default type definition cache class */
+ public static final String DEFAULT_TYPE_DEFINITION_CACHE_CLASS = "org.apache.chemistry.opencmis.client.bindings.impl.TypeDefinitionCacheImpl";
+ /** Default HTTP invoker class */
public static final String DEFAULT_HTTP_INVOKER = "org.apache.chemistry.opencmis.client.bindings.spi.http.DefaultHttpInvoker";
/** Standard authentication provider class. */
public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
@@ -87,7 +90,7 @@ public class CmisBindingFactory {
* the session parameters.
*/
public CmisBinding createCmisBinding(Map<String, String> sessionParameters) {
- return createCmisBinding(sessionParameters, null);
+ return createCmisBinding(sessionParameters, null, null);
}
/**
@@ -95,19 +98,19 @@ public class CmisBindingFactory {
* the session parameters.
*/
public CmisBinding createCmisBinding(Map<String, String> sessionParameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
checkSessionParameters(sessionParameters, true);
addDefaultParameters(sessionParameters);
- return new CmisBindingImpl(sessionParameters, authenticationProvider);
+ return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
}
/**
* Creates a default CMIS AtomPub binding instance.
*/
public CmisBinding createCmisAtomPubBinding(Map<String, String> sessionParameters) {
- return createCmisAtomPubBinding(sessionParameters, null);
+ return createCmisAtomPubBinding(sessionParameters, null, null);
}
/**
@@ -115,7 +118,7 @@ public class CmisBindingFactory {
* authentication provider.
*/
public CmisBinding createCmisAtomPubBinding(Map<String, String> sessionParameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
checkSessionParameters(sessionParameters, false);
sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_ATOMPUB);
@@ -127,6 +130,11 @@ public class CmisBindingFactory {
sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, STANDARD_AUTHENTICATION_PROVIDER);
}
}
+ if (typeDefCache == null) {
+ if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
+ sessionParameters.put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
+ }
+ }
if (!sessionParameters.containsKey(SessionParameter.AUTH_HTTP_BASIC)) {
sessionParameters.put(SessionParameter.AUTH_HTTP_BASIC, "true");
}
@@ -135,14 +143,14 @@ public class CmisBindingFactory {
check(sessionParameters, SessionParameter.ATOMPUB_URL);
- return new CmisBindingImpl(sessionParameters, authenticationProvider);
+ return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
}
/**
* Creates a default CMIS Web Services binding instance.
*/
public CmisBinding createCmisWebServicesBinding(Map<String, String> sessionParameters) {
- return createCmisWebServicesBinding(sessionParameters, null);
+ return createCmisWebServicesBinding(sessionParameters, null, null);
}
/**
@@ -150,7 +158,7 @@ public class CmisBindingFactory {
* authentication provider.
*/
public CmisBinding createCmisWebServicesBinding(Map<String, String> sessionParameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
checkSessionParameters(sessionParameters, false);
sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_WEBSERVICES);
@@ -162,6 +170,11 @@ public class CmisBindingFactory {
sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, STANDARD_AUTHENTICATION_PROVIDER);
}
}
+ if (typeDefCache == null) {
+ if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
+ sessionParameters.put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
+ }
+ }
if (!sessionParameters.containsKey(SessionParameter.AUTH_SOAP_USERNAMETOKEN)) {
sessionParameters.put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, "true");
}
@@ -189,14 +202,14 @@ public class CmisBindingFactory {
check(sessionParameters, SessionParameter.WEBSERVICES_VERSIONING_SERVICE,
SessionParameter.WEBSERVICES_VERSIONING_SERVICE_ENDPOINT);
- return new CmisBindingImpl(sessionParameters, authenticationProvider);
+ return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
}
/**
* Creates a default CMIS Browser binding instance.
*/
public CmisBinding createCmisBrowserBinding(Map<String, String> sessionParameters) {
- return createCmisBrowserBinding(sessionParameters, null);
+ return createCmisBrowserBinding(sessionParameters, null, null);
}
/**
@@ -204,7 +217,7 @@ public class CmisBindingFactory {
* authentication provider.
*/
public CmisBinding createCmisBrowserBinding(Map<String, String> sessionParameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
checkSessionParameters(sessionParameters, false);
sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_BROWSER);
@@ -216,6 +229,11 @@ public class CmisBindingFactory {
sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, STANDARD_AUTHENTICATION_PROVIDER);
}
}
+ if (typeDefCache == null) {
+ if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
+ sessionParameters.put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
+ }
+ }
if (!sessionParameters.containsKey(SessionParameter.BROWSER_SUCCINCT)) {
sessionParameters.put(SessionParameter.BROWSER_SUCCINCT, "true");
}
@@ -227,16 +245,28 @@ public class CmisBindingFactory {
check(sessionParameters, SessionParameter.BROWSER_URL);
- return new CmisBindingImpl(sessionParameters, authenticationProvider);
+ return new CmisBindingImpl(sessionParameters, authenticationProvider, typeDefCache);
}
/**
* Creates a default CMIS local binding instance.
*/
public CmisBinding createCmisLocalBinding(Map<String, String> sessionParameters) {
+ return createCmisLocalBinding(sessionParameters, null);
+ }
+
+ /**
+ * Creates a default CMIS local binding instance.
+ */
+ public CmisBinding createCmisLocalBinding(Map<String, String> sessionParameters, TypeDefinitionCache typeDefCache) {
checkSessionParameters(sessionParameters, false);
sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_LOCAL);
+ if (typeDefCache == null) {
+ if (!sessionParameters.containsKey(SessionParameter.TYPE_DEFINITION_CACHE_CLASS)) {
+ sessionParameters.put(SessionParameter.TYPE_DEFINITION_CACHE_CLASS, DEFAULT_TYPE_DEFINITION_CACHE_CLASS);
+ }
+ }
addDefaultParameters(sessionParameters);
check(sessionParameters, SessionParameter.LOCAL_FACTORY);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java Sat Feb 22 18:34:57 2014
@@ -76,6 +76,11 @@ public interface Cache extends Serializa
void remove(String... keys);
/**
+ * Removes all entries from the cache.
+ */
+ void removeAll();
+
+ /**
* Checks if a given key is in the cache.
*
* @param keys
Added: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java?rev=1570876&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/TypeDefinitionCache.java Sat Feb 22 18:34:57 2014
@@ -0,0 +1,82 @@
+/*
+ * 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.client.bindings.cache;
+
+import java.io.Serializable;
+
+import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+
+/**
+ * A cache for type definition objects.
+ * <p>
+ * Implementations of this interface have to be tread-safe.
+ */
+public interface TypeDefinitionCache extends Serializable {
+
+ /**
+ * Initializes the cache.
+ */
+ void initialize(BindingSession session);
+
+ /**
+ * Adds a type definition object to the cache.
+ *
+ * @param repositoryId
+ * the repository id
+ * @param typeDefinition
+ * the type definition object
+ */
+ void put(String repositoryId, TypeDefinition typeDefinition);
+
+ /**
+ * Retrieves a type definition object from the cache.
+ *
+ * @param repositoryId
+ * the repository id
+ * @param typeId
+ * the type id
+ * @return the type definition object or <code>null</code> if the object is
+ * not in the cache
+ */
+ TypeDefinition get(String repositoryId, String typeId);
+
+ /**
+ * Removes a type definition object from the cache.
+ *
+ * @param repositoryId
+ * the repository id
+ * @param typeId
+ * the type id
+ */
+ void remove(String repositoryId, String typeId);
+
+ /**
+ * Removes all type definition objects of a repository from the cache.
+ *
+ * @param repositoryId
+ * the repository id
+ */
+ void remove(String repositoryId);
+
+ /**
+ * Removes all cache entries.
+ */
+ void removeAll();
+}
\ No newline at end of file
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java Sat Feb 22 18:34:57 2014
@@ -237,6 +237,19 @@ public class CacheImpl implements Cache
}
}
+ public void removeAll() {
+ lock.writeLock().lock();
+ try {
+ root = createCacheLevel(0);
+
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("{}: removed all", name);
+ }
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
public int check(String... keys) {
if (keys == null) {
return -1;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java Sat Feb 22 18:34:57 2014
@@ -21,6 +21,7 @@ package org.apache.chemistry.opencmis.cl
import java.io.Serializable;
import java.util.Map;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
import org.apache.chemistry.opencmis.client.bindings.spi.SessionAwareAuthenticationProvider;
@@ -59,7 +60,7 @@ public final class CmisBindingImpl imple
* the session parameters
*/
public CmisBindingImpl(Map<String, String> sessionParameters) {
- this(sessionParameters, null);
+ this(sessionParameters, null, null);
}
/**
@@ -70,7 +71,8 @@ public final class CmisBindingImpl imple
* @param authenticationProvider
* an authentication provider instance
*/
- public CmisBindingImpl(final Map<String, String> sessionParameters, AuthenticationProvider authenticationProvider) {
+ public CmisBindingImpl(final Map<String, String> sessionParameters, AuthenticationProvider authenticationProvider,
+ TypeDefinitionCache typeDefCache) {
// some checks first
if (sessionParameters == null) {
throw new IllegalArgumentException("Session parameters must be set!");
@@ -137,6 +139,12 @@ public final class CmisBindingImpl imple
}
}
+ // add type definition cache to session
+ if (typeDefCache != null) {
+ session.put(CmisBindingsHelper.TYPE_DEFINTION_CACHE, typeDefCache);
+ typeDefCache.initialize(session);
+ }
+
// set up caches
clearAllCaches();
@@ -229,7 +237,8 @@ public final class CmisBindingImpl imple
session.writeLock();
try {
session.put(CmisBindingsHelper.REPOSITORY_INFO_CACHE, new RepositoryInfoCache(session));
- session.put(CmisBindingsHelper.TYPE_DEFINTION_CACHE, new TypeDefinitionCache(session));
+ TypeDefinitionCache typeDefCache = CmisBindingsHelper.getTypeDefinitionCache(session);
+ typeDefCache.removeAll();
CmisSpi spi = CmisBindingsHelper.getSPI(session);
spi.clearAllCaches();
@@ -251,8 +260,7 @@ public final class CmisBindingImpl imple
.get(CmisBindingsHelper.REPOSITORY_INFO_CACHE);
repInfoCache.remove(repositoryId);
- TypeDefinitionCache typeDefCache = (TypeDefinitionCache) session
- .get(CmisBindingsHelper.TYPE_DEFINTION_CACHE);
+ TypeDefinitionCache typeDefCache = CmisBindingsHelper.getTypeDefinitionCache(session);
typeDefCache.remove(repositoryId);
CmisSpi spi = CmisBindingsHelper.getSPI(session);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java Sat Feb 22 18:34:57 2014
@@ -20,6 +20,7 @@ package org.apache.chemistry.opencmis.cl
import java.lang.reflect.Constructor;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
import org.apache.chemistry.opencmis.client.bindings.spi.http.HttpInvoker;
@@ -174,6 +175,39 @@ public final class CmisBindingsHelper {
public static TypeDefinitionCache getTypeDefinitionCache(BindingSession session) {
assert session != null;
- return (TypeDefinitionCache) session.get(TYPE_DEFINTION_CACHE);
+ TypeDefinitionCache cache = (TypeDefinitionCache) session.get(TYPE_DEFINTION_CACHE);
+
+ if (cache != null) {
+ return cache;
+ }
+
+ session.writeLock();
+ try {
+ // try again
+ cache = (TypeDefinitionCache) session.get(TYPE_DEFINTION_CACHE);
+ if (cache != null) {
+ return cache;
+ }
+
+ // ok, we have to create it...
+ try {
+ String cacheName = (String) session.get(SessionParameter.TYPE_DEFINITION_CACHE_CLASS);
+ cache = (TypeDefinitionCache) ClassLoaderUtil.loadClass(cacheName).newInstance();
+ cache.initialize(session);
+ } catch (CmisBaseException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new CmisRuntimeException("Type definition cache cannot be initialized: " + e.getMessage(), e);
+ }
+
+ // we have a cache object -> put it into the session
+ session.put(TYPE_DEFINTION_CACHE, cache);
+ } finally {
+ session.writeUnlock();
+ }
+
+ assert cache != null;
+
+ return cache;
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java Sat Feb 22 18:34:57 2014
@@ -23,6 +23,7 @@ import java.io.Serializable;
import java.math.BigInteger;
import java.util.List;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
Added: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java?rev=1570876&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCacheImpl.java Sat Feb 22 18:34:57 2014
@@ -0,0 +1,98 @@
+/*
+ * 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.client.bindings.impl;
+
+import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
+import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
+import org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl;
+import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
+import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+
+/**
+ * A cache for type definition objects.
+ */
+public class TypeDefinitionCacheImpl implements TypeDefinitionCache {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final int CACHE_SIZE_REPOSITORIES = 10;
+ private static final int CACHE_SIZE_TYPES = 100;
+
+ private Cache cache;
+
+ /**
+ * Constructor.
+ */
+ public TypeDefinitionCacheImpl() {
+
+ }
+
+ public void initialize(BindingSession session) {
+ assert session != null;
+
+ int repCount = session.get(SessionParameter.CACHE_SIZE_REPOSITORIES, CACHE_SIZE_REPOSITORIES);
+ if (repCount < 1) {
+ repCount = CACHE_SIZE_REPOSITORIES;
+ }
+
+ int typeCount = session.get(SessionParameter.CACHE_SIZE_TYPES, CACHE_SIZE_TYPES);
+ if (typeCount < 1) {
+ typeCount = CACHE_SIZE_TYPES;
+ }
+
+ cache = new CacheImpl("Type Definition Cache");
+ cache.initialize(new String[] {
+ MapCacheLevelImpl.class.getName() + " " + MapCacheLevelImpl.CAPACITY + "=" + repCount, // repository
+ LruCacheLevelImpl.class.getName() + " " + LruCacheLevelImpl.MAX_ENTRIES + "=" + typeCount // type
+ });
+ }
+
+ public void put(String repositoryId, TypeDefinition typeDefinition) {
+ if ((typeDefinition == null) || (typeDefinition.getId() == null)) {
+ return;
+ }
+
+ cache.put(typeDefinition, repositoryId, typeDefinition.getId());
+ }
+
+ public TypeDefinition get(String repositoryId, String typeId) {
+ return (TypeDefinition) cache.get(repositoryId, typeId);
+ }
+
+ public void remove(String repositoryId, String typeId) {
+ cache.remove(repositoryId, typeId);
+ }
+
+ public void remove(String repositoryId) {
+ cache.remove(repositoryId);
+ }
+
+ public void removeAll() {
+ cache.removeAll();
+ }
+
+ @Override
+ public String toString() {
+ return cache.toString();
+ }
+
+}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/browser/ClientTypeCacheImpl.java Sat Feb 22 18:34:57 2014
@@ -18,8 +18,8 @@
*/
package org.apache.chemistry.opencmis.client.bindings.spi.browser;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
-import org.apache.chemistry.opencmis.client.bindings.impl.TypeDefinitionCache;
import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.impl.TypeCache;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/CmisBindingHelper.java Sat Feb 22 18:34:57 2014
@@ -21,6 +21,7 @@ package org.apache.chemistry.opencmis.cl
import java.util.Map;
import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
@@ -39,7 +40,7 @@ public final class CmisBindingHelper {
* Creates a {@link CmisBinding} object.
*/
public static CmisBinding createBinding(Map<String, String> parameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
if (parameters == null || parameters.isEmpty()) {
throw new CmisRuntimeException("Session parameter not set!");
}
@@ -52,15 +53,15 @@ public final class CmisBindingHelper {
switch (bt) {
case ATOMPUB:
- return createAtomPubBinding(parameters, authenticationProvider);
+ return createAtomPubBinding(parameters, authenticationProvider, typeDefCache);
case WEBSERVICES:
- return createWebServiceBinding(parameters, authenticationProvider);
+ return createWebServiceBinding(parameters, authenticationProvider, typeDefCache);
case BROWSER:
- return createCmisBrowserBinding(parameters, authenticationProvider);
+ return createCmisBrowserBinding(parameters, authenticationProvider, typeDefCache);
case LOCAL:
- return createLocalBinding(parameters);
+ return createLocalBinding(parameters, typeDefCache);
case CUSTOM:
- return createCustomBinding(parameters, authenticationProvider);
+ return createCustomBinding(parameters, authenticationProvider, typeDefCache);
default:
throw new CmisRuntimeException("Ambiguous session parameter: " + parameters);
}
@@ -70,9 +71,9 @@ public final class CmisBindingHelper {
* Creates a binding with custom parameters.
*/
private static CmisBinding createCustomBinding(Map<String, String> parameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
CmisBindingFactory factory = CmisBindingFactory.newInstance();
- CmisBinding binding = factory.createCmisBinding(parameters, authenticationProvider);
+ CmisBinding binding = factory.createCmisBinding(parameters, authenticationProvider, typeDefCache);
return binding;
}
@@ -81,9 +82,9 @@ public final class CmisBindingHelper {
* Creates a Web Services binding.
*/
private static CmisBinding createWebServiceBinding(Map<String, String> parameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
CmisBindingFactory factory = CmisBindingFactory.newInstance();
- CmisBinding binding = factory.createCmisWebServicesBinding(parameters, authenticationProvider);
+ CmisBinding binding = factory.createCmisWebServicesBinding(parameters, authenticationProvider, typeDefCache);
return binding;
}
@@ -92,9 +93,9 @@ public final class CmisBindingHelper {
* Creates an AtomPub binding.
*/
private static CmisBinding createAtomPubBinding(Map<String, String> parameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
CmisBindingFactory factory = CmisBindingFactory.newInstance();
- CmisBinding binding = factory.createCmisAtomPubBinding(parameters, authenticationProvider);
+ CmisBinding binding = factory.createCmisAtomPubBinding(parameters, authenticationProvider, typeDefCache);
return binding;
}
@@ -103,9 +104,9 @@ public final class CmisBindingHelper {
* Creates an Browser binding.
*/
private static CmisBinding createCmisBrowserBinding(Map<String, String> parameters,
- AuthenticationProvider authenticationProvider) {
+ AuthenticationProvider authenticationProvider, TypeDefinitionCache typeDefCache) {
CmisBindingFactory factory = CmisBindingFactory.newInstance();
- CmisBinding binding = factory.createCmisBrowserBinding(parameters, authenticationProvider);
+ CmisBinding binding = factory.createCmisBrowserBinding(parameters, authenticationProvider, typeDefCache);
return binding;
}
@@ -113,9 +114,9 @@ public final class CmisBindingHelper {
/**
* Creates a local binding.
*/
- private static CmisBinding createLocalBinding(Map<String, String> parameters) {
+ private static CmisBinding createLocalBinding(Map<String, String> parameters, TypeDefinitionCache typeDefCache) {
CmisBindingFactory factory = CmisBindingFactory.newInstance();
- CmisBinding binding = factory.createCmisLocalBinding(parameters);
+ CmisBinding binding = factory.createCmisLocalBinding(parameters, typeDefCache);
return binding;
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java Sat Feb 22 18:34:57 2014
@@ -27,6 +27,7 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.client.api.Repository;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
import org.apache.chemistry.opencmis.client.runtime.repository.RepositoryImpl;
import org.apache.chemistry.opencmis.commons.SessionParameter;
@@ -64,7 +65,16 @@ public class SessionFactoryImpl implemen
}
public Session createSession(Map<String, String> parameters) {
- return createSession(parameters, null, null, null);
+ return createSession(parameters, null, null, null, null);
+ }
+
+ /**
+ * @deprecated Use
+ * {@link #createSession(Map, ObjectFactory, AuthenticationProvider, Cache)}
+ */
+ public Session createSession(Map<String, String> parameters, ObjectFactory objectFactory,
+ AuthenticationProvider authenticationProvider, Cache cache) {
+ return createSession(parameters, objectFactory, authenticationProvider, cache, null);
}
/**
@@ -81,6 +91,8 @@ public class SessionFactoryImpl implemen
* an authentication provider instance
* @param cache
* a cache instance
+ * @param typeDefCache
+ * a type definition cache instance
* @return a {@link Session} connected to the CMIS repository
* @throws CmisBaseException
* if the connection could not be established
@@ -88,15 +100,24 @@ public class SessionFactoryImpl implemen
* @see SessionParameter
*/
public Session createSession(Map<String, String> parameters, ObjectFactory objectFactory,
- AuthenticationProvider authenticationProvider, Cache cache) {
- SessionImpl session = new SessionImpl(parameters, objectFactory, authenticationProvider, cache);
+ AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
+ SessionImpl session = new SessionImpl(parameters, objectFactory, authenticationProvider, cache, typeDefCache);
session.connect();
return session;
}
public List<Repository> getRepositories(Map<String, String> parameters) {
- return getRepositories(parameters, null, null, null);
+ return getRepositories(parameters, null, null, null, null);
+ }
+
+ /**
+ * @deprecated Use
+ * {@link #getRepositories(Map, ObjectFactory, AuthenticationProvider, Cache, TypeDefinitionCache)}
+ */
+ public List<Repository> getRepositories(Map<String, String> parameters, ObjectFactory objectFactory,
+ AuthenticationProvider authenticationProvider, Cache cache) {
+ return getRepositories(parameters, objectFactory, authenticationProvider, cache, null);
}
/**
@@ -106,15 +127,15 @@ public class SessionFactoryImpl implemen
* {@code SessionParameter.REPOSITORY_ID} should not be set.
*/
public List<Repository> getRepositories(Map<String, String> parameters, ObjectFactory objectFactory,
- AuthenticationProvider authenticationProvider, Cache cache) {
- CmisBinding binding = CmisBindingHelper.createBinding(parameters, authenticationProvider);
+ AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
+ CmisBinding binding = CmisBindingHelper.createBinding(parameters, authenticationProvider, typeDefCache);
List<RepositoryInfo> repositoryInfos = binding.getRepositoryService().getRepositoryInfos(null);
List<Repository> result = new ArrayList<Repository>();
for (RepositoryInfo data : repositoryInfos) {
result.add(new RepositoryImpl(data, parameters, this, objectFactory, binding.getAuthenticationProvider(),
- cache));
+ cache, typeDefCache));
}
return result;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionImpl.java Sat Feb 22 18:34:57 2014
@@ -47,6 +47,7 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.client.api.SecondaryType;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.Tree;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
import org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl;
import org.apache.chemistry.opencmis.client.runtime.repository.ObjectFactoryImpl;
@@ -149,6 +150,11 @@ public class SessionImpl implements Sess
private final boolean cachePathOmit;
/*
+ * Type cache.
+ */
+ private TypeDefinitionCache typeDefCache;
+
+ /*
* Repository info (serializable)
*/
private RepositoryInfo repositoryInfo;
@@ -162,7 +168,7 @@ public class SessionImpl implements Sess
* Constructor.
*/
public SessionImpl(Map<String, String> parameters, ObjectFactory objectFactory,
- AuthenticationProvider authenticationProvider, Cache cache) {
+ AuthenticationProvider authenticationProvider, Cache cache, TypeDefinitionCache typeDefCache) {
if (parameters == null) {
throw new IllegalArgumentException("No parameters provided!");
}
@@ -173,6 +179,7 @@ public class SessionImpl implements Sess
this.objectFactory = (objectFactory == null ? createObjectFactory() : objectFactory);
this.authenticationProvider = authenticationProvider;
this.cache = (cache == null ? createCache() : cache);
+ this.typeDefCache = typeDefCache;
cachePathOmit = Boolean.parseBoolean(parameters.get(SessionParameter.CACHE_PATH_OMIT));
}
@@ -790,7 +797,7 @@ public class SessionImpl implements Sess
public void connect() {
lock.writeLock().lock();
try {
- this.binding = CmisBindingHelper.createBinding(parameters, authenticationProvider);
+ this.binding = CmisBindingHelper.createBinding(parameters, authenticationProvider, typeDefCache);
/* get initial repository id from session parameter */
String repositoryId = parameters.get(SessionParameter.REPOSITORY_ID);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/repository/RepositoryImpl.java Sat Feb 22 18:34:57 2014
@@ -24,6 +24,7 @@ import java.util.Map;
import org.apache.chemistry.opencmis.client.api.ObjectFactory;
import org.apache.chemistry.opencmis.client.api.Repository;
import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.client.bindings.cache.TypeDefinitionCache;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
import org.apache.chemistry.opencmis.commons.SessionParameter;
@@ -40,12 +41,14 @@ public class RepositoryImpl extends Repo
private final ObjectFactory objectFactory;
private final AuthenticationProvider authenticationProvider;
private final Cache cache;
+ private final TypeDefinitionCache typeDefCache;
/**
* Constructor.
*/
public RepositoryImpl(RepositoryInfo data, Map<String, String> parameters, SessionFactoryImpl sessionFactory,
- ObjectFactory objectFactory, AuthenticationProvider authenticationProvider, Cache cache) {
+ ObjectFactory objectFactory, AuthenticationProvider authenticationProvider, Cache cache,
+ TypeDefinitionCache typeDefCache) {
super(data);
assert sessionFactory != null;
@@ -57,10 +60,11 @@ public class RepositoryImpl extends Repo
this.objectFactory = objectFactory;
this.authenticationProvider = authenticationProvider;
this.cache = cache;
+ this.typeDefCache = typeDefCache;
}
@SuppressWarnings("unchecked")
public <T extends Session> T createSession() {
- return (T) sessionFactory.createSession(parameters, objectFactory, authenticationProvider, cache);
+ return (T) sessionFactory.createSession(parameters, objectFactory, authenticationProvider, cache, typeDefCache);
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/QueryStatementTest.java Sat Feb 22 18:34:57 2014
@@ -32,7 +32,7 @@ public class QueryStatementTest {
@Test
public void testStaticQueries() {
- Session session = new SessionImpl(new HashMap<String, String>(), null, null, null);
+ Session session = new SessionImpl(new HashMap<String, String>(), null, null, null, null);
String query;
QueryStatement st;
@@ -52,7 +52,7 @@ public class QueryStatementTest {
@Test
public void testWherePlacholder() {
- Session session = new SessionImpl(new HashMap<String, String>(), null, null, null);
+ Session session = new SessionImpl(new HashMap<String, String>(), null, null, null, null);
String query;
QueryStatement st;
@@ -81,41 +81,36 @@ public class QueryStatementTest {
// contains
- // *, ? and - are treated as text search operators: 1st level escaping: none, 2nd level escaping: none
- // \*, \? and \- are used as literals, 1st level escaping: none, 2nd level escaping: \\*, \\?, \\-
- // ' and " are used as literals, 1st level escaping: \', \", 2nd level escaping: \\\', \\\",
- // \ plus any other character, 1st level escaping \\ plus character, 2nd level: \\\\ plus character
+ // *, ? and - are treated as text search operators: 1st level escaping:
+ // none, 2nd level escaping: none
+ // \*, \? and \- are used as literals, 1st level escaping: none, 2nd
+ // level escaping: \\*, \\?, \\-
+ // ' and " are used as literals, 1st level escaping: \', \", 2nd level
+ // escaping: \\\', \\\",
+ // \ plus any other character, 1st level escaping \\ plus character, 2nd
+ // level: \\\\ plus character
query = "SELECT * FROM cmis:document WHERE CONTAINS(?)";
st = new QueryStatementImpl(session, query);
st.setStringContains(1, "John's");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\\\'s')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\\\'s')", st.toQueryString());
st.setStringContains(1, "foo -bar");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo -bar')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo -bar')", st.toQueryString());
st.setStringContains(1, "foo*");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo*')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo*')", st.toQueryString());
st.setStringContains(1, "foo?");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo?')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo?')", st.toQueryString());
st.setStringContains(1, "foo\\-bar");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\-bar')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\-bar')", st.toQueryString());
st.setStringContains(1, "foo\\*");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\*')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\*')", st.toQueryString());
st.setStringContains(1, "foo\\?");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\?')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\?')", st.toQueryString());
st.setStringContains(1, "\"Cool\"");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('\\\\\\\"Cool\\\\\\\"')",
- st.toQueryString());
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('\\\\\\\"Cool\\\\\\\"')", st.toQueryString());
st.setStringContains(1, "c:\\MyDcuments");
- assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('c:\\\\MyDcuments')",
- st.toQueryString());
-
+ assertEquals("SELECT * FROM cmis:document WHERE CONTAINS('c:\\\\MyDcuments')", st.toQueryString());
+
// ids
query = "SELECT * FROM cmis:document WHERE abc:id = ?";
st = new QueryStatementImpl(session, query);
@@ -170,11 +165,11 @@ public class QueryStatementTest {
assertEquals("SELECT * FROM cmis:document WHERE abc:dateTime "
+ "IN (TIMESTAMP '2012-02-02T03:04:05.000Z',TIMESTAMP '2012-02-02T03:04:05.000Z')", st.toQueryString());
}
-
-// @Test
+
+ // @Test
public void testQueryApiEscaping() {
// contains
- Session session = new SessionImpl(new HashMap<String, String>(), null, null, null);
+ Session session = new SessionImpl(new HashMap<String, String>(), null, null, null, null);
String query = "SELECT * FROM cmis:document WHERE CONTAINS(?)";
String ss = "a\\xc";
@@ -182,10 +177,10 @@ public class QueryStatementTest {
System.out.println(ss);
QueryStatement st = new QueryStatementImpl(session, query);
st.setStringContains(1, "John's");
- System.out.println("setStringContains: "+ st.toQueryString());
+ System.out.println("setStringContains: " + st.toQueryString());
String expected = "SELECT * FROM cmis:document WHERE CONTAINS('John\\\'s')";
System.out.println("Expected: " + expected);
-
+
assertEquals(expected, st.toQueryString());
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java?rev=1570876&r1=1570875&r2=1570876&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/SessionParameter.java Sat Feb 22 18:34:57 2014
@@ -217,6 +217,15 @@ package org.apache.chemistry.opencmis.co
* <td>org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl</td>
* </tr>
* <tr>
+ * <td>{@link #TYPE_DEFINITION_CACHE_CLASS}</td>
+ * <td>Type definition cache implementation class</td>
+ * <td>all</td>
+ * <td>class name</td>
+ * <td>no</td>
+ * <td>
+ * org.apache.chemistry.opencmis.client.bindings.impl.TypeDefinitionCacheImpl</td>
+ * </tr>
+ * <tr>
* <td>{@link #CACHE_SIZE_OBJECTS}</td>
* <td>Object cache size</td>
* <td>all</td>
@@ -625,6 +634,7 @@ public final class SessionParameter {
public static final String OBJECT_FACTORY_CLASS = "org.apache.chemistry.opencmis.objectfactory.classname";
public static final String CACHE_CLASS = "org.apache.chemistry.opencmis.cache.classname";
+ public static final String TYPE_DEFINITION_CACHE_CLASS = "org.apache.chemistry.opencmis.cache.types.classname";
public static final String REPOSITORY_ID = "org.apache.chemistry.opencmis.session.repository.id";
}