You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2014/10/28 12:01:30 UTC
svn commit: r1634843 - in
/sling/trunk/contrib/extensions/replication/core/src:
main/java/org/apache/sling/replication/agent/impl/
main/java/org/apache/sling/replication/component/impl/
main/java/org/apache/sling/replication/packaging/ main/java/org/ap...
Author: mpetria
Date: Tue Oct 28 11:01:29 2014
New Revision: 1634843
URL: http://svn.apache.org/r1634843
Log:
SLING-4109: use a wrapping package builder to hide true package ids
Added:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExportException.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImportException.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageUploadException.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/SharedReplicationPackage.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackage.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackageBuilder.java
Modified:
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/AdvancedRemoteReplicationPackageImporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RepositoryReplicationPackageImporter.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java
sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java
sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterTest.java
sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterTest.java
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgent.java Tue Oct 28 11:01:29 2014
@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.Properties;
import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.replication.agent.ReplicationAgent;
@@ -40,6 +41,7 @@ import org.apache.sling.replication.even
import org.apache.sling.replication.event.ReplicationEventType;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.packaging.ReplicationPackageExporter;
+import org.apache.sling.replication.packaging.ReplicationPackageImportException;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
import org.apache.sling.replication.queue.ReplicationQueue;
import org.apache.sling.replication.queue.ReplicationQueueDistributionStrategy;
@@ -131,14 +133,28 @@ public class SimpleReplicationAgent impl
public ReplicationResponse execute(ResourceResolver resourceResolver, ReplicationRequest replicationRequest)
throws ReplicationAgentException {
+
+
+
+ ResourceResolver agentResourceResolver = null;
+
try {
+ agentResourceResolver = getAgentResourceResolver();
+
replicationRequestAuthorizationStrategy.checkPermission(resourceResolver, replicationRequest);
- List<ReplicationPackage> replicationPackages = buildPackages(replicationRequest);
- return schedule(replicationPackages);
+
+
+ List<ReplicationPackage> replicationPackages = buildPackages(agentResourceResolver, replicationRequest);
+
+ return schedule(agentResourceResolver, replicationPackages);
} catch (Exception e) {
log.error("Error executing replication request {}", replicationRequest, e);
throw new ReplicationAgentException(e);
}
+ finally {
+ ungetAgentResourceResolver(agentResourceResolver);
+
+ }
}
@@ -146,14 +162,14 @@ public class SimpleReplicationAgent impl
return passive;
}
- private List<ReplicationPackage> buildPackages(ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
- ResourceResolver agentResourceResolver = getAgentResourceResolver();
+ private List<ReplicationPackage> buildPackages(ResourceResolver agentResourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
+ List<ReplicationPackage> replicationPackages = replicationPackageExporter.exportPackages(agentResourceResolver, replicationRequest);
- return replicationPackageExporter.exportPackage(agentResourceResolver, replicationRequest);
+ return replicationPackages;
}
- private ReplicationResponse schedule(List<ReplicationPackage> replicationPackages) {
+ private ReplicationResponse schedule(ResourceResolver agentResourceResolver, List<ReplicationPackage> replicationPackages) {
// TODO : create a composite replication response otherwise only the last response will be returned
ReplicationResponse replicationResponse = new ReplicationResponse();
@@ -249,16 +265,18 @@ public class SimpleReplicationAgent impl
private boolean processQueue(ReplicationQueueItem queueItem) {
boolean success = false;
log.debug("reading package with id {}", queueItem.getId());
- ResourceResolver resourceResolver = getAgentResourceResolver();
+ ResourceResolver agentResourceResolver = null;
try {
- ReplicationPackage replicationPackage = replicationPackageExporter.exportPackageById(resourceResolver, queueItem.getId());
+ agentResourceResolver = getAgentResourceResolver();
+
+ ReplicationPackage replicationPackage = replicationPackageExporter.getPackage(agentResourceResolver, queueItem.getId());
if (replicationPackage != null) {
replicationPackage.getInfo().fillInfo(queueItem.getPackageInfo());
- replicationPackageImporter.importPackage(resourceResolver, replicationPackage);
+ replicationPackageImporter.importPackage(agentResourceResolver, replicationPackage);
Dictionary<Object, Object> properties = new Properties();
properties.put("replication.package.paths", replicationPackage.getPaths());
@@ -271,26 +289,40 @@ public class SimpleReplicationAgent impl
log.warn("replication package with id {} does not exist", queueItem.getId());
}
- } catch (ReplicationPackageReadingException e) {
+ } catch (ReplicationPackageImportException e) {
log.error("could not process transport queue", e);
+ } catch (LoginException e) {
+ log.error("cannot obtain resource resolver", e);
+ } finally {
+ ungetAgentResourceResolver(agentResourceResolver);
}
return success;
}
- private ResourceResolver getAgentResourceResolver() {
+ private ResourceResolver getAgentResourceResolver() throws LoginException {
ResourceResolver resourceResolver = null;
Map<String, Object> authenticationInfo = new HashMap<String, Object>();
authenticationInfo.put(ResourceResolverFactory.SUBSERVICE, subServiceName);
- try {
- resourceResolver = resourceResolverFactory.getServiceResourceResolver(authenticationInfo);
- } catch (LoginException e) {
- log.error("cannot obtain a resource resolver for service {}", subServiceName, e);
- }
+ resourceResolver = resourceResolverFactory.getServiceResourceResolver(authenticationInfo);
+
return resourceResolver;
}
+ private void ungetAgentResourceResolver(ResourceResolver resourceResolver) {
+
+ if (resourceResolver != null) {
+ try {
+ resourceResolver.commit();
+ } catch (PersistenceException e) {
+ log.error("cannot commit changes to resource resolver", e);
+ }
+ resourceResolver.close();
+ }
+
+ }
+
class PackageQueueProcessor implements ReplicationQueueProcessor {
public boolean process(String queueName, ReplicationQueueItem packageInfo) {
log.info("running package queue processor for queue {}", queueName);
@@ -306,11 +338,17 @@ public class SimpleReplicationAgent impl
}
public void handle(ReplicationRequest request) {
+ ResourceResolver agentResourceResolver = null;
try {
- ResourceResolver resourceResolver = getAgentResourceResolver();
- agent.execute(resourceResolver, request);
+ agentResourceResolver = getAgentResourceResolver();
+ agent.execute(agentResourceResolver, request);
} catch (ReplicationAgentException e) {
log.error("Error executing handler", e);
+ } catch (LoginException e) {
+ log.error("Cannot obtain resource resolver");
+ }
+ finally {
+ ungetAgentResourceResolver(agentResourceResolver);
}
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java Tue Oct 28 11:01:29 2014
@@ -52,6 +52,7 @@ import org.apache.sling.replication.pack
import org.apache.sling.replication.queue.ReplicationQueueDistributionStrategy;
import org.apache.sling.replication.queue.ReplicationQueueProvider;
import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
+import org.apache.sling.replication.serialization.impl.ResourceSharedReplicationPackageBuilder;
import org.apache.sling.replication.serialization.impl.vlt.FileVaultReplicationPackageBuilder;
import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
import org.apache.sling.replication.transport.authentication.impl.UserCredentialsTransportAuthenticationProvider;
@@ -297,7 +298,7 @@ public class DefaultReplicationComponent
String factory = PropertiesUtil.toString(properties.get(COMPONENT_TYPE), COMPONENT_TYPE_SERVICE);
if (PACKAGE_BUILDER_FILEVLT.equals(factory)) {
- return new FileVaultReplicationPackageBuilder(packaging, replicationEventFactory);
+ return new ResourceSharedReplicationPackageBuilder(new FileVaultReplicationPackageBuilder(packaging, replicationEventFactory));
}
return null;
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackage.java Tue Oct 28 11:01:29 2014
@@ -28,30 +28,31 @@ import java.io.Serializable;
public interface ReplicationPackage extends Serializable {
/**
- * get package id
+ * get package id. the id is a unique string that can be used to retrieve
+ * the package from an {@link ReplicationPackageExporter}
*
- * @return the package id as a <code>String</code>
+ * @return the package id
*/
String getId();
/**
* get the paths covered by this package
*
- * @return an array of <code>String</code> paths
+ * @return an array of paths
*/
String[] getPaths();
/**
* get the action this package is used for
*
- * @return the action as a <code>String</code>
+ * @return the action
*/
String getAction();
/**
* get the type of package
*
- * @return the package type as a <code>String</code>
+ * @return the package type
*/
String getType();
@@ -67,12 +68,12 @@ public interface ReplicationPackage exte
/**
* get package stream length
*
- * @return the package length as a <code>long</code>
+ * @return the package length
*/
long getLength();
/**
- * releases all resources associated with the package id
+ * releases all resources associated with this package
*/
void delete();
Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExportException.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExportException.java?rev=1634843&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExportException.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExportException.java Tue Oct 28 11:01:29 2014
@@ -0,0 +1,34 @@
+/*
+ * 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.sling.replication.packaging;
+
+/**
+ * This represents an error happening while exporting a {@link ReplicationPackage}
+ */
+@SuppressWarnings("serial")
+public class ReplicationPackageExportException extends Exception {
+
+ public ReplicationPackageExportException(String message) {
+ super(message);
+ }
+
+ public ReplicationPackageExportException(Throwable t) {
+ super(t);
+ }
+}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageExporter.java Tue Oct 28 11:01:29 2014
@@ -37,14 +37,18 @@ public interface ReplicationPackageExpor
* Exports the {@link org.apache.sling.replication.packaging.ReplicationPackage}s built from the
* passed {@link org.apache.sling.replication.communication.ReplicationRequest}.
*
+ * @param resourceResolver - the resource resolver used to export the packages
+ * @param replicationRequest - the request containing the information about which content is to be exported
* @return a <code>List</code> of {@link org.apache.sling.replication.packaging.ReplicationPackage}s
*/
- List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException;
+ List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException;
/**
- * Exports a {@link org.apache.sling.replication.packaging.ReplicationPackage} given its 'id', if it already exists.
+ * Retrieves a {@link org.apache.sling.replication.packaging.ReplicationPackage} given its 'id', if it already exists.
*
+ * @param resourceResolver - the resource resolver use to obtain the package.
+ * @param replicationPackageId - the id of the package to be retrieved
* @return a {@link org.apache.sling.replication.packaging.ReplicationPackage} if available, <code>null</code> otherwise
*/
- ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId);
+ ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId);
}
Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImportException.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImportException.java?rev=1634843&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImportException.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImportException.java Tue Oct 28 11:01:29 2014
@@ -0,0 +1,34 @@
+/*
+ * 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.sling.replication.packaging;
+
+/**
+ * This represents an error happening while importing a {@link org.apache.sling.replication.packaging.ReplicationPackage}
+ */
+@SuppressWarnings("serial")
+public class ReplicationPackageImportException extends Exception {
+
+ public ReplicationPackageImportException(String message) {
+ super(message);
+ }
+
+ public ReplicationPackageImportException(Throwable t) {
+ super(t);
+ }
+}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java Tue Oct 28 11:01:29 2014
@@ -32,18 +32,20 @@ public interface ReplicationPackageImpor
/**
* Imports the given replication package
*
+ * @param resourceResolver - the resource resolver used to import the resources
* @param replicationPackage - the package to be imported
* @return <code>true</code> if the import succeeded, <code>false</code> otherwise
*/
- boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageReadingException;
+ boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageImportException;
/**
- * reads a stream and tries to convert it to a {@link ReplicationPackage} this provider can read and install
+ * Uploads a stream and tries to convert it to a {@link ReplicationPackage} this importer can import
*
+ * @param resourceResolver - the resource resolver used to read the package
* @param stream the {@link InputStream} of the package to read
* @return a {@link ReplicationPackage} if it can read it from the stream
* @throws ReplicationPackageReadingException when the stream cannot be read as a {@link ReplicationPackage}
*/
- ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException;
+ ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException;
}
Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageUploadException.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageUploadException.java?rev=1634843&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageUploadException.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageUploadException.java Tue Oct 28 11:01:29 2014
@@ -0,0 +1,34 @@
+/*
+ * 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.sling.replication.packaging;
+
+/**
+ * This represents an error happening while uploading a {@link ReplicationPackage}
+ */
+@SuppressWarnings("serial")
+public class ReplicationPackageUploadException extends Exception {
+
+ public ReplicationPackageUploadException(String message) {
+ super(message);
+ }
+
+ public ReplicationPackageUploadException(Throwable t) {
+ super(t);
+ }
+}
Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/SharedReplicationPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/SharedReplicationPackage.java?rev=1634843&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/SharedReplicationPackage.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/SharedReplicationPackage.java Tue Oct 28 11:01:29 2014
@@ -0,0 +1,39 @@
+/*
+ * 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.sling.replication.packaging;
+
+/**
+ * A {@link ReplicationPackage} that offers basic reference counting
+ */
+public interface SharedReplicationPackage extends ReplicationPackage {
+
+
+ /**
+ * acquire a reference to this package and increase the reference count.
+ */
+ void acquire();
+
+ /**
+ * release a reference to this package and decrease the reference count.
+ * when no more references are hold the package <code>delete</code> method is called.
+ */
+ void release();
+
+}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporter.java Tue Oct 28 11:01:29 2014
@@ -57,7 +57,7 @@ public class AgentReplicationPackageExpo
this.packageBuilder = packageBuilder;
}
- public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) {
+ public List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) {
List<ReplicationPackage> result = new ArrayList<ReplicationPackage>();
try {
@@ -81,7 +81,7 @@ public class AgentReplicationPackageExpo
return result;
}
- public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
return null;
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/AgentReplicationPackageExporterFactory.java Tue Oct 28 11:01:29 2014
@@ -71,13 +71,13 @@ public class AgentReplicationPackageExpo
packageExporter = replicationComponentFactory.createComponent(ReplicationPackageExporter.class, config, this);
}
- public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
+ public List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
- return packageExporter.exportPackage(resourceResolver, replicationRequest);
+ return packageExporter.exportPackages(resourceResolver, replicationRequest);
}
- public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
- return packageExporter.exportPackageById(resourceResolver, replicationPackageId);
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
+ return packageExporter.getPackage(resourceResolver, replicationPackageId);
}
public <ComponentType extends ReplicationComponent> ComponentType getComponent(Class<ComponentType> type, String componentName) {
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporter.java Tue Oct 28 11:01:29 2014
@@ -40,7 +40,7 @@ public class LocalReplicationPackageExpo
this.packageBuilder = packageBuilder;
}
- public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
+ public List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
List<ReplicationPackage> result = new ArrayList<ReplicationPackage>();
ReplicationPackage createdPackage = packageBuilder.createPackage(resourceResolver, replicationRequest);
@@ -50,7 +50,7 @@ public class LocalReplicationPackageExpo
return result;
}
- public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
return packageBuilder.getPackage(resourceResolver, replicationPackageId);
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterFactory.java Tue Oct 28 11:01:29 2014
@@ -67,11 +67,11 @@ public class LocalReplicationPackageExpo
}
- public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
- return exporter.exportPackage(resourceResolver, replicationRequest);
+ public List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
+ return exporter.exportPackages(resourceResolver, replicationRequest);
}
- public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
- return exporter.exportPackageById(resourceResolver, replicationPackageId);
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
+ return exporter.getPackage(resourceResolver, replicationPackageId);
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporter.java Tue Oct 28 11:01:29 2014
@@ -71,7 +71,7 @@ public class RemoteReplicationPackageExp
transportEndpointStrategyType);
}
- public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
+ public List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
try {
List<ReplicationPackage> replicationPackages = transportHandler.retrievePackages(resourceResolver, replicationRequest);
// for (ReplicationPackage replicationPackage : replicationPackages) {
@@ -83,7 +83,7 @@ public class RemoteReplicationPackageExp
}
}
- public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
return packageBuilder.getPackage(resourceResolver, replicationPackageId);
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterFactory.java Tue Oct 28 11:01:29 2014
@@ -101,12 +101,12 @@ public class RemoteReplicationPackageExp
exporter = null;
}
- public List<ReplicationPackage> exportPackage(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
- return exporter.exportPackage(resourceResolver, replicationRequest);
+ public List<ReplicationPackage> exportPackages(ResourceResolver resourceResolver, ReplicationRequest replicationRequest) throws ReplicationPackageBuildingException {
+ return exporter.exportPackages(resourceResolver, replicationRequest);
}
- public ReplicationPackage exportPackageById(ResourceResolver resourceResolver, String replicationPackageId) {
- return exporter.exportPackageById(resourceResolver, replicationPackageId);
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
+ return exporter.getPackage(resourceResolver, replicationPackageId);
}
public <ComponentType extends ReplicationComponent> ComponentType getComponent(Class<ComponentType> type, String componentName) {
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/AdvancedRemoteReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/AdvancedRemoteReplicationPackageImporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/AdvancedRemoteReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/AdvancedRemoteReplicationPackageImporter.java Tue Oct 28 11:01:29 2014
@@ -38,6 +38,7 @@ import org.apache.sling.replication.comm
import org.apache.sling.replication.event.ReplicationEventFactory;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.ReplicationPackageUploadException;
import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
import org.apache.sling.replication.transport.ReplicationTransportHandler;
import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
@@ -140,7 +141,7 @@ public class AdvancedRemoteReplicationPa
return result;
}
- public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
+ public ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException {
return null;
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporter.java Tue Oct 28 11:01:29 2014
@@ -27,7 +27,9 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.replication.event.ReplicationEventFactory;
import org.apache.sling.replication.event.ReplicationEventType;
import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.ReplicationPackageImportException;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.ReplicationPackageUploadException;
import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
import org.slf4j.Logger;
@@ -63,7 +65,7 @@ public class LocalReplicationPackageImpo
}
- public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) {
+ public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageImportException {
boolean success = false;
try {
success = packageBuilder.installPackage(resourceResolver, replicationPackage);
@@ -76,23 +78,24 @@ public class LocalReplicationPackageImpo
dictionary.put("replication.path", replicationPackage.getPaths());
replicationEventFactory.generateEvent(ReplicationEventType.PACKAGE_INSTALLED, dictionary);
- replicationPackage.delete();
} else {
log.warn("could not read a replication package");
}
} catch (Exception e) {
log.error("cannot import a package from the given stream of type {}", replicationPackage.getType());
+ throw new ReplicationPackageImportException(e);
}
return success;
}
- public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
+ public ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException {
try {
return packageBuilder.readPackage(resourceResolver, stream);
} catch (Exception e) {
- log.error("cannot read a package from the given stream");
+ log.error("cannot read a package from the given stream", e);
+ throw new ReplicationPackageUploadException(e);
+
}
- return null;
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/LocalReplicationPackageImporterFactory.java Tue Oct 28 11:01:29 2014
@@ -30,7 +30,9 @@ import org.apache.felix.scr.annotations.
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.replication.component.ReplicationComponentFactory;
import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.ReplicationPackageImportException;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.ReplicationPackageUploadException;
import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,12 +67,12 @@ public class LocalReplicationPackageImpo
}
- public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageReadingException {
+ public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageImportException {
return importer.importPackage(resourceResolver, replicationPackage);
}
- public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
- return importer.readPackage(resourceResolver, stream);
+ public ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException {
+ return importer.uploadPackage(resourceResolver, stream);
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporter.java Tue Oct 28 11:01:29 2014
@@ -26,6 +26,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.replication.communication.ReplicationEndpoint;
import org.apache.sling.replication.packaging.ReplicationPackage;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.ReplicationPackageUploadException;
import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
import org.apache.sling.replication.transport.ReplicationTransportHandler;
import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
@@ -80,7 +81,7 @@ public class RemoteReplicationPackageImp
return result;
}
- public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
+ public ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException {
return null;
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RemoteReplicationPackageImporterFactory.java Tue Oct 28 11:01:29 2014
@@ -34,7 +34,9 @@ import org.apache.sling.replication.comp
import org.apache.sling.replication.component.ReplicationComponentFactory;
import org.apache.sling.replication.component.ReplicationComponentProvider;
import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.ReplicationPackageImportException;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.ReplicationPackageUploadException;
import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
import org.osgi.framework.BundleContext;
@@ -92,12 +94,12 @@ public class RemoteReplicationPackageImp
}
- public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageReadingException {
+ public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageImportException {
return importer.importPackage(resourceResolver, replicationPackage);
}
- public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
- return importer.readPackage(resourceResolver, stream);
+ public ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException {
+ return importer.uploadPackage(resourceResolver, stream);
}
public <ComponentType extends ReplicationComponent> ComponentType getComponent(Class<ComponentType> type, String componentName) {
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RepositoryReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RepositoryReplicationPackageImporter.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RepositoryReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/impl/importer/RepositoryReplicationPackageImporter.java Tue Oct 28 11:01:29 2014
@@ -38,7 +38,9 @@ import org.apache.sling.replication.comm
import org.apache.sling.replication.event.ReplicationEventFactory;
import org.apache.sling.replication.event.ReplicationEventType;
import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.ReplicationPackageImportException;
import org.apache.sling.replication.packaging.ReplicationPackageImporter;
+import org.apache.sling.replication.packaging.ReplicationPackageUploadException;
import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
import org.apache.sling.replication.transport.authentication.TransportAuthenticationContext;
import org.apache.sling.replication.transport.authentication.TransportAuthenticationProvider;
@@ -49,9 +51,6 @@ import org.slf4j.LoggerFactory;
* {@link ReplicationPackageImporter} importing
* {@link ReplicationPackage} stream + type into an underlying JCR repository.
*/
-@Component(label = "Repository Replication Package Importer")
-@Service(value = ReplicationPackageImporter.class)
-@Property(name = "name", value = RepositoryReplicationPackageImporter.NAME)
public class RepositoryReplicationPackageImporter implements ReplicationPackageImporter {
static final String NAME = "repository";
@@ -60,13 +59,10 @@ public class RepositoryReplicationPackag
private final Logger log = LoggerFactory.getLogger(getClass());
- @Reference
private SlingRepository repository;
- @Reference
private ReplicationEventFactory replicationEventFactory;
- @Reference
private TransportAuthenticationProvider<SlingRepository, Session> transportAuthenticationProvider;
public void deliverPackageToEndpoint(ReplicationPackage replicationPackage, ReplicationEndpoint replicationEndpoint)
@@ -113,11 +109,11 @@ public class RepositoryReplicationPackag
}
}
- public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageReadingException {
+ public boolean importPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageImportException {
return false;
}
- public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
+ public ReplicationPackage uploadPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageUploadException {
return null;
}
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/AbstractReplicationPackageBuilder.java Tue Oct 28 11:01:29 2014
@@ -141,9 +141,7 @@ public abstract class AbstractReplicatio
} catch (Exception e) {
throw new ReplicationPackageReadingException(e);
} finally {
- if (session != null) {
- session.logout();
- }
+ ungetSession(session);
}
return false;
@@ -171,6 +169,10 @@ public abstract class AbstractReplicatio
return session;
}
+ protected void ungetSession(Session session) {
+
+ }
+
protected abstract ReplicationPackage createPackageForAdd(ResourceResolver resourceResolver, ReplicationRequest request)
throws ReplicationPackageBuildingException;
Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackage.java?rev=1634843&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackage.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackage.java Tue Oct 28 11:01:29 2014
@@ -0,0 +1,141 @@
+/*
+ * 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.sling.replication.serialization.impl;
+
+import org.apache.sling.api.resource.ModifiableValueMap;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.ReplicationPackageInfo;
+import org.apache.sling.replication.packaging.SharedReplicationPackage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class ResourceSharedReplicationPackage implements SharedReplicationPackage {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private static final Object syncObject = new Object();
+
+
+ private static final String PN_REFERENCE_COUNT = "ref.count";
+
+ private final ResourceResolver resourceResolver;
+ private final String packagePath;
+ private final ReplicationPackage replicationPackage;
+
+ public ResourceSharedReplicationPackage(ResourceResolver resourceResolver, String packagePath, ReplicationPackage replicationPackage) {
+ this.resourceResolver = resourceResolver;
+ this.packagePath = packagePath;
+ this.replicationPackage = replicationPackage;
+ }
+
+ public void acquire() {
+ synchronized (syncObject) {
+ Resource resource = getProxyResource();
+ ModifiableValueMap valueMap = resource.adaptTo(ModifiableValueMap.class);
+ int refCount = valueMap.get(PN_REFERENCE_COUNT, 0);
+ refCount ++;
+ valueMap.put(PN_REFERENCE_COUNT, refCount);
+
+ try {
+ resourceResolver.commit();
+ } catch (PersistenceException e) {
+ log.error("cannot release package", e);
+ }
+ }
+ }
+
+ public void release() {
+ synchronized (syncObject) {
+ Resource resource = getProxyResource();
+ ModifiableValueMap valueMap = resource.adaptTo(ModifiableValueMap.class);
+ int refCount = valueMap.get(PN_REFERENCE_COUNT, 0);
+ refCount --;
+
+ if (refCount > 0) {
+ valueMap.put(PN_REFERENCE_COUNT, refCount);
+ }
+ else {
+ delete();
+ }
+
+ try {
+ resourceResolver.commit();
+ } catch (PersistenceException e) {
+ log.error("cannot release package", e);
+ }
+ }
+ }
+
+
+
+ public String getId() {
+ return packagePath;
+ }
+
+ public String[] getPaths() {
+ return replicationPackage.getPaths();
+ }
+
+ public String getAction() {
+ return replicationPackage.getAction();
+ }
+
+ public String getType() {
+ return replicationPackage.getType();
+ }
+
+ public InputStream createInputStream() throws IOException {
+ return replicationPackage.createInputStream();
+ }
+
+ public long getLength() {
+ return replicationPackage.getLength();
+ }
+
+ public void delete() {
+ Resource resource = getProxyResource();
+ try {
+ resourceResolver.delete(resource);
+ resourceResolver.commit();
+ } catch (PersistenceException e) {
+ log.error("cannot delete shared resource", e);
+ }
+ replicationPackage.delete();
+ }
+
+ public ReplicationPackageInfo getInfo() {
+ return replicationPackage.getInfo();
+ }
+
+ public ReplicationPackage getPackage() {
+ return replicationPackage;
+ }
+
+
+ private Resource getProxyResource() {
+ Resource resource = resourceResolver.getResource(packagePath);
+ return resource;
+ }
+
+}
Added: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackageBuilder.java?rev=1634843&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackageBuilder.java (added)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/ResourceSharedReplicationPackageBuilder.java Tue Oct 28 11:01:29 2014
@@ -0,0 +1,117 @@
+package org.apache.sling.replication.serialization.impl;
+
+
+import org.apache.sling.api.resource.*;
+import org.apache.sling.replication.communication.ReplicationRequest;
+import org.apache.sling.replication.packaging.ReplicationPackage;
+import org.apache.sling.replication.packaging.SharedReplicationPackage;
+import org.apache.sling.replication.serialization.ReplicationPackageBuilder;
+import org.apache.sling.replication.serialization.ReplicationPackageBuildingException;
+import org.apache.sling.replication.serialization.ReplicationPackageReadingException;
+
+import java.io.InputStream;
+import java.util.*;
+
+public class ResourceSharedReplicationPackageBuilder implements ReplicationPackageBuilder {
+
+ private String PN_ORIGINAL_ID = "original.package.id";
+ private String PN_ORIGINAL_ACTION = "original.package.action";
+ private String PN_ORIGINAL_PATHS = "original.package.paths";
+
+ private String PACKAGE_NAME_PREFIX = "replpackage";
+ private String sharedPackagesRoot = "/var/slingreplication/";
+
+ private final ReplicationPackageBuilder replicationPackageBuilder;
+
+ public ResourceSharedReplicationPackageBuilder(ReplicationPackageBuilder replicationPackageExporter) {
+ this.replicationPackageBuilder = replicationPackageExporter;
+ }
+
+
+
+ public ReplicationPackage createPackage(ResourceResolver resourceResolver, ReplicationRequest request) throws ReplicationPackageBuildingException {
+ ReplicationPackage replicationPackage = replicationPackageBuilder.createPackage(resourceResolver, request);
+
+ if (replicationPackage == null) {
+ return null;
+ }
+
+ try {
+ String packagePath = generatePathFromId(resourceResolver, replicationPackage);
+ ReplicationPackage sharedReplicationPackage = new ResourceSharedReplicationPackage(resourceResolver, packagePath, replicationPackage);
+
+ return sharedReplicationPackage;
+ }
+ catch (PersistenceException e) {
+ throw new ReplicationPackageBuildingException(e);
+ }
+ }
+
+ public ReplicationPackage readPackage(ResourceResolver resourceResolver, InputStream stream) throws ReplicationPackageReadingException {
+ ReplicationPackage replicationPackage = replicationPackageBuilder.readPackage(resourceResolver, stream);
+
+ if (replicationPackage == null) {
+ return null;
+ }
+
+ try {
+ String packagePath = generatePathFromId(resourceResolver, replicationPackage);
+ ReplicationPackage sharedReplicationPackage = new ResourceSharedReplicationPackage(resourceResolver, packagePath, replicationPackage);
+
+ return sharedReplicationPackage;
+ }
+ catch (PersistenceException e) {
+ throw new ReplicationPackageReadingException(e);
+ }
+ }
+
+ public ReplicationPackage getPackage(ResourceResolver resourceResolver, String replicationPackageId) {
+ String originalPackageId = retrieveIdFromPath(resourceResolver, replicationPackageId);
+ ReplicationPackage replicationPackage = replicationPackageBuilder.getPackage(resourceResolver, originalPackageId);
+
+ if (replicationPackage == null) {
+ return null;
+ }
+
+ ReplicationPackage sharedReplicationPackage = new ResourceSharedReplicationPackage(resourceResolver, replicationPackageId, replicationPackage);
+
+ return sharedReplicationPackage;
+ }
+
+ public boolean installPackage(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws ReplicationPackageReadingException {
+ if (! (replicationPackage instanceof ResourceSharedReplicationPackage)) {
+ return false;
+ }
+
+ ResourceSharedReplicationPackage sharedReplicationPackage = (ResourceSharedReplicationPackage) replicationPackage;
+
+ ReplicationPackage originalPackage = sharedReplicationPackage.getPackage();
+ return replicationPackageBuilder.installPackage(resourceResolver, originalPackage);
+ }
+
+
+ private String generatePathFromId(ResourceResolver resourceResolver, ReplicationPackage replicationPackage) throws PersistenceException {
+ String name = PACKAGE_NAME_PREFIX + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
+ String packagePath = sharedPackagesRoot + name;
+
+ Map<String, Object> properties = new HashMap<String, Object>();
+ properties.put(PN_ORIGINAL_ID, replicationPackage.getId());
+ properties.put(PN_ORIGINAL_ACTION, replicationPackage.getAction());
+ properties.put(PN_ORIGINAL_PATHS, replicationPackage.getPaths());
+
+ ResourceUtil.getOrCreateResource(resourceResolver, packagePath, properties, "nt:unstructured", true);
+ return packagePath;
+
+ }
+
+ private String retrieveIdFromPath(ResourceResolver resourceResolver, String packagePath) {
+ if (!packagePath.startsWith(sharedPackagesRoot)) return null;
+
+ Resource resource = resourceResolver.getResource(packagePath);
+
+ ValueMap properties = resource.adaptTo(ValueMap.class);
+
+
+ return properties.get(PN_ORIGINAL_ID, null);
+ }
+}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java Tue Oct 28 11:01:29 2014
@@ -98,9 +98,7 @@ public class FileVaultReplicationPackage
} catch (Exception e) {
throw new ReplicationPackageBuildingException(e);
} finally {
- if (session != null) {
- session.logout();
- }
+ ungetSession(session);
}
}
@@ -167,9 +165,7 @@ public class FileVaultReplicationPackage
log.error("could not read / install the package", e);
throw new ReplicationPackageReadingException(e);
} finally {
- if (session != null) {
- session.logout();
- }
+ ungetSession(session);
}
return false;
}
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageExporterServlet.java Tue Oct 28 11:01:29 2014
@@ -73,7 +73,7 @@ public class ReplicationPackageExporterS
try {
// get first item
- List<ReplicationPackage> replicationPackages = replicationPackageExporter.exportPackage(resourceResolver, replicationRequest);
+ List<ReplicationPackage> replicationPackages = replicationPackageExporter.exportPackages(resourceResolver, replicationRequest);
if (replicationPackages.size() > 0) {
log.info("{} package(s) available for fetching, the first will be delivered", replicationPackages.size());
Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/servlet/ReplicationPackageImporterServlet.java Tue Oct 28 11:01:29 2014
@@ -66,9 +66,10 @@ public class ReplicationPackageImporterS
InputStream stream = request.getInputStream();
ResourceResolver resourceResolver = request.getResourceResolver();
try {
- ReplicationPackage replicationPackage = replicationPackageImporter.readPackage(resourceResolver, stream);
+ ReplicationPackage replicationPackage = replicationPackageImporter.uploadPackage(resourceResolver, stream);
if (replicationPackage != null) {
success = replicationPackageImporter.importPackage(resourceResolver, replicationPackage);
+ replicationPackage.delete();
}
if (!success) {
log.warn("cannot import replication package from request {}", request);
Modified: sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/agent/impl/SimpleReplicationAgentTest.java Tue Oct 28 11:01:29 2014
@@ -73,7 +73,7 @@ public class SimpleReplicationAgentTest
ResourceResolver resourceResolver = mock(ResourceResolver.class);
when(replicationPackage.getPaths()).thenReturn(new String[]{"/"});
- when(packageExporter.exportPackage(any(ResourceResolver.class), any(ReplicationRequest.class)))
+ when(packageExporter.exportPackages(any(ResourceResolver.class), any(ReplicationRequest.class)))
.thenReturn(Arrays.asList(replicationPackage));
when(queueProvider.getDefaultQueue(name)).thenReturn(
new SimpleReplicationQueue(name, "name"));
@@ -106,7 +106,7 @@ public class SimpleReplicationAgentTest
ReplicationQueueItemState state = new ReplicationQueueItemState();
state.setItemState(ReplicationQueueItemState.ItemState.SUCCEEDED);
when(distributionHandler.add(any(String.class), any(ReplicationQueueItem.class), eq(queueProvider))).thenReturn(state);
- when(packageExporter.exportPackage(any(ResourceResolver.class), any(ReplicationRequest.class)))
+ when(packageExporter.exportPackages(any(ResourceResolver.class), any(ReplicationRequest.class)))
.thenReturn(Arrays.asList(replicationPackage));
when(queueProvider.getDefaultQueue(name)).thenReturn(
new SimpleReplicationQueue(name, "name"));
@@ -137,9 +137,10 @@ public class SimpleReplicationAgentTest
ResourceResolver resourceResolver = mock(ResourceResolver.class);
when(replicationPackage.getPaths()).thenReturn(new String[]{"/"});
- when(packageExporter.exportPackage(resourceResolver, request)).thenReturn(Arrays.asList(replicationPackage));
+ when(packageExporter.exportPackages(resourceResolver, request)).thenReturn(Arrays.asList(replicationPackage));
when(queueProvider.getDefaultQueue(name)).thenReturn(
new SimpleReplicationQueue(name, "name"));
+
agent.execute(resourceResolver, request);
}
Modified: sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterTest.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterTest.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/LocalReplicationPackageExporterTest.java Tue Oct 28 11:01:29 2014
@@ -41,7 +41,7 @@ public class LocalReplicationPackageExpo
LocalReplicationPackageExporter localReplicationPackageExporter = new LocalReplicationPackageExporter(packageBuilder);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
ReplicationRequest replicationRequest = mock(ReplicationRequest.class);
- List<ReplicationPackage> replicationPackages = localReplicationPackageExporter.exportPackage(resourceResolver, replicationRequest);
+ List<ReplicationPackage> replicationPackages = localReplicationPackageExporter.exportPackages(resourceResolver, replicationRequest);
assertNotNull(replicationPackages);
assertTrue(replicationPackages.isEmpty());
}
Modified: sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterTest.java?rev=1634843&r1=1634842&r2=1634843&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterTest.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/packaging/impl/exporter/RemoteReplicationPackageExporterTest.java Tue Oct 28 11:01:29 2014
@@ -47,7 +47,7 @@ public class RemoteReplicationPackageExp
packageBuilder, authProvider, endpoints, strategy.name(), 1);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
ReplicationRequest replicationRequest = mock(ReplicationRequest.class);
- List<ReplicationPackage> replicationPackages = remoteReplicationPackageExporter.exportPackage(resourceResolver, replicationRequest);
+ List<ReplicationPackage> replicationPackages = remoteReplicationPackageExporter.exportPackages(resourceResolver, replicationRequest);
assertNotNull(replicationPackages);
assertTrue(replicationPackages.isEmpty());
}