You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2022/01/19 21:54:27 UTC
[empire-db] branch version3 updated: optimization
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 11c887e optimization
11c887e is described below
commit 11c887ee7bf88d608153f1dd3935da81cbc2c0fe
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Wed Jan 19 22:54:24 2022 +0100
optimization
---
.../jsf2/websample/db/records/EmployeeRecord.java | 4 +-
.../empire/jsf2/websample/web/SampleContext.java | 45 ++++---------
.../empire/jsf2/websample/web/SampleUtils.java | 22 -------
.../jsf2/websample/web/pages/SamplePage.java | 6 +-
.../org/apache/empire/jsf2/app/WebDBContext.java | 75 ++++++++++++++++++++++
.../apache/empire/db/context/DBContextBase.java | 8 ++-
.../apache/empire/db/context/DBContextStatic.java | 2 -
7 files changed, 99 insertions(+), 63 deletions(-)
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java
index 076f108..7f95b69 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/EmployeeRecord.java
@@ -60,7 +60,7 @@ public class EmployeeRecord extends SampleRecord<TEmployees>
cmd.select(db.T_DEPARTMENTS.DEPARTMENT_ID);
cmd.select(db.T_DEPARTMENTS.NAME);
cmd.orderBy(db.T_DEPARTMENTS.NAME);
- return db.queryOptionList(cmd, SampleUtils.getConnection());
+ return db.queryOptionList(cmd, getContext().getConnection());
}
// base class implementation
return super.getFieldOptions(column);
@@ -71,7 +71,7 @@ public class EmployeeRecord extends SampleRecord<TEmployees>
{
DepartmentRecord rec = new DepartmentRecord((SampleContext)getContext());
SampleDB.TDepartments table = SampleUtils.getDatabase().T_DEPARTMENTS;
- rec.read(table, this.getInt(T.DEPARTMENT_ID), SampleUtils.getConnection());
+ rec.read(table, this.getInt(T.DEPARTMENT_ID), getContext().getConnection());
return rec;
}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
index e328ec0..cedb519 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
@@ -3,46 +3,27 @@
*/
package org.apache.empire.jsf2.websample.web;
-import java.sql.Connection;
-
-import javax.faces.context.FacesContext;
-
-import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.context.DBContextBase;
+import org.apache.empire.jsf2.app.WebDBContext;
import org.apache.empire.jsf2.websample.db.SampleDB;
-public class SampleContext extends DBContextBase
+/**
+ * This is an example for a custom DBContext extension
+ * @author rainer
+ *
+ */
+public class SampleContext extends WebDBContext<SampleDB>
{
- private final SampleApplication app;
-
- private final SampleDB db;
-
- public SampleContext(SampleApplication app)
- {
- this.app = app;
- this.db = app.getDatabase();
- }
+ private final SampleSession session;
- public SampleDB getDatabase()
+ public SampleContext(SampleApplication app, SampleSession session)
{
- return db;
+ super(app, app.getDatabase());
+ // the session
+ this.session = session;
}
public SampleUser getUser()
{
- return SampleUtils.getSampleUser();
- }
-
- @Override
- public DBDatabaseDriver getDriver()
- {
- return getDatabase().getDriver();
- }
-
- @Override
- public Connection getConnection()
- {
- FacesContext fc = FacesContext.getCurrentInstance();
- return app.getConnectionForRequest(fc, db);
+ return session.getUser();
}
}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
index 70c352a..5391871 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
@@ -18,8 +18,6 @@
*/
package org.apache.empire.jsf2.websample.web;
-import java.sql.Connection;
-
import javax.faces.context.FacesContext;
import org.apache.empire.jsf2.app.FacesUtils;
@@ -96,26 +94,6 @@ public class SampleUtils extends FacesUtils
return getFilePath(fc, path, file);
}
- /* Connection */
-
- public static Connection getConnection()
- {
- FacesContext fc = getContext();
- return getWebApplication().getConnectionForRequest(fc, getDatabase());
- }
-
- public static void releaseConnection(boolean commit)
- {
- FacesContext fc = getContext();
- getWebApplication().releaseConnection(fc, getDatabase(), commit);
- }
-
- public static void releaseConnection()
- {
- FacesContext fc = getContext();
- getWebApplication().releaseConnection(fc, getDatabase());
- }
-
/* Messages */
public static String getMessage(String messageKey)
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java
index 84eefca..5d3a5b4 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/SamplePage.java
@@ -25,6 +25,7 @@ import org.apache.empire.jsf2.pages.Page;
import org.apache.empire.jsf2.websample.db.SampleDB;
import org.apache.empire.jsf2.websample.web.SampleApplication;
import org.apache.empire.jsf2.websample.web.SampleContext;
+import org.apache.empire.jsf2.websample.web.SampleSession;
import org.apache.empire.jsf2.websample.web.SampleUser;
import org.apache.empire.jsf2.websample.web.SampleUtils;
@@ -34,12 +35,13 @@ public class SamplePage extends Page
private SampleContext sampleContext = null;
- public SampleContext getSampleContext()
+ public synchronized SampleContext getSampleContext()
{
if (this.sampleContext == null)
{
SampleApplication app = SampleUtils.getSampleApplication();
- this.sampleContext = new SampleContext(app);
+ SampleSession session = SampleUtils.getSampleSession();
+ this.sampleContext = new SampleContext(app, session);
}
return this.sampleContext;
}
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
new file mode 100644
index 0000000..e4c4394
--- /dev/null
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
@@ -0,0 +1,75 @@
+package org.apache.empire.jsf2.app;
+
+import java.sql.Connection;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.db.DBDatabase;
+import org.apache.empire.db.DBDatabaseDriver;
+import org.apache.empire.db.context.DBContextBase;
+import org.apache.empire.exceptions.NotSupportedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This is the basic implementation of a DBContext for a web application
+ * Important: The connection is obtained on HttpRequest scope and hot held by the context
+ * The connection is automatically released via the FacesRequestPhaseListener
+ * @author rainer
+ *
+ * @param <DB>
+ */
+public class WebDBContext<DB extends DBDatabase> extends DBContextBase
+{
+ private static final Logger log = LoggerFactory.getLogger(WebDBContext.class);
+
+ private final WebApplication app;
+ private final DB database;
+
+ public WebDBContext(WebApplication app, DB db)
+ {
+ this.app = app;
+ this.database = db;
+ // check driver
+ if (db.getDriver() == null)
+ log.warn("Database {} has no driver attached.", db.getClass().getSimpleName());
+ }
+
+ public DB getDatabase()
+ {
+ return database;
+ }
+
+ @Override
+ public DBDatabaseDriver getDriver()
+ {
+ return database.getDriver();
+ }
+
+ /**
+ * gets a Connection for the current request
+ * IMPORTANT: Do not hold the connection!
+ */
+ @Override
+ public Connection getConnection()
+ {
+ FacesContext fc = FacesContext.getCurrentInstance();
+ return this.app.getConnectionForRequest(fc, database);
+ }
+
+ /**
+ * Unclear weather this is any useful
+ * Do not call, as the connections are managed by the Application
+ */
+ @Override
+ public void discard()
+ {
+ /*
+ FacesContext fc = FacesContext.getCurrentInstance();
+ this.app.releaseConnection(fc, database);
+ // discard
+ super.discard();
+ */
+ throw new NotSupportedException(this, "discard");
+ }
+}
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 f7a0a81..59933ff 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
@@ -96,19 +96,21 @@ public abstract class DBContextBase implements DBContext
@Override
public synchronized void removeRollbackHandler(DBObject object)
{
- if (rollbackHandler!=null && rollbackHandler.containsKey(object))
- log.info("test");
-
if (object==null)
rollbackHandler=null; // remove all
else if (rollbackHandler!=null && rollbackHandler.remove(object)!=null)
log.info("Rollback handler for object {} was removed", object.getClass().getSimpleName());
}
+ /**
+ * Discard connection releated ressources
+ * WARING: No gurarantee it will be called
+ */
@Override
public void discard()
{
/* don't close connection! */
+ rollbackHandler=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 8f23b8d..1afbe4e 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
@@ -4,10 +4,8 @@
package org.apache.empire.db.context;
import java.sql.Connection;
-import java.sql.SQLException;
import org.apache.empire.db.DBDatabaseDriver;
-import org.apache.empire.db.exceptions.EmpireSQLException;
public class DBContextStatic extends DBContextBase
{