You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2005/04/12 11:28:25 UTC
svn commit: r161036 - in lenya/trunk/src:
java/org/apache/lenya/cms/cocoon/source/ java/org/apache/lenya/cms/editors/
java/org/apache/lenya/cms/editors/forms/
java/org/apache/lenya/cms/metadata/usecases/
java/org/apache/lenya/cms/publication/
java/org/apache/lenya/cms/publication/util/
java/org/apache/lenya/cms/repository/ java/org/apache/lenya/cms/site/
java/org/apache/lenya/cms/site/tree/
java/org/apache/lenya/cms/site/usecases/ java/org/apache/lenya/cms/usecase/
java/org/apache/lenya/cms/workflow/usecases/ webapp/WEB-INF/
webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/
Author: andreas
Date: Tue Apr 12 02:28:20 2005
New Revision: 161036
URL: http://svn.apache.org/viewcvs?view=rev&rev=161036
Log:
added functionality to support pessimistic offline lock, fixed RCML path resolving for SourceNodes
Modified:
lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java
lenya/trunk/src/java/org/apache/lenya/cms/editors/EditDocument.java
lenya/trunk/src/java/org/apache/lenya/cms/editors/forms/FormsEditor.java
lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java
lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java
lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java
lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java
lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java
lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeNodeID.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateDocument.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateLanguage.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java
lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java
lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java
lenya/trunk/src/java/org/apache/lenya/cms/workflow/usecases/InvokeWorkflow.java
lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl
lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java
lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java Tue Apr 12 02:28:20 2005
@@ -86,7 +86,13 @@
}
this.node = (Node) map.get(Node.IDENTIFIABLE_TYPE, uri);
-
+ }
+
+ /**
+ * @return The repository node which is accessed by this source.
+ */
+ public Node getNode() {
+ return this.node;
}
protected Logger getLogger() {
Modified: lenya/trunk/src/java/org/apache/lenya/cms/editors/EditDocument.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/editors/EditDocument.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/editors/EditDocument.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/editors/EditDocument.java Tue Apr 12 02:28:20 2005
@@ -21,7 +21,7 @@
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
import org.apache.lenya.cms.workflow.WorkflowManager;
-import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Usecase to edit documents.
@@ -62,15 +62,7 @@
}
}
- /**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
- */
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
- try {
- getSourceDocument().lock();
- } catch (TransactionException e) {
- throw new UsecaseException(e);
- }
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
+ return getSourceDocument().getRepositoryNodes();
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/editors/forms/FormsEditor.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/editors/forms/FormsEditor.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/editors/forms/FormsEditor.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/editors/forms/FormsEditor.java Tue Apr 12 02:28:20 2005
@@ -45,7 +45,7 @@
import org.apache.excalibur.source.SourceResolver;
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
-import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.Transactionable;
import org.apache.lenya.xml.DocumentHelper;
import org.apache.lenya.xml.RelaxNG;
import org.apache.lenya.xml.XPath;
@@ -93,15 +93,10 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
- try {
- getSourceDocument().lock();
- } catch (TransactionException e) {
- throw new UsecaseException(e);
- }
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
+ return getSourceDocument().getRepositoryNodes();
}
/**
@@ -259,14 +254,12 @@
for (int paramIndex = 0; paramIndex < paramNames.length; paramIndex++) {
String pname = paramNames[paramIndex];
getLogger().debug("Parameter: " + pname + " = " + getParameterAsString(pname));
- System.out.println("Parameter: " + pname + " = " + getParameterAsString(pname));
// Extract the xpath to edit
if (pname.indexOf("edit[") >= 0) {
if (pname.endsWith("].x")) {
editSelect = pname.substring(5, pname.length() - 3);
getLogger().debug("Edit: " + editSelect);
- System.out.println("Edit: " + editSelect);
}
deleteParameter(pname);
}
@@ -277,7 +270,6 @@
String select = pname.substring(pname.indexOf("select") + 8);
select = select.substring(0, select.indexOf("\""));
getLogger().debug("Select Node: " + select);
- System.out.println("Select Node: " + select);
// Check if node exists
PrefixResolver resolver = new FormPrefixResolver(document.getDocumentElement());
Modified: lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java Tue Apr 12 02:28:20 2005
@@ -19,7 +19,7 @@
import org.apache.lenya.cms.metadata.dublincore.DublinCore;
import org.apache.lenya.cms.site.usecases.SiteUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
-import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Usecase to edit metadata for a resource.
@@ -28,8 +28,9 @@
*/
public class Metadata extends SiteUsecase {
- private DublinCore dc;
- /**
+ private DublinCore dc;
+
+ /**
* Ctor.
*/
public Metadata() {
@@ -37,17 +38,12 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
- try {
- getSourceDocument().lock();
- } catch (TransactionException e) {
- throw new UsecaseException(e);
- }
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
+ return getSourceDocument().getRepositoryNodes();
}
-
+
/**
* @see org.apache.lenya.cms.usecase.AbstractUsecase#initParameters()
*/
@@ -55,33 +51,42 @@
super.initParameters();
try {
- this.dc = getSourceDocument().getDublinCore();
- setParameter(DublinCore.ELEMENT_CREATOR, this.dc.getFirstValue(DublinCore.ELEMENT_CREATOR));
+ this.dc = getSourceDocument().getDublinCore();
+ setParameter(DublinCore.ELEMENT_CREATOR, this.dc
+ .getFirstValue(DublinCore.ELEMENT_CREATOR));
setParameter(DublinCore.ELEMENT_TITLE, this.dc.getFirstValue(DublinCore.ELEMENT_TITLE));
- setParameter(DublinCore.ELEMENT_DESCRIPTION, this.dc.getFirstValue(DublinCore.ELEMENT_CREATOR));
- setParameter(DublinCore.ELEMENT_SUBJECT, this.dc.getFirstValue(DublinCore.ELEMENT_SUBJECT));
- setParameter(DublinCore.ELEMENT_PUBLISHER, this.dc.getFirstValue(DublinCore.ELEMENT_PUBLISHER));
- setParameter(DublinCore.ELEMENT_RIGHTS, this.dc.getFirstValue(DublinCore.ELEMENT_RIGHTS));
+ setParameter(DublinCore.ELEMENT_DESCRIPTION, this.dc
+ .getFirstValue(DublinCore.ELEMENT_CREATOR));
+ setParameter(DublinCore.ELEMENT_SUBJECT, this.dc
+ .getFirstValue(DublinCore.ELEMENT_SUBJECT));
+ setParameter(DublinCore.ELEMENT_PUBLISHER, this.dc
+ .getFirstValue(DublinCore.ELEMENT_PUBLISHER));
+ setParameter(DublinCore.ELEMENT_RIGHTS, this.dc
+ .getFirstValue(DublinCore.ELEMENT_RIGHTS));
setParameter(DublinCore.ELEMENT_TYPE, this.dc.getFirstValue(DublinCore.ELEMENT_TYPE));
setParameter(DublinCore.ELEMENT_DATE, this.dc.getFirstValue(DublinCore.ELEMENT_DATE));
- setParameter(DublinCore.ELEMENT_FORMAT, this.dc.getFirstValue(DublinCore.ELEMENT_FORMAT));
- setParameter(DublinCore.ELEMENT_SOURCE, this.dc.getFirstValue(DublinCore.ELEMENT_SOURCE));
- setParameter(DublinCore.ELEMENT_LANGUAGE, this.dc.getFirstValue(DublinCore.ELEMENT_LANGUAGE));
- setParameter(DublinCore.ELEMENT_RELATION, this.dc.getFirstValue(DublinCore.ELEMENT_RELATION));
- setParameter(DublinCore.ELEMENT_COVERAGE, this.dc.getFirstValue(DublinCore.ELEMENT_COVERAGE));
- }
- catch (Exception e) {
- getLogger().error("Unable to load Dublin Core metadata.", e);
- addErrorMessage("Unable to load Dublin Core metadata.");
+ setParameter(DublinCore.ELEMENT_FORMAT, this.dc
+ .getFirstValue(DublinCore.ELEMENT_FORMAT));
+ setParameter(DublinCore.ELEMENT_SOURCE, this.dc
+ .getFirstValue(DublinCore.ELEMENT_SOURCE));
+ setParameter(DublinCore.ELEMENT_LANGUAGE, this.dc
+ .getFirstValue(DublinCore.ELEMENT_LANGUAGE));
+ setParameter(DublinCore.ELEMENT_RELATION, this.dc
+ .getFirstValue(DublinCore.ELEMENT_RELATION));
+ setParameter(DublinCore.ELEMENT_COVERAGE, this.dc
+ .getFirstValue(DublinCore.ELEMENT_COVERAGE));
+ } catch (Exception e) {
+ getLogger().error("Unable to load Dublin Core metadata.", e);
+ addErrorMessage("Unable to load Dublin Core metadata.");
}
}
-
- /**
+
+ /**
* Validates the request parameters.
* @throws UsecaseException if an error occurs.
*/
void validate() throws UsecaseException {
- // do nothing
+ // do nothing
}
/**
@@ -98,7 +103,7 @@
super.doExecute();
String creator = getParameterAsString(DublinCore.ELEMENT_CREATOR);
- String title = getParameterAsString(DublinCore.ELEMENT_TITLE);
+ String title = getParameterAsString(DublinCore.ELEMENT_TITLE);
String description = getParameterAsString(DublinCore.ELEMENT_DESCRIPTION);
String subject = getParameterAsString(DublinCore.ELEMENT_SUBJECT);
String publisher = getParameterAsString(DublinCore.ELEMENT_PUBLISHER);
@@ -118,6 +123,6 @@
*/
public void setParameter(String name, Object value) {
super.setParameter(name, value);
-
+
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java Tue Apr 12 02:28:20 2005
@@ -28,15 +28,16 @@
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.ServiceSelector;
+import org.apache.excalibur.source.SourceResolver;
+import org.apache.lenya.cms.cocoon.source.RepositorySource;
import org.apache.lenya.cms.cocoon.source.SourceUtil;
import org.apache.lenya.cms.metadata.dublincore.DublinCore;
import org.apache.lenya.cms.metadata.dublincore.DublinCoreProxy;
import org.apache.lenya.cms.publication.util.DocumentVisitor;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.cms.site.SiteManager;
import org.apache.lenya.cms.workflow.CMSHistory;
import org.apache.lenya.cms.workflow.History;
-import org.apache.lenya.transaction.Lock;
-import org.apache.lenya.transaction.TransactionException;
import org.apache.lenya.workflow.Situation;
import org.apache.lenya.workflow.Version;
import org.apache.lenya.workflow.Workflow;
@@ -467,32 +468,34 @@
}
/**
- * @see org.apache.lenya.transaction.Lockable#lock()
+ * @see org.apache.lenya.cms.publication.Document#getRepositoryNodes()
*/
- public void lock() throws TransactionException {
- SourceUtil.lock(getSourceURI(), this.manager);
- SourceUtil.lock(getHistory().getSourceURI(), this.manager);
- }
-
- /**
- * @see org.apache.lenya.transaction.Lockable#getLock()
- */
- public Lock getLock() {
- return null;
- }
-
- /**
- * @see org.apache.lenya.transaction.Lockable#unlock()
- */
- public void unlock() throws TransactionException {
- SourceUtil.unlock(getSourceURI(), this.manager);
- }
-
- /**
- * @see org.apache.lenya.transaction.Lockable#isLocked()
- */
- public boolean isLocked() throws TransactionException {
- return false;
+ public Node[] getRepositoryNodes() {
+ Node[] nodes = new Node[2];
+ SourceResolver resolver = null;
+ RepositorySource documentSource = null;
+ RepositorySource historySource = null;
+ try {
+ resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+ documentSource = (RepositorySource) resolver.resolveURI(getSourceURI());
+ historySource = (RepositorySource) resolver.resolveURI(getHistory().getSourceURI());
+ nodes[0] = documentSource.getNode();
+ nodes[1] = historySource.getNode();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ finally {
+ if (resolver != null) {
+ if (documentSource != null) {
+ resolver.release(documentSource);
+ }
+ if (historySource != null) {
+ resolver.release(historySource);
+ }
+ this.manager.release(resolver);
+ }
+ }
+ return nodes;
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java Tue Apr 12 02:28:20 2005
@@ -24,14 +24,14 @@
import org.apache.lenya.cms.metadata.dublincore.DublinCore;
import org.apache.lenya.cms.publication.util.DocumentVisitor;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.transaction.Identifiable;
-import org.apache.lenya.transaction.Lockable;
import org.apache.lenya.workflow.Workflowable;
/**
* A CMS document.
*/
-public interface Document extends Workflowable, Identifiable, Lockable {
+public interface Document extends Workflowable, Identifiable {
/**
* The document namespace URI.
@@ -195,4 +195,9 @@
* @throws DocumentException if an error occurs.
*/
void delete() throws DocumentException;
+
+ /**
+ * @return The repository nodes that represent this document.
+ */
+ Node[] getRepositoryNodes();
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java Tue Apr 12 02:28:20 2005
@@ -25,7 +25,6 @@
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.transaction.TransactionException;
/**
* An ordered set of documents without duplicates.
@@ -123,15 +122,4 @@
Collections.reverse(getList());
}
- /**
- * Locks all contained documents.
- * @throws TransactionException if an error occurs.
- */
- public void lock() throws TransactionException {
- Document[] docs = getDocuments();
- for (int i = 0; i < docs.length; i++) {
- docs[i].lock();
- }
- }
-
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java Tue Apr 12 02:28:20 2005
@@ -141,7 +141,7 @@
protected String getRCPath() throws IOException {
String publicationsPath = this.sourceUri.substring("lenya://lenya/pubs/".length());
String publicationId = publicationsPath.split("/")[0];
- String path = publicationsPath + "/" + publicationId + "/content/";
+ String path = "lenya://lenya/pubs/" + publicationId + "/content/";
return this.sourceUri.substring(path.length());
}
@@ -248,6 +248,9 @@
* @see org.apache.lenya.transaction.Transactionable#lock()
*/
public void lock() throws TransactionException {
+ if (isCheckedOut()) {
+ throw new TransactionException("Cannot lock [" + this + "]: node is checked out.");
+ }
if (getLogger().isDebugEnabled()) {
getLogger().debug("Locking [" + this + "]");
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java Tue Apr 12 02:28:20 2005
@@ -16,14 +16,19 @@
*/
package org.apache.lenya.cms.site;
+import org.apache.lenya.cms.repository.Node;
import org.apache.lenya.transaction.Identifiable;
-import org.apache.lenya.transaction.Lockable;
/**
* Object to hold a site structure information.
*
* @version $Id:$
*/
-public interface SiteStructure extends Identifiable, Lockable {
+public interface SiteStructure extends Identifiable {
+
+ /**
+ * @return The repository node the site structure is stored in.
+ */
+ Node getRepositoryNode();
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java Tue Apr 12 02:28:20 2005
@@ -199,7 +199,6 @@
DocumentSet subSite = SiteUtil.getSubSite(manager, source);
Document[] docs = subSite.getDocuments();
for (int i = 0; i < docs.length; i++) {
- docs[i].lock();
Document target = SiteUtil.getTarget(siteManager, docs[i], targetArea, mode);
if (target != null) {
set.add(target);
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java Tue Apr 12 02:28:20 2005
@@ -27,11 +27,12 @@
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.excalibur.source.SourceResolver;
+import org.apache.lenya.cms.cocoon.source.RepositorySource;
import org.apache.lenya.cms.cocoon.source.SourceUtil;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.site.Label;
import org.apache.lenya.cms.site.SiteException;
-import org.apache.lenya.transaction.Lock;
import org.apache.lenya.transaction.TransactionException;
import org.apache.lenya.xml.DocumentHelper;
import org.apache.lenya.xml.NamespaceHelper;
@@ -523,27 +524,6 @@
}
/**
- * @see org.apache.lenya.transaction.Lockable#lock()
- */
- public void lock() throws TransactionException {
- SourceUtil.lock(this.sourceUri, this.manager);
- }
-
- /**
- * @see org.apache.lenya.transaction.Lockable#unlock()
- */
- public void unlock() throws TransactionException {
- SourceUtil.unlock(this.sourceUri, this.manager);
- }
-
- /**
- * @see org.apache.lenya.transaction.Lockable#isLocked()
- */
- public boolean isLocked() throws TransactionException {
- return false;
- }
-
- /**
* @see org.apache.lenya.transaction.Identifiable#getIdentifiableType()
*/
public String getIdentifiableType() {
@@ -551,16 +531,32 @@
}
/**
- * @see org.apache.lenya.transaction.Lockable#getLock()
+ * @see org.apache.lenya.cms.site.tree.SiteTree#save()
*/
- public Lock getLock() {
- return null;
+ public void save() throws TransactionException {
}
/**
- * @see org.apache.lenya.cms.site.tree.SiteTree#save()
+ * @see org.apache.lenya.cms.site.SiteStructure#getRepositoryNode()
*/
- public void save() throws TransactionException {
+ public org.apache.lenya.cms.repository.Node getRepositoryNode() {
+ SourceResolver resolver = null;
+ RepositorySource source = null;
+ try {
+ resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+ source = (RepositorySource) resolver.resolveURI(this.sourceUri);
+ return source.getNode();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ finally {
+ if (resolver != null) {
+ if (source != null) {
+ resolver.release(source);
+ }
+ this.manager.release(resolver);
+ }
+ }
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java Tue Apr 12 02:28:20 2005
@@ -20,8 +20,10 @@
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.site.SiteManager;
+import org.apache.lenya.cms.site.SiteStructure;
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Change the label of a document.
@@ -50,18 +52,19 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
SiteManager siteManager = null;
ServiceSelector selector = null;
try {
Document doc = getSourceDocument();
selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
siteManager = (SiteManager) selector.select(doc.getPublication().getSiteManagerHint());
- siteManager.getSiteStructure(doc.getIdentityMap(), doc.getPublication(), doc.getArea())
- .lock();
+ SiteStructure structure = siteManager.getSiteStructure(doc.getIdentityMap(), doc
+ .getPublication(), doc.getArea());
+ Transactionable[] objects = { structure.getRepositoryNode() };
+ return objects;
} catch (Exception e) {
throw new UsecaseException(e);
} finally {
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeNodeID.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeNodeID.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeNodeID.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeNodeID.java Tue Apr 12 02:28:20 2005
@@ -16,6 +16,10 @@
*/
package org.apache.lenya.cms.site.usecases;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceSelector;
import org.apache.lenya.cms.publication.Document;
@@ -26,9 +30,11 @@
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.site.SiteManager;
+import org.apache.lenya.cms.site.SiteStructure;
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Change the node ID of a document.
@@ -51,9 +57,9 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
super.lockInvolvedObjects();
SiteManager siteManager = null;
@@ -62,10 +68,13 @@
Document doc = getSourceDocument();
selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
siteManager = (SiteManager) selector.select(doc.getPublication().getSiteManagerHint());
- siteManager.getSiteStructure(doc.getIdentityMap(), doc.getPublication(), doc.getArea())
- .lock();
-
- lockAllLanguageVersions(doc);
+ SiteStructure structure = siteManager.getSiteStructure(doc.getIdentityMap(), doc
+ .getPublication(), doc.getArea());
+
+ List objects = new ArrayList();
+ objects.add(structure.getRepositoryNode());
+ objects.addAll(getAllLanguageVersionNodes(doc));
+ return (Transactionable[]) objects.toArray(new Transactionable[objects.size()]);
} catch (Exception e) {
throw new UsecaseException(e);
} finally {
@@ -78,11 +87,15 @@
}
}
- protected void lockAllLanguageVersions(Document doc) throws DocumentException, TransactionException, DocumentBuildException {
+ protected List getAllLanguageVersionNodes(Document doc) throws DocumentException,
+ TransactionException, DocumentBuildException {
String[] languages = doc.getLanguages();
+ List nodes = new ArrayList();
for (int i = 0; i < languages.length; i++) {
- doc.getIdentityMap().getLanguageVersion(doc, languages[i]).lock();
+ nodes.addAll(Arrays.asList(doc.getIdentityMap().getLanguageVersion(doc, languages[i])
+ .getRepositoryNodes()));
}
+ return nodes;
}
/**
@@ -182,7 +195,10 @@
Document newLanguageVersion = identityMap.get(document.getPublication(), document
.getArea(), newDocumentId, availableLanguages[i]);
- newLanguageVersion.lock();
+ Transactionable[] nodes = newLanguageVersion.getRepositoryNodes();
+ for (int j = 0; j < nodes.length; j++) {
+ nodes[j].lock();
+ }
documentManager.move(languageVersion, newLanguageVersion);
if (availableLanguages[i].equals(document.getLanguage())) {
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java Tue Apr 12 02:28:20 2005
@@ -35,10 +35,13 @@
import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.PublicationFactory;
import org.apache.lenya.cms.publication.URLInformation;
+import org.apache.lenya.cms.site.SiteException;
import org.apache.lenya.cms.site.SiteManager;
import org.apache.lenya.cms.site.SiteStructure;
+import org.apache.lenya.cms.site.SiteUtil;
import org.apache.lenya.cms.usecase.AbstractUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Abstract superclass for usecases to create a resource.
@@ -70,29 +73,15 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
-
- SiteManager siteManager = null;
- ServiceSelector selector = null;
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
try {
- selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
- siteManager = (SiteManager) selector.select(getSourceDocument().getPublication()
- .getSiteManagerHint());
- SiteStructure structure = siteManager.getSiteStructure(getSourceDocument().getIdentityMap(), getSourceDocument()
- .getPublication(), getSourceDocument().getArea());
- structure.lock();
- } catch (Exception e) {
+ SiteStructure structure = SiteUtil.getSiteStructure(this.manager, getSourceDocument());
+ Transactionable[] nodes = { structure.getRepositoryNode() };
+ return nodes;
+ } catch (SiteException e) {
throw new UsecaseException(e);
- } finally {
- if (selector != null) {
- if (siteManager != null) {
- selector.release(siteManager);
- }
- this.manager.release(selector);
- }
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateDocument.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateDocument.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateDocument.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateDocument.java Tue Apr 12 02:28:20 2005
@@ -26,6 +26,7 @@
import org.apache.lenya.cms.publication.DocumentType;
import org.apache.lenya.cms.publication.DocumentTypeBuilder;
import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.transaction.Transactionable;
/**
* Usecase to create a document.
@@ -106,7 +107,10 @@
area,
documentId,
language);
- document.lock();
+ Transactionable[] nodes = document.getRepositoryNodes();
+ for (int i = 0; i < nodes.length; i++) {
+ nodes[i].lock();
+ }
DocumentType documentType = DocumentTypeBuilder.buildDocumentType(documentTypeName,
publication);
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateLanguage.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateLanguage.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateLanguage.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateLanguage.java Tue Apr 12 02:28:20 2005
@@ -31,6 +31,7 @@
import org.apache.lenya.cms.publication.DocumentTypeBuilder;
import org.apache.lenya.cms.publication.DocumentTypeResolver;
import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.transaction.Transactionable;
/**
* Usecase to create a new language version of a resource.
@@ -74,8 +75,10 @@
String[] languages = source.getPublication().getLanguages();
DocumentIdentityMap map = source.getIdentityMap();
for (int i = 0; i < languages.length; i++) {
- Document version = map.get(source.getPublication(), source.getArea(), source
- .getId(), languages[i]);
+ Document version = map.get(source.getPublication(),
+ source.getArea(),
+ source.getId(),
+ languages[i]);
if (!version.exists()) {
nonExistingLanguages.add(languages[i]);
}
@@ -132,7 +135,10 @@
DocumentIdentityMap map = source.getIdentityMap();
String area = source.getArea();
Document document = map.get(publication, area, source.getId(), language);
- document.lock();
+ Transactionable[] nodes = document.getRepositoryNodes();
+ for (int i = 0; i < nodes.length; i++) {
+ nodes[i].lock();
+ }
DocumentType documentType = DocumentTypeBuilder.buildDocumentType(documentTypeName,
publication);
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java Tue Apr 12 02:28:20 2005
@@ -16,6 +16,10 @@
*/
package org.apache.lenya.cms.site.usecases;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.DocumentIdentityMap;
import org.apache.lenya.cms.publication.DocumentManager;
@@ -24,6 +28,7 @@
import org.apache.lenya.cms.site.SiteUtil;
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Delete a document and all its descendants, including all language versions. The documents are
@@ -67,27 +72,33 @@
* <li>the document area's site structure</li>
* <li>the trash site structure</li>
* </ul>
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
-
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
+ List nodes = new ArrayList();
Document doc = getSourceDocument();
try {
DocumentSet sources = SiteUtil.getSubSite(this.manager, doc);
- sources.lock();
+ Document[] docs = sources.getDocuments();
+ for (int i = 0; i < docs.length; i++) {
+ nodes.addAll(Arrays.asList(docs[i].getRepositoryNodes()));
+ }
DocumentSet targets = SiteUtil.getTransferedSubSite(this.manager,
doc,
Publication.TRASH_AREA,
SiteUtil.MODE_CHANGE_ID);
- targets.lock();
+ docs = targets.getDocuments();
+ for (int i = 0; i < docs.length; i++) {
+ nodes.addAll(Arrays.asList(docs[i].getRepositoryNodes()));
+ }
- SiteUtil.getSiteStructure(this.manager, doc).lock();
- SiteUtil.getSiteStructure(this.manager, targets.getDocuments()[0]).lock();
+ nodes.add(SiteUtil.getSiteStructure(this.manager, doc).getRepositoryNode());
+ nodes.add(SiteUtil.getSiteStructure(this.manager, targets.getDocuments()[0]).getRepositoryNode());
} catch (Exception e) {
throw new UsecaseException(e);
}
+ return (Transactionable[]) nodes.toArray(new Transactionable[nodes.size()]);
}
/**
Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java Tue Apr 12 02:28:20 2005
@@ -37,6 +37,7 @@
import org.apache.lenya.cms.publication.DocumentTypeResolver;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.site.SiteManager;
+import org.apache.lenya.transaction.Transactionable;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Attr;
import org.w3c.dom.Node;
@@ -142,7 +143,10 @@
}
if (linksRewritten) {
- examinedDocument.lock();
+ Transactionable nodes[] = examinedDocument.getRepositoryNodes();
+ for (int i = 0; i < nodes.length; i++) {
+ nodes[i].lock();
+ }
SourceUtil.writeDOM(xmlDocument, examinedDocument.getSourceURI(), this.manager);
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java Tue Apr 12 02:28:20 2005
@@ -36,6 +36,8 @@
import org.apache.lenya.cms.publication.DocumentIdentityMap;
import org.apache.lenya.transaction.AbstractOperation;
import org.apache.lenya.transaction.LockException;
+import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.Transactionable;
/**
* Abstract usecase implementation.
@@ -479,28 +481,51 @@
public UsecaseView getView() {
return this.view;
}
-
+
protected static final String ELEMENT_PARAMETER = "parameter";
protected static final String ATTRIBUTE_NAME = "name";
protected static final String ATTRIBUTE_VALUE = "value";
+ protected static final String ELEMENT_VIEW = "view";
+ protected static final String ELEMENT_TRANSACTION = "transaction";
+ protected static final String ATTRIBUTE_POLICY = "policy";
+ protected static final String VALUE_OPTIMISTIC = "optimistic";
+ protected static final String VALUE_PESSIMISTIC = "pessimistic";
+
+ private boolean isOptimistic = true;
+
+ /**
+ * @return <code>true</code> if the transaction policy is optimistic offline lock,
+ * <code>false</code> if it is pessimistic offline lock.
+ */
+ protected boolean isOptimistic() {
+ return this.isOptimistic;
+ }
/**
* @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
*/
public void configure(Configuration config) throws ConfigurationException {
-
+
Configuration[] parameterConfigs = config.getChildren(ELEMENT_PARAMETER);
for (int i = 0; i < parameterConfigs.length; i++) {
String name = parameterConfigs[i].getAttribute(ATTRIBUTE_NAME);
String value = parameterConfigs[i].getAttribute(ATTRIBUTE_VALUE);
setParameter(name, value);
}
-
- Configuration viewConfig = config.getChild("view", false);
+
+ Configuration viewConfig = config.getChild(ELEMENT_VIEW, false);
if (viewConfig != null) {
this.view = new UsecaseView();
view.configure(viewConfig);
}
+
+ Configuration transactionConfig = config.getChild(ELEMENT_TRANSACTION, false);
+ if (transactionConfig != null) {
+ String policy = transactionConfig.getAttribute(ATTRIBUTE_POLICY);
+ if (policy.equals(VALUE_PESSIMISTIC)) {
+ this.isOptimistic = false;
+ }
+ }
}
/**
@@ -511,9 +536,42 @@
}
/**
+ * @return The objects that could be changed during the usecase.
+ * @throws UsecaseException if an error occurs.
+ */
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
+ return new Transactionable[0];
+ }
+
+ /**
* @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
*/
- public void lockInvolvedObjects() throws UsecaseException {
+ public final void lockInvolvedObjects() throws UsecaseException {
+ try {
+ Transactionable[] objects = getObjectsToLock();
+ boolean canExecute = true;
+
+ for (int i = 0; i < objects.length; i++) {
+ if (objects[i].isCheckedOut()) {
+ canExecute = false;
+ }
+ }
+
+ if (canExecute) {
+ for (int i = 0; i < objects.length; i++) {
+ objects[i].lock();
+ if (!isOptimistic()) {
+ objects[i].checkout();
+ }
+ }
+ } else {
+ addErrorMessage("The operation cannot be executed because one ore more of the "
+ + "involved objects are checked out.");
+ }
+
+ } catch (TransactionException e) {
+ throw new UsecaseException(e);
+ }
}
}
Modified: lenya/trunk/src/java/org/apache/lenya/cms/workflow/usecases/InvokeWorkflow.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/workflow/usecases/InvokeWorkflow.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/workflow/usecases/InvokeWorkflow.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/workflow/usecases/InvokeWorkflow.java Tue Apr 12 02:28:20 2005
@@ -22,18 +22,19 @@
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
import org.apache.lenya.cms.workflow.WorkflowManager;
-import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.Transactionable;
/**
- * Invoke a workflow event on the current document. The event is obtained from
- * the configuration in <code>cocoon.xconf</code>:
- * <code>
+ * Invoke a workflow event on the current document. The event is obtained from the configuration in
+ * <code>cocoon.xconf</code>:<code>
* <pre>
- * <component-instance name="default/workflow.submit"
- * logger="lenya.usecases.workflow"
- * class="org.apache.lenya.cms.workflow.usecases.InvokeWorkflow">
- * <event id="submit"/>
- * </component-instance>
+ *
+ * <component-instance name="default/workflow.submit"
+ * logger="lenya.usecases.workflow"
+ * class="org.apache.lenya.cms.workflow.usecases.InvokeWorkflow">
+ * <event id="submit"/>
+ * </component-instance>
+ *
* </pre>
* </code>
*
@@ -75,17 +76,12 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
- try {
- getSourceDocument().lock();
- } catch (TransactionException e) {
- throw new UsecaseException(e);
- }
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
+ return getSourceDocument().getRepositoryNodes();
}
-
+
/**
* @see org.apache.lenya.cms.usecase.AbstractUsecase#doExecute()
*/
@@ -102,7 +98,7 @@
}
}
}
-
+
protected static final String ELEMENT_EVENT = "event";
protected static final String ATTRIBUTE_ID = "id";
Modified: lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl (original)
+++ lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl Tue Apr 12 02:28:20 2005
@@ -419,6 +419,7 @@
</component-instance>
<component-instance name="edit.forms" logger="lenya.publication"
class="org.apache.lenya.cms.editors.forms.FormsEditor">
+ <transaction policy="pessimistic"/>
<view template="edit/forms" menu="false">
<parameter name="formUri" value="cocoon://core/edit/form.xml"/>
</view>
Modified: lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java Tue Apr 12 02:28:20 2005
@@ -16,6 +16,10 @@
*/
package org.apache.lenya.defaultpub.cms.usecases;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceSelector;
import org.apache.lenya.cms.publication.Document;
@@ -30,6 +34,7 @@
import org.apache.lenya.cms.usecase.DocumentUsecase;
import org.apache.lenya.cms.usecase.UsecaseException;
import org.apache.lenya.cms.workflow.WorkflowManager;
+import org.apache.lenya.transaction.Transactionable;
import org.apache.lenya.workflow.WorkflowException;
/**
@@ -85,23 +90,24 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
-
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
try {
+ List nodes = new ArrayList();
Document doc = getSourceDocument();
Document liveVersion = doc.getIdentityMap().getAreaVersion(doc, Publication.LIVE_AREA);
DocumentSet set = getInvolvedDocuments(liveVersion);
Document[] documents = set.getDocuments();
for (int i = 0; i < documents.length; i++) {
- documents[i].lock();
+ nodes.addAll(Arrays.asList(documents[i].getRepositoryNodes()));
}
- SiteUtil.getSiteStructure(this.manager, doc.getIdentityMap(),
+ nodes.add(SiteUtil.getSiteStructure(this.manager,
+ doc.getIdentityMap(),
doc.getPublication(),
- Publication.LIVE_AREA).lock();
+ Publication.LIVE_AREA).getRepositoryNode());
+ return (Transactionable[]) nodes.toArray(new Transactionable[nodes.size()]);
} catch (Exception e) {
throw new UsecaseException(e);
Modified: lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java?view=diff&r1=161035&r2=161036
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java Tue Apr 12 02:28:20 2005
@@ -20,6 +20,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
@@ -38,6 +39,7 @@
import org.apache.lenya.cms.usecase.UsecaseException;
import org.apache.lenya.cms.usecase.scheduling.UsecaseScheduler;
import org.apache.lenya.cms.workflow.WorkflowManager;
+import org.apache.lenya.transaction.Transactionable;
import org.apache.lenya.workflow.WorkflowException;
/**
@@ -65,26 +67,26 @@
}
/**
- * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+ * @see org.apache.lenya.cms.usecase.AbstractUsecase#getObjectsToLock()
*/
- public void lockInvolvedObjects() throws UsecaseException {
- super.lockInvolvedObjects();
+ protected Transactionable[] getObjectsToLock() throws UsecaseException {
try {
+ List nodes = new ArrayList();
Document doc = getSourceDocument();
DocumentSet set = getInvolvedDocuments(doc);
Document[] documents = set.getDocuments();
for (int i = 0; i < documents.length; i++) {
Document liveVersion = documents[i].getIdentityMap().getAreaVersion(documents[i],
Publication.LIVE_AREA);
- liveVersion.lock();
+ nodes.addAll(Arrays.asList(liveVersion.getRepositoryNodes()));
}
- SiteUtil.getSiteStructure(this.manager,
+ nodes.add(SiteUtil.getSiteStructure(this.manager,
doc.getIdentityMap(),
doc.getPublication(),
- Publication.LIVE_AREA).lock();
-
+ Publication.LIVE_AREA).getRepositoryNode());
+ return (Transactionable[]) nodes.toArray(new Transactionable[nodes.size()]);
} catch (Exception e) {
throw new UsecaseException(e);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org