This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch version3
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/version3 by this push:
new 76e915a EMPIREDB-364 enableRollbackHandling on context
76e915a is described below
commit 76e915ae9282675d87257c6403566f1dd0483201
Author: Rainer Döbele <[email protected]>
AuthorDate: Sat Jan 22 01:34:35 2022 +0100
EMPIREDB-364 enableRollbackHandling on context
---
.../empire-db-example-basic/config.xml | 7 ++++-
.../org/apache/empire/samples/db/SampleApp.java | 2 +-
.../org/apache/empire/rest/service/Service.java | 6 ++++
.../org/apache/empire/jsf2/app/WebDBContext.java | 6 ++++
.../main/java/org/apache/empire/db/DBContext.java | 6 ++--
.../main/java/org/apache/empire/db/DBRecord.java | 20 +++++++++----
.../apache/empire/db/context/DBContextBase.java | 26 ++++++++++++-----
.../apache/empire/db/context/DBContextStatic.java | 34 ++++++++++++++++++----
.../empire/db/context/DBRollbackHandler.java | 1 +
.../empire/db/context/DBRollbackManager.java | 11 +++++--
10 files changed, 93 insertions(+), 26 deletions(-)
diff --git a/empire-db-examples/empire-db-example-basic/config.xml
b/empire-db-examples/empire-db-example-basic/config.xml
index 1f70279..1663214 100644
--- a/empire-db-examples/empire-db-example-basic/config.xml
+++ b/empire-db-examples/empire-db-example-basic/config.xml
@@ -147,7 +147,12 @@
</logger>
<logger name="org.apache.empire.db" additivity="false">
- <level value="warn"/>
+ <level value="info"/>
+ <appender-ref ref="default"/>
+ </logger>
+
+ <logger name="org.apache.empire.db.context" additivity="false">
+ <level value="debug"/>
<appender-ref ref="default"/>
</logger>
diff --git
a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
index edd76a4..21d3970 100644
---
a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
+++
b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
@@ -90,7 +90,7 @@ public class SampleApp
DBDatabaseDriver driver =
getDatabaseDriver(config.getDatabaseProvider(), conn);
// STEP 2.2: Create a Context
- context = new DBContextStatic(driver, conn);
+ context = new DBContextStatic(driver, conn, true,
true);
// STEP 3: Open Database (and create if not existing)
System.out.println("*** Step 3: openDatabase() ***");
diff --git
a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
index b263e09..1117934 100644
---
a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
+++
b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
@@ -91,6 +91,12 @@ public abstract class Service {
}
@Override
+ public boolean isEnableRollbackHandling()
+ {
+ return false; /* No Rollbacks allowed */
+ }
+
+ @Override
public TextResolver getTextResolver()
{
return textResolver;
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
index 6dfd633..1dc246f 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
@@ -49,6 +49,12 @@ public class WebDBContext<DB extends DBDatabase> extends
DBContextBase
return driver;
}
+ @Override
+ public boolean isEnableRollbackHandling()
+ {
+ return true;
+ }
+
/**
* Unclear weather this is any useful
* Do not call, as the connections are managed by the Application
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBContext.java
b/empire-db/src/main/java/org/apache/empire/db/DBContext.java
index 14a1bfc..ae1e6fa 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBContext.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBContext.java
@@ -18,11 +18,13 @@ public interface DBContext
void commit();
void rollback();
+
+ boolean isEnableRollbackHandling();
+
+ void appendRollbackHandler(DBRollbackHandler handler);
void removeRollbackHandler(DBObject object);
- void addRollbackHandler(DBRollbackHandler handler);
-
void discard();
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index bc79a99..644d698 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -94,6 +94,12 @@ public class DBRecord extends DBRecordData implements
DBContextAware, Record, Cl
}
@Override
+ public String getObjectInfo()
+ {
+ return "Record
"+record.getRowSet().getName()+":"+StringUtils.arrayToString(record.getKey(),
"|");
+ }
+
+ @Override
public void combine(DBRollbackHandler successor)
{
if (record!=successor.getObject())
@@ -130,7 +136,8 @@ public class DBRecord extends DBRecordData implements
DBContextAware, Record, Cl
record.modified = this.modified;
record.rowsetData = rowsetData;
// done
- log.info("Rollback for record {}[{}] performed",
record.getRowSet().getName(), StringUtils.arrayToString(record.getKey(), "|"));
+ if (log.isInfoEnabled())
+ log.info("Rollback for {} performed.", getObjectInfo());
}
@Override
@@ -205,8 +212,8 @@ public class DBRecord extends DBRecordData implements
DBContextAware, Record, Cl
private Object rowsetData; // Special Rowset Data (usually null)
// options
- protected boolean enableRollbackHandling = true;
- protected boolean validateFieldValues = true;
+ protected boolean enableRollbackHandling;
+ protected boolean validateFieldValues;
/**
* Constructs a new DBRecord.<BR>
@@ -225,6 +232,9 @@ public class DBRecord extends DBRecordData implements
DBContextAware, Record, Cl
this.fields = null;
this.modified = null;
this.rowsetData = null;
+ // options
+ enableRollbackHandling = context.isEnableRollbackHandling();
+ validateFieldValues = true;
}
/**
@@ -817,7 +827,7 @@ public class DBRecord extends DBRecordData implements
DBContextAware, Record, Cl
return; /* Not modified. Nothing to do! */
// allow rollback
if (enableRollbackHandling)
- context.addRollbackHandler(createRollbackHandler());
+ context.appendRollbackHandler(createRollbackHandler());
// update
rowset.updateRecord(this);
}
@@ -838,7 +848,7 @@ public class DBRecord extends DBRecordData implements
DBContextAware, Record, Cl
throw new ObjectNotValidException(this);
// allow rollback
if (enableRollbackHandling)
- context.addRollbackHandler(createRollbackHandler());
+ context.appendRollbackHandler(createRollbackHandler());
// Delete only if record is not new
if (!isNew())
{
diff --git
a/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
b/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
index 2e66b75..aa24b00 100644
--- a/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
@@ -27,7 +27,7 @@ public abstract class DBContextBase implements DBContext
private DBUtils utils = null;
- private boolean noRollbacksWarnOnce = true;
+ private boolean noRollbackManagerWarnOnce = true;
/**
* Factory function for Utils creation
@@ -71,7 +71,7 @@ public abstract class DBContextBase implements DBContext
if (conn.getAutoCommit()==false)
conn.commit();
// discard rollbacks
- DBRollbackManager dbrm = getRollbackManager(false);
+ DBRollbackManager dbrm = (isEnableRollbackHandling() ?
getRollbackManager(false) : null);
if (dbrm!=null)
dbrm.releaseConnection(conn, ReleaseAction.Discard);
// Done
@@ -103,7 +103,7 @@ public abstract class DBContextBase implements DBContext
log.info("Database rollback issued!");
conn.rollback();
// perform Rollback
- DBRollbackManager dbrm = getRollbackManager(false);
+ DBRollbackManager dbrm = (isEnableRollbackHandling() ?
getRollbackManager(false) : null);
if (dbrm!=null)
dbrm.releaseConnection(conn, ReleaseAction.Rollback);
// Done
@@ -115,17 +115,22 @@ public abstract class DBContextBase implements DBContext
}
@Override
- public void addRollbackHandler(DBRollbackHandler handler)
+ public void appendRollbackHandler(DBRollbackHandler handler)
{
if (handler==null || handler.getObject()==null)
throw new InvalidArgumentException("handler", handler);
+ // Check enabled
+ if (!isEnableRollbackHandling())
+ { log.warn("*** Rollback handling is disabled for this context.
AppendRollbackHandler must not be called! ***");
+ return;
+ }
// Add handler
DBRollbackManager dbrm = getRollbackManager(true);
if (dbrm!=null)
- dbrm.addHandler(getConnection(true), handler);
- else if (noRollbacksWarnOnce)
- { log.warn("*** No DBRollbackManager provided. Rollbacks will be
disabled! ***");
- noRollbacksWarnOnce = false;
+ dbrm.appendHandler(getConnection(true), handler);
+ else if (noRollbackManagerWarnOnce)
+ { log.warn("*** No DBRollbackManager provided! Rollbacks will be
disabled. ***");
+ noRollbackManagerWarnOnce = false;
}
}
@@ -134,6 +139,11 @@ public abstract class DBContextBase implements DBContext
{
if (object==null)
throw new InvalidArgumentException("object", object);
+ // Check enabled
+ if (!isEnableRollbackHandling())
+ { log.warn("*** Rollback handling is disabled for this context.
RemoveRollbackHandler should not be called! ***");
+ return;
+ }
// Remove handler
DBRollbackManager dbrm = getRollbackManager(false);
if (dbrm!=null)
diff --git
a/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
b/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
index 9897866..0afe1a1 100644
--- a/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
+++ b/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
@@ -12,6 +12,7 @@ public class DBContextStatic extends DBContextBase
{
private final DBDatabaseDriver driver;
private final Connection conn;
+ private final boolean enableRollbackHandling;
private final boolean closeOnDiscard;
/**
@@ -21,23 +22,42 @@ public class DBContextStatic extends DBContextBase
* initialObjectCapacity = 16
*/
private static final DBRollbackManager staticRollbackManager = new
DBRollbackManager(2, 16);
+
+ /**
+ * Creates a static DBContext with default options
+ * @param driver
+ * @param conn
+ */
+ public DBContextStatic(DBDatabaseDriver driver, Connection conn)
+ {
+ this(driver, conn, true, false);
+ }
- public DBContextStatic(DBDatabaseDriver driver, Connection conn, boolean
closeOnDiscard)
+ /**
+ * Creates a static DBContext with custom options
+ * @param driver
+ * @param conn
+ * @param enableRollbackHandling
+ * @param closeOnDiscard
+ */
+ public DBContextStatic(DBDatabaseDriver driver, Connection conn, boolean
enableRollbackHandling, boolean closeOnDiscard)
{
this.driver = driver;
this.conn = conn;
+ this.enableRollbackHandling = enableRollbackHandling;
this.closeOnDiscard = closeOnDiscard;
}
- public DBContextStatic(DBDatabaseDriver driver, Connection conn)
+ @Override
+ public DBDatabaseDriver getDriver()
{
- this(driver, conn, false);
+ return driver;
}
@Override
- public DBDatabaseDriver getDriver()
+ public boolean isEnableRollbackHandling()
{
- return driver;
+ return enableRollbackHandling;
}
@Override
@@ -48,7 +68,9 @@ public class DBContextStatic extends DBContextBase
if (closeOnDiscard)
{ // Close the connection
closeConnection();
- staticRollbackManager.releaseConnection(conn,
ReleaseAction.Discard);
+ // rollbackManager release
+ if (enableRollbackHandling)
+ staticRollbackManager.releaseConnection(conn,
ReleaseAction.Discard);
}
}
diff --git
a/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackHandler.java
b/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackHandler.java
index b5029eb..9e94e88 100644
---
a/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackHandler.java
+++
b/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackHandler.java
@@ -8,6 +8,7 @@ import org.apache.empire.db.DBObject;
public interface DBRollbackHandler
{
DBObject getObject();
+ String getObjectInfo();
void combine(DBRollbackHandler successor);
void rollback();
void discard();
diff --git
a/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackManager.java
b/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackManager.java
index 17c6175..aa0bc36 100644
---
a/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackManager.java
+++
b/empire-db/src/main/java/org/apache/empire/db/context/DBRollbackManager.java
@@ -38,7 +38,7 @@ public class DBRollbackManager
* @param conn
* @param handler
*/
- public synchronized void addHandler(Connection conn, DBRollbackHandler
handler)
+ public synchronized void appendHandler(Connection conn, DBRollbackHandler
handler)
{
Map<DBObject, DBRollbackHandler> handlerMap =
connectionMap.get(conn.hashCode());
if (handlerMap==null)
@@ -54,6 +54,9 @@ public class DBRollbackManager
handlerMap.get(object).combine(handler);
else
handlerMap.put(object, handler);
+ // log
+ if (log.isDebugEnabled())
+ log.debug("Rollback handler for {} was added.",
handler.getObjectInfo());
}
/**
@@ -75,8 +78,9 @@ public class DBRollbackManager
DBRollbackHandler handler = handlerMap.remove(object);
if (handler==null)
return; // No handler
- // dispose
- log.info("Rollback handler for object {} was removed",
object.getClass().getSimpleName());
+ // discard
+ if (log.isDebugEnabled())
+ log.debug("Rollback handler for {} was removed.",
handler.getObjectInfo());
handler.discard();
}
@@ -89,6 +93,7 @@ public class DBRollbackManager
if (handlerMap==null)
return; // Nothing to do
// rollback
+ log.info("DBRollbackManager performes {} for {} objects.", action,
handlerMap.size());
for (DBRollbackHandler handler : handlerMap.values())
if (action==ReleaseAction.Rollback)
handler.rollback();