You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/02/26 07:38:38 UTC
camel git commit: CAMEL-9180 - camel-cmis Lazy Initialize Session
Facade
Repository: camel
Updated Branches:
refs/heads/master 1a54c78d2 -> e7b1cb426
CAMEL-9180 - camel-cmis Lazy Initialize Session Facade
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e7b1cb42
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e7b1cb42
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e7b1cb42
Branch: refs/heads/master
Commit: e7b1cb4262a4b9264e941cbcba8b0bf15ce620bb
Parents: 1a54c78
Author: lburgazzoli <lb...@gmail.com>
Authored: Thu Feb 25 18:44:58 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Feb 26 07:00:36 2016 +0100
----------------------------------------------------------------------
.../camel/component/cmis/CMISComponent.java | 17 +++++--
.../camel/component/cmis/CMISConsumer.java | 27 +++++++----
.../camel/component/cmis/CMISEndpoint.java | 42 +++++++++-------
.../camel/component/cmis/CMISProducer.java | 51 ++++++++++++--------
.../camel/component/cmis/CMISQueryProducer.java | 22 +++++++--
.../cmis/CMISSessionFacadeFactory.java | 22 +++++++++
.../camel/component/cmis/CMISProducerTest.java | 4 +-
7 files changed, 126 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISComponent.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISComponent.java
index dd66711..ba6ece2 100644
--- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISComponent.java
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISComponent.java
@@ -30,15 +30,24 @@ public class CMISComponent extends UriEndpointComponent {
super(CMISEndpoint.class);
}
- protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters)
- throws Exception {
+ protected Endpoint createEndpoint(String uri, final String remaining, final Map<String, Object> parameters) throws Exception {
boolean queryMode = removeQueryMode(parameters);
CMISSessionFacade sessionFacade = new CMISSessionFacade(remaining);
setProperties(sessionFacade, parameters);
- sessionFacade.initSession();
- CMISEndpoint endpoint = new CMISEndpoint(uri, this, sessionFacade);
+
+ CMISEndpoint endpoint = new CMISEndpoint(uri, this, new CMISSessionFacadeFactory() {
+ @Override
+ public CMISSessionFacade create() throws Exception {
+ CMISSessionFacade sessionFacade = new CMISSessionFacade(remaining);
+ setProperties(sessionFacade, parameters);
+
+ return sessionFacade;
+ }
+ });
+
endpoint.setQueryMode(queryMode);
+
return endpoint;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
index 8042d31..c17329b 100644
--- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
@@ -31,24 +31,22 @@ import org.slf4j.LoggerFactory;
*/
public class CMISConsumer extends ScheduledPollConsumer {
private static final Logger LOG = LoggerFactory.getLogger(CMISConsumer.class);
+ private final CMISSessionFacadeFactory sessionFacadeFactory;
private CMISSessionFacade sessionFacade;
- public CMISConsumer(CMISEndpoint endpoint, Processor processor) {
- super(endpoint, processor);
- }
-
- public CMISConsumer(CMISEndpoint cmisEndpoint, Processor processor, CMISSessionFacade sessionFacade) {
- this(cmisEndpoint, processor);
- this.sessionFacade = sessionFacade;
+ public CMISConsumer(CMISEndpoint cmisEndpoint, Processor processor, CMISSessionFacadeFactory sessionFacadeFactory) {
+ super(cmisEndpoint, processor);
+ this.sessionFacadeFactory = sessionFacadeFactory;
+ this.sessionFacade = null;
}
@Override
protected int poll() throws Exception {
- return this.sessionFacade.poll(this);
+ return getSessionFacade().poll(this);
}
- public OperationContext createOperationContext() {
- return sessionFacade.createOperationContext();
+ public OperationContext createOperationContext() throws Exception {
+ return getSessionFacade().createOperationContext();
}
int sendExchangeWithPropsAndBody(Map<String, Object> properties, InputStream inputStream)
@@ -60,4 +58,13 @@ public class CMISConsumer extends ScheduledPollConsumer {
getProcessor().process(exchange);
return 1;
}
+
+ private CMISSessionFacade getSessionFacade() throws Exception {
+ if (sessionFacade == null) {
+ sessionFacade = sessionFacadeFactory.create();
+ sessionFacade.initSession();
+ }
+
+ return sessionFacade;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISEndpoint.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISEndpoint.java
index c66f7b9..b7a4fb4 100644
--- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISEndpoint.java
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISEndpoint.java
@@ -20,43 +20,49 @@ import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The cmis component uses the Apache Chemistry client API and allows you to add/read nodes to/from a CMIS compliant content repositories.
*/
@UriEndpoint(scheme = "cmis", title = "CMIS", syntax = "cmis:url", consumerClass = CMISConsumer.class, label = "cms,database")
public class CMISEndpoint extends DefaultEndpoint {
+ private static final Logger LOG = LoggerFactory.getLogger(CMISEndpoint.class);
+
+ private final CMISSessionFacadeFactory sessionFacadeFactory;
+
+ @UriPath(description = "the cmis url")
+ @Metadata(required = "true")
+ private final String url;
- @UriParam
- private CMISSessionFacade sessionFacade;
@UriParam(label = "producer")
private boolean queryMode;
- public CMISEndpoint() {
- }
-
- public CMISEndpoint(String uri, CMISComponent component) {
- super(uri, component);
- }
+ public CMISEndpoint(String uri, CMISComponent cmisComponent, CMISSessionFacadeFactory sessionFacadeFactory) {
+ super(uri, cmisComponent);
- public CMISEndpoint(String uri, CMISComponent cmisComponent, CMISSessionFacade sessionFacade) {
- this(uri, cmisComponent);
- this.sessionFacade = sessionFacade;
+ this.url = uri;
+ this.sessionFacadeFactory = sessionFacadeFactory;
}
+ @Override
public Producer createProducer() throws Exception {
- if (this.queryMode) {
- return new CMISQueryProducer(this, sessionFacade);
- }
- return new CMISProducer(this, sessionFacade);
+ return this.queryMode
+ ? new CMISQueryProducer(this, sessionFacadeFactory)
+ : new CMISProducer(this, sessionFacadeFactory);
}
+ @Override
public Consumer createConsumer(Processor processor) throws Exception {
- CMISConsumer answer = new CMISConsumer(this, processor, sessionFacade);
- configureConsumer(answer);
- return answer;
+ CMISConsumer consumer = new CMISConsumer(this, processor, sessionFacadeFactory);
+ configureConsumer(consumer);
+
+ return consumer;
}
public boolean isSingleton() {
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java
index f3d1b76..dcc9f29 100644
--- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISProducer.java
@@ -44,11 +44,13 @@ import org.slf4j.LoggerFactory;
*/
public class CMISProducer extends DefaultProducer {
private static final Logger LOG = LoggerFactory.getLogger(CMISProducer.class);
- private final CMISSessionFacade cmisSessionFacade;
+ private final CMISSessionFacadeFactory sessionFacadeFactory;
+ private CMISSessionFacade sessionFacade;
- public CMISProducer(CMISEndpoint endpoint, CMISSessionFacade cmisSessionFacade) {
+ public CMISProducer(CMISEndpoint endpoint, CMISSessionFacadeFactory sessionFacadeFactory) {
super(endpoint);
- this.cmisSessionFacade = cmisSessionFacade;
+ this.sessionFacadeFactory = sessionFacadeFactory;
+ this.sessionFacade = null;
}
public void process(Exchange exchange) throws Exception {
@@ -57,22 +59,22 @@ public class CMISProducer extends DefaultProducer {
exchange.getOut().setBody(cmisObject.getId());
}
- private Map<String, Object> filterTypeProperties(Map<String, Object> properties) {
- Map<String, Object> result = new HashMap<String, Object>(properties.size());
+ private Map<String, Object> filterTypeProperties(Map<String, Object> properties) throws Exception {
+ Map<String, Object> result = new HashMap<>(properties.size());
String objectTypeName = CamelCMISConstants.CMIS_DOCUMENT;
if (properties.containsKey(PropertyIds.OBJECT_TYPE_ID)) {
objectTypeName = (String) properties.get(PropertyIds.OBJECT_TYPE_ID);
}
- Set<String> types = new HashSet<String>();
- types.addAll(cmisSessionFacade.getPropertiesFor(objectTypeName));
+ Set<String> types = new HashSet<>();
+ types.addAll(getSessionFacade().getPropertiesFor(objectTypeName));
- if (cmisSessionFacade.supportsSecondaries() && properties.containsKey(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
+ if (getSessionFacade().supportsSecondaries() && properties.containsKey(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
@SuppressWarnings("unchecked")
Collection<String> secondaryTypes = (Collection<String>) properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
for (String secondaryType : secondaryTypes) {
- types.addAll(cmisSessionFacade.getPropertiesFor(secondaryType));
+ types.addAll(getSessionFacade().getPropertiesFor(secondaryType));
}
}
@@ -96,7 +98,7 @@ public class CMISProducer extends DefaultProducer {
String fileName = message.getHeader(PropertyIds.NAME, String.class);
String mimeType = getMimeType(message);
byte[] buf = getBodyData(message);
- ContentStream contentStream = cmisSessionFacade.createContentStream(fileName, buf, mimeType);
+ ContentStream contentStream = getSessionFacade().createContentStream(fileName, buf, mimeType);
return storeDocument(parentFolder, cmisProperties, contentStream);
} else if (isFolder(message)) {
return storeFolder(parentFolder, cmisProperties);
@@ -105,15 +107,15 @@ public class CMISProducer extends DefaultProducer {
}
}
- private Folder getFolderOnPath(Exchange exchange, String path) {
+ private Folder getFolderOnPath(Exchange exchange, String path) throws Exception {
try {
- return (Folder) cmisSessionFacade.getObjectByPath(path);
+ return (Folder) getSessionFacade().getObjectByPath(path);
} catch (CmisObjectNotFoundException e) {
throw new RuntimeExchangeException("Path not found " + path, exchange, e);
}
}
- private String parentFolderPathFor(Message message) {
+ private String parentFolderPathFor(Message message) throws Exception {
String customPath = message.getHeader(CamelCMISConstants.CMIS_FOLDER_PATH, String.class);
if (customPath != null) {
return customPath;
@@ -130,15 +132,15 @@ public class CMISProducer extends DefaultProducer {
return "/";
}
- private boolean isFolder(Message message) {
+ private boolean isFolder(Message message) throws Exception {
String baseTypeId = message.getHeader(PropertyIds.OBJECT_TYPE_ID, String.class);
if (baseTypeId != null) {
- return CamelCMISConstants.CMIS_FOLDER.equals(cmisSessionFacade.getCMISTypeFor(baseTypeId));
+ return CamelCMISConstants.CMIS_FOLDER.equals(getSessionFacade().getCMISTypeFor(baseTypeId));
}
return message.getBody() == null;
}
- private Folder storeFolder(Folder parentFolder, Map<String, Object> cmisProperties) {
+ private Folder storeFolder(Folder parentFolder, Map<String, Object> cmisProperties) throws Exception {
if (!cmisProperties.containsKey(PropertyIds.OBJECT_TYPE_ID)) {
cmisProperties.put(PropertyIds.OBJECT_TYPE_ID, CamelCMISConstants.CMIS_FOLDER);
}
@@ -146,13 +148,13 @@ public class CMISProducer extends DefaultProducer {
return parentFolder.createFolder(cmisProperties);
}
- private Document storeDocument(Folder parentFolder, Map<String, Object> cmisProperties, ContentStream contentStream) {
+ private Document storeDocument(Folder parentFolder, Map<String, Object> cmisProperties, ContentStream contentStream) throws Exception {
if (!cmisProperties.containsKey(PropertyIds.OBJECT_TYPE_ID)) {
cmisProperties.put(PropertyIds.OBJECT_TYPE_ID, CamelCMISConstants.CMIS_DOCUMENT);
}
VersioningState versioningState = VersioningState.NONE;
- if (cmisSessionFacade.isObjectTypeVersionable((String) cmisProperties.get(PropertyIds.OBJECT_TYPE_ID))) {
+ if (getSessionFacade().isObjectTypeVersionable((String) cmisProperties.get(PropertyIds.OBJECT_TYPE_ID))) {
versioningState = VersioningState.MAJOR;
}
LOG.debug("Creating document with properties: {}", cmisProperties);
@@ -163,10 +165,10 @@ public class CMISProducer extends DefaultProducer {
ExchangeHelper.getMandatoryHeader(exchange, name, String.class);
}
- private boolean isDocument(Exchange exchange) {
+ private boolean isDocument(Exchange exchange) throws Exception {
String baseTypeId = exchange.getIn().getHeader(PropertyIds.OBJECT_TYPE_ID, String.class);
if (baseTypeId != null) {
- return CamelCMISConstants.CMIS_DOCUMENT.equals(cmisSessionFacade.getCMISTypeFor(baseTypeId));
+ return CamelCMISConstants.CMIS_DOCUMENT.equals(getSessionFacade().getCMISTypeFor(baseTypeId));
}
return exchange.getIn().getBody() != null;
}
@@ -182,4 +184,13 @@ public class CMISProducer extends DefaultProducer {
}
return mimeType;
}
+
+ private CMISSessionFacade getSessionFacade() throws Exception {
+ if (sessionFacade == null) {
+ sessionFacade = sessionFacadeFactory.create();
+ sessionFacade.initSession();
+ }
+
+ return sessionFacade;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISQueryProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISQueryProducer.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISQueryProducer.java
index 57810dc..1b5809e 100644
--- a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISQueryProducer.java
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISQueryProducer.java
@@ -28,11 +28,14 @@ import org.apache.chemistry.opencmis.client.api.QueryResult;
* The CMIS Query producer.
*/
public class CMISQueryProducer extends DefaultProducer {
- private final CMISSessionFacade cmisSessionFacade;
- public CMISQueryProducer(CMISEndpoint endpoint, CMISSessionFacade cmisSessionFacade) {
+ private final CMISSessionFacadeFactory sessionFacadeFactory;
+ private CMISSessionFacade sessionFacade;
+
+ public CMISQueryProducer(CMISEndpoint endpoint, CMISSessionFacadeFactory sessionFacadeFactory) {
super(endpoint);
- this.cmisSessionFacade = cmisSessionFacade;
+ this.sessionFacadeFactory = sessionFacadeFactory;
+ this.sessionFacade = null;
}
public void process(Exchange exchange) throws Exception {
@@ -46,8 +49,8 @@ public class CMISQueryProducer extends DefaultProducer {
Boolean retrieveContent = getRetrieveContent(exchange);
Integer readSize = getReadSize(exchange);
- ItemIterable<QueryResult> itemIterable = cmisSessionFacade.executeQuery(query);
- return cmisSessionFacade.retrieveResult(retrieveContent, readSize, itemIterable);
+ ItemIterable<QueryResult> itemIterable = getSessionFacade().executeQuery(query);
+ return getSessionFacade().retrieveResult(retrieveContent, readSize, itemIterable);
}
private Integer getReadSize(Exchange exchange) {
@@ -57,4 +60,13 @@ public class CMISQueryProducer extends DefaultProducer {
private Boolean getRetrieveContent(Exchange exchange) {
return exchange.getIn().getHeader(CamelCMISConstants.CAMEL_CMIS_RETRIEVE_CONTENT, Boolean.class);
}
+
+ private CMISSessionFacade getSessionFacade() throws Exception {
+ if (sessionFacade == null) {
+ sessionFacade = sessionFacadeFactory.create();
+ sessionFacade.initSession();
+ }
+
+ return sessionFacade;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacadeFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacadeFactory.java b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacadeFactory.java
new file mode 100644
index 0000000..0c293cb
--- /dev/null
+++ b/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacadeFactory.java
@@ -0,0 +1,22 @@
+/**
+ * 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.camel.component.cmis;
+
+interface CMISSessionFacadeFactory {
+ CMISSessionFacade create() throws Exception;
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/e7b1cb42/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java
index 06e1cab..c8748d3 100644
--- a/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java
+++ b/components/camel-cmis/src/test/java/org/apache/camel/component/cmis/CMISProducerTest.java
@@ -25,13 +25,13 @@ import org.apache.camel.NoSuchHeaderException;
import org.apache.camel.Produce;
import org.apache.camel.Producer;
import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ResolveEndpointFailedException;
import org.apache.camel.RuntimeExchangeException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.commons.PropertyIds;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.junit.Test;
public class CMISProducerTest extends CMISTestSupport {
@@ -146,7 +146,7 @@ public class CMISProducerTest extends CMISTestSupport {
assertEquals("secondaryTypePropValue", newNode.getPropertyValue("SecondaryStringProp"));
}
- @Test(expected = ResolveEndpointFailedException.class)
+ @Test(expected = CmisInvalidArgumentException.class)
public void failConnectingToNonExistingRepository() throws Exception {
Endpoint endpoint = context.getEndpoint("cmis://" + getUrl()
+ "?username=admin&password=admin&repositoryId=NON_EXISTING_ID");