diff --git a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java index 5d5210adef..e5dfcfe4f8 100644 --- a/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/AbstractNodeDAOImpl.java @@ -79,6 +79,7 @@ import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.NodeRef.Status; import org.alfresco.service.namespace.QName; +import org.alfresco.service.transaction.ReadOnlyServerException; import org.alfresco.util.EqualsHelper; import org.alfresco.util.GUID; import org.alfresco.util.Pair; @@ -530,7 +531,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO // Check that this is a writable txn if (AlfrescoTransactionSupport.getTransactionReadState() != TxnReadState.TXN_READ_WRITE) { - throw new IllegalStateException("Transaction entries can only be created for writable transactions"); + throw new ReadOnlyServerException(); } // Have to create a new transaction entry Long serverId = getServerId(); diff --git a/source/java/org/alfresco/repo/security/permissions/impl/ExceptionTranslatorMethodInterceptor.java b/source/java/org/alfresco/repo/security/permissions/impl/ExceptionTranslatorMethodInterceptor.java index bee84c5b0a..480db8178c 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/ExceptionTranslatorMethodInterceptor.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/ExceptionTranslatorMethodInterceptor.java @@ -19,6 +19,7 @@ package org.alfresco.repo.security.permissions.impl; import org.alfresco.repo.security.permissions.AccessDeniedException; +import org.alfresco.service.transaction.ReadOnlyServerException; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.dao.InvalidDataAccessApiUsageException; @@ -30,7 +31,6 @@ import org.springframework.dao.TransientDataAccessResourceException; public class ExceptionTranslatorMethodInterceptor implements MethodInterceptor { private static final String MSG_ACCESS_DENIED = "permissions.err_access_denied"; - private static final String MSG_READ_ONLY = "permissions.err_read_only"; public ExceptionTranslatorMethodInterceptor() { @@ -47,15 +47,19 @@ public class ExceptionTranslatorMethodInterceptor implements MethodInterceptor { throw new AccessDeniedException(MSG_ACCESS_DENIED, ade); } + catch (ReadOnlyServerException e) + { + throw new AccessDeniedException(ReadOnlyServerException.MSG_READ_ONLY, e); + } catch (TransientDataAccessResourceException e) { // this usually occurs when the server is in read-only mode - throw new AccessDeniedException(MSG_READ_ONLY, e); + throw new AccessDeniedException(ReadOnlyServerException.MSG_READ_ONLY, e); } catch (InvalidDataAccessApiUsageException e) { // this usually occurs when the server is in read-only mode - throw new AccessDeniedException(MSG_READ_ONLY, e); + throw new AccessDeniedException(ReadOnlyServerException.MSG_READ_ONLY, e); } } } diff --git a/source/java/org/alfresco/service/transaction/ReadOnlyServerException.java b/source/java/org/alfresco/service/transaction/ReadOnlyServerException.java new file mode 100644 index 0000000000..51b17a1bb0 --- /dev/null +++ b/source/java/org/alfresco/service/transaction/ReadOnlyServerException.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.service.transaction; + +import org.alfresco.error.AlfrescoRuntimeException; + +/** + * Exception thrown when a read-only server attempts a write operation. + * + * @author Derek Hulley + * @since 3.4 + */ +public class ReadOnlyServerException extends AlfrescoRuntimeException +{ + private static final long serialVersionUID = 4996411986062612198L; + + public static final String MSG_READ_ONLY = "permissions.err_read_only"; + + public ReadOnlyServerException() + { + super(MSG_READ_ONLY); + } +}