diff --git a/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java b/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java index 404935d4c..bf7d3009f 100644 --- a/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java +++ b/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java @@ -125,6 +125,8 @@ public abstract class AbstractTransaction implements StrolchTransaction { return this.txResult.getState().isOpen(); } + + @Override public boolean isRollingBack() { return this.txResult.getState().isRollingBack(); @@ -320,8 +322,13 @@ public abstract class AbstractTransaction implements StrolchTransaction { this.commands.add(command); } - private boolean isReadOnly() { - return this.closeStrategy == TransactionCloseStrategy.READ_ONLY; + public boolean isReadOnly() { + return this.closeStrategy.isReadonly(); + } + + @Override + public boolean isWriteable() { + return this.closeStrategy.isReadonly(); } private void assertNotReadOnly() { diff --git a/li.strolch.agent/src/main/java/li/strolch/persistence/api/StrolchTransaction.java b/li.strolch.agent/src/main/java/li/strolch/persistence/api/StrolchTransaction.java index c582ebc45..5490a212c 100644 --- a/li.strolch.agent/src/main/java/li/strolch/persistence/api/StrolchTransaction.java +++ b/li.strolch.agent/src/main/java/li/strolch/persistence/api/StrolchTransaction.java @@ -406,6 +406,16 @@ public interface StrolchTransaction extends AutoCloseable { */ boolean isOpen(); + /** + * @return if the current state of the StrolchTransaction is {@link TransactionCloseStrategy#READ_ONLY} or {@link TransactionCloseStrategy#ROLLBACK} + */ + boolean isReadOnly(); + + /** + * @return if the current state of the StrolchTransaction is {@link TransactionCloseStrategy#COMMIT} + */ + boolean isWriteable(); + /** * @return if the current state of the StrolchTransaction is {@link TransactionState#ROLLING_BACK} */ diff --git a/li.strolch.agent/src/main/java/li/strolch/persistence/api/TransactionCloseStrategy.java b/li.strolch.agent/src/main/java/li/strolch/persistence/api/TransactionCloseStrategy.java index c40489c4d..01a5b1e16 100644 --- a/li.strolch.agent/src/main/java/li/strolch/persistence/api/TransactionCloseStrategy.java +++ b/li.strolch.agent/src/main/java/li/strolch/persistence/api/TransactionCloseStrategy.java @@ -28,12 +28,16 @@ import li.strolch.exception.StrolchException; public enum TransactionCloseStrategy { /** - *

The default close strategy. It defines a read-only transaction, i.e. no modifications will be persisted, - * modifications will be logged as an error

+ *

The default close strategy. It defines a writeable transaction

*/ DEFAULT() { @Override public boolean isReadonly() { + return false; + } + + @Override + public boolean isWriteable() { return true; } @@ -60,6 +64,11 @@ public enum TransactionCloseStrategy { return true; } + @Override + public boolean isWriteable() { + return false; + } + @Override public void close(StrolchTransaction tx) throws StrolchException { tx.autoCloseableReadOnly(); @@ -76,6 +85,11 @@ public enum TransactionCloseStrategy { return false; } + @Override + public boolean isWriteable() { + return true; + } + @Override public void close(StrolchTransaction tx) throws StrolchException { tx.autoCloseableCommit(); @@ -92,6 +106,11 @@ public enum TransactionCloseStrategy { return true; } + @Override + public boolean isWriteable() { + return false; + } + @Override public void close(StrolchTransaction tx) throws StrolchException { tx.autoCloseableRollback(); @@ -101,4 +120,6 @@ public enum TransactionCloseStrategy { public abstract void close(StrolchTransaction tx) throws StrolchException; public abstract boolean isReadonly(); + + public abstract boolean isWriteable(); } \ No newline at end of file