Author: ningjiang
Date: Thu Aug 30 02:01:42 2012
New Revision: 1378786
URL: http://svn.apache.org/viewvc?rev=1378786&view=rev
Log:
CAMEL-5552 camel-cmis supports OSGi
Added:
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
Modified:
camel/trunk/components/camel-cmis/pom.xml
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
camel/trunk/platforms/karaf/features/src/main/resources/features.xml
Modified: camel/trunk/components/camel-cmis/pom.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/pom.xml?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- camel/trunk/components/camel-cmis/pom.xml (original)
+++ camel/trunk/components/camel-cmis/pom.xml Thu Aug 30 02:01:42 2012
@@ -34,7 +34,9 @@
<properties>
<camel.osgi.export.pkg>org.apache.camel.component.cmis.*</camel.osgi.export.pkg>
-
<!--<camel.osgi.import.pkg>!org.apache.chemistry.opencmis.client.runtime</camel.osgi.import.pkg>-->
+ <camel.osgi.activator>
+ org.apache.camel.component.cmis.osgi.Activator
+ </camel.osgi.activator>
</properties>
<dependencies>
@@ -48,6 +50,14 @@
<artifactId>chemistry-opencmis-client-impl</artifactId>
<version>${cmis-version}</version>
</dependency>
+
+ <!-- osgi support -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
<!-- for testing -->
<dependency>
Modified:
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
---
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
(original)
+++
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISConsumer.java
Thu Aug 30 02:01:42 2012
@@ -22,6 +22,7 @@ import java.util.Map;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.impl.ScheduledPollConsumer;
+import org.apache.chemistry.opencmis.client.api.OperationContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,6 +46,10 @@ public class CMISConsumer extends Schedu
protected int poll() throws Exception {
return this.sessionFacade.poll(this);
}
+
+ public OperationContext createOperationContext() {
+ return sessionFacade.createOperationContext();
+ }
int sendExchangeWithPropsAndBody(Map<String, Object> properties,
InputStream inputStream)
throws Exception {
Modified:
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
---
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
(original)
+++
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CMISSessionFacade.java
Thu Aug 30 02:01:42 2012
@@ -32,9 +32,6 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.client.api.OperationContext;
import org.apache.chemistry.opencmis.client.api.QueryResult;
import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.runtime.ObjectIdImpl;
-import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
-import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
@@ -66,9 +63,9 @@ public class CMISSessionFacade {
parameter.put(SessionParameter.PASSWORD, this.password);
if (this.repositoryId != null) {
parameter.put(SessionParameter.REPOSITORY_ID, this.repositoryId);
- this.session =
SessionFactoryImpl.newInstance().createSession(parameter);
+ this.session =
SessionFactoryLocator.getSessionFactory().createSession(parameter);
} else {
- this.session =
SessionFactoryImpl.newInstance().getRepositories(parameter).get(0).createSession();
+ this.session =
SessionFactoryLocator.getSessionFactory().getRepositories(parameter).get(0).createSession();
}
}
@@ -152,7 +149,7 @@ public class CMISSessionFacade {
}
public ItemIterable<QueryResult> executeQuery(String query) {
- OperationContext operationContext = new OperationContextImpl();
+ OperationContext operationContext = session.createOperationContext();
operationContext.setMaxItemsPerPage(pageSize);
return session.query(query, false, operationContext);
}
@@ -161,8 +158,7 @@ public class CMISSessionFacade {
if
(CamelCMISConstants.CMIS_DOCUMENT.equals(queryResult.getPropertyValueById(PropertyIds.OBJECT_TYPE_ID))
||
CamelCMISConstants.CMIS_DOCUMENT.equals(queryResult.getPropertyValueById(PropertyIds.BASE_TYPE_ID)))
{
String objectId =
(String)queryResult.getPropertyById(PropertyIds.OBJECT_ID).getFirstValue();
- ObjectIdImpl objectIdImpl = new ObjectIdImpl(objectId);
- return
(org.apache.chemistry.opencmis.client.api.Document)session.getObject(objectIdImpl);
+ return
(org.apache.chemistry.opencmis.client.api.Document)session.getObject(objectId);
}
return null;
}
@@ -191,6 +187,10 @@ public class CMISSessionFacade {
return buf != null ? session.getObjectFactory()
.createContentStream(fileName, buf.length, mimeType, new
ByteArrayInputStream(buf)) : null;
}
+
+ public OperationContext createOperationContext() {
+ return session.createOperationContext();
+ }
public void setUsername(String username) {
this.username = username;
Modified:
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
---
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
(original)
+++
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/RecursiveTreeWalker.java
Thu Aug 30 02:01:42 2012
@@ -48,7 +48,8 @@ public class RecursiveTreeWalker {
int processFolderRecursively(Folder folder) throws Exception {
processFolderNode(folder);
- OperationContext operationContext = new OperationContextImpl();
+
+ OperationContext operationContext =
cmisConsumer.createOperationContext();
operationContext.setMaxItemsPerPage(pageSize);
int count = 0;
Added:
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java?rev=1378786&view=auto
==============================================================================
---
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
(added)
+++
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/SessionFactoryLocator.java
Thu Aug 30 02:01:42 2012
@@ -0,0 +1,64 @@
+/**
+ * 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;
+
+import java.lang.reflect.Method;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class SessionFactoryLocator {
+ private static final transient Logger LOG =
LoggerFactory.getLogger(SessionFactoryLocator.class);
+ private static SessionFactory sessionFactory;
+
+ private SessionFactoryLocator() {
+ //Utils class
+ }
+
+ public static void setSessionFactory(SessionFactory factory) {
+ sessionFactory = factory;
+ }
+
+ public static SessionFactory getSessionFactory() {
+ if (sessionFactory != null) {
+ return sessionFactory;
+ } else {
+ // create the sessionFactory in another way
+ sessionFactory = loadSessionFactoryFromClassPath();
+ return sessionFactory;
+ }
+ }
+
+ private static SessionFactory loadSessionFactoryFromClassPath() {
+ try {
+ Class<?> factoryClass = null;
+ factoryClass =
Class.forName("org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl");
+ if (factoryClass != null) {
+ Method method = factoryClass.getMethod("newInstance", new
Class<?>[0]);
+ return (SessionFactory)method.invoke(null, new Object[0]);
+ }
+ } catch (Exception ex) {
+ LOG.error("Cannot create the SessionFactoryImpl due to: {0}", ex);
+ throw new RuntimeCamelException(ex);
+ }
+ return null;
+ }
+
+
+}
Added:
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java?rev=1378786&view=auto
==============================================================================
---
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
(added)
+++
camel/trunk/components/camel-cmis/src/main/java/org/apache/camel/component/cmis/osgi/Activator.java
Thu Aug 30 02:01:42 2012
@@ -0,0 +1,45 @@
+/**
+ * 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.osgi;
+
+import org.apache.camel.component.cmis.SessionFactoryLocator;
+import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+// Locator the SessionFactoryImpl service
+public class Activator implements BundleActivator {
+ private ServiceReference reference;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ // get the reference of SessionFactory service
+ reference =
context.getServiceReference(SessionFactory.class.getName());
+ SessionFactory sessionFactory =
(SessionFactory)context.getService(reference);
+ SessionFactoryLocator.setSessionFactory(sessionFactory);
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ // release the reference
+ if (reference != null) {
+ context.ungetService(reference);
+ }
+ }
+
+}
Modified: camel/trunk/platforms/karaf/features/src/main/resources/features.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/features.xml?rev=1378786&r1=1378785&r2=1378786&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/features/src/main/resources/features.xml
(original)
+++ camel/trunk/platforms/karaf/features/src/main/resources/features.xml Thu
Aug 30 02:01:42 2012
@@ -105,12 +105,12 @@
<bundle>mvn:org.apache.camel/camel-castor/${project.version}</bundle>
</feature>
<!-- camel-cmis doesn't work yet -->
- <!--feature name='camel-cmis' version='${project.version}' resolver='(obr)'
start-level='50'>
+ <feature name='camel-cmis' version='${project.version}' resolver='(obr)'
start-level='50'>
<feature version='${project.version}'>camel-core</feature>
<feature version='${cxf-version-range}'>cxf-specs</feature>
<bundle
dependency='true'>mvn:org.apache.chemistry.opencmis/chemistry-opencmis-osgi-client/${cmis-bundle-version}</bundle>
<bundle>mvn:org.apache.camel/camel-cmis/${project.version}</bundle>
- </feature-->
+ </feature>
<feature name='camel-crypto' version='${project.version}' resolver='(obr)'
start-level='50'>
<feature version='${project.version}'>camel-core</feature>
<bundle
dependency='true'>mvn:commons-codec/commons-codec/${commons-codec-version}</bundle>