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 19:31:45 UTC
[empire-db] branch version3 updated: DBContext einführung
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 c335918 DBContext einführung
c335918 is described below
commit c335918172ff9f048f7396f3ddbaad9cf76ab399
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Wed Jan 19 20:31:42 2022 +0100
DBContext einführung
---
.../empire/samples/db/advanced/SampleAdvApp.java | 105 +++++-----
.../org/apache/empire/samples/db/SampleApp.java | 102 ++++-----
.../org/apache/empire/samples/db/SampleDB.java | 1 -
.../websample/db/records/DepartmentRecord.java | 6 +-
.../jsf2/websample/db/records/EmployeeRecord.java | 7 +-
.../jsf2/websample/db/records/SampleRecord.java | 11 +-
.../jsf2/websample/web/SampleApplication.java | 89 ++++----
.../empire/jsf2/websample/web/SampleContext.java | 48 +++++
.../websample/web/pages/EmployeeDetailPage.java | 11 +-
.../jsf2/websample/web/pages/EmployeeListPage.java | 2 +-
.../jsf2/websample/web/pages/SamplePage.java | 30 ++-
.../apache/empire/rest/app/SampleServiceApp.java | 82 +++++---
.../empire/rest/service/EmployeeService.java | 10 +-
.../org/apache/empire/rest/service/Service.java | 26 ++-
.../apache/empire/vue/sample/db/RecordContext.java | 4 +-
.../vue/sample/db/records/DepartmentRecord.java | 4 +-
.../vue/sample/db/records/EmployeeRecord.java | 8 +-
.../empire/vue/sample/db/records/SampleRecord.java | 23 +--
.../org/apache/empire/jsf2/app/FacesUtils.java | 17 +-
.../org/apache/empire/jsf2/app/WebApplication.java | 4 +-
.../jsf2/pageelements/BeanListPageElement.java | 8 +-
.../jsf2/pageelements/RecordPageElement.java | 15 +-
.../java/org/apache/empire/jsf2/pages/Page.java | 20 +-
.../org/apache/empire/jsf2/pages/PageElement.java | 10 +-
.../org/apache/empire/data/bean/BeanResult.java | 11 +-
.../java/org/apache/empire/db/DBCommandExpr.java | 6 +-
.../main/java/org/apache/empire/db/DBContext.java | 2 +
.../java/org/apache/empire/db/DBContextAware.java | 9 +
.../main/java/org/apache/empire/db/DBDatabase.java | 6 +-
.../main/java/org/apache/empire/db/DBQuery.java | 18 +-
.../main/java/org/apache/empire/db/DBReader.java | 51 +++--
.../main/java/org/apache/empire/db/DBRecord.java | 227 +++++++++++----------
.../main/java/org/apache/empire/db/DBRecordV3.java | 72 -------
.../main/java/org/apache/empire/db/DBRelation.java | 19 +-
.../main/java/org/apache/empire/db/DBRowSet.java | 30 +--
.../java/org/apache/empire/db/DBSQLScript.java | 36 +++-
.../main/java/org/apache/empire/db/DBTable.java | 3 +-
.../src/main/java/org/apache/empire/db/DBView.java | 6 +-
.../apache/empire/db/context/DBContextBase.java | 21 ++
.../apache/empire/db/context/DBContextStatic.java | 21 +-
.../empire/db/oracle/DBDatabaseDriverOracle.java | 7 +-
.../java/org/apache/empire/db/IntegerTest.java | 34 +--
.../apache/empire/db/PreparedStatementTest.java | 18 +-
.../java/org/apache/empire/db/SerializeTest.java | 9 +-
.../empire/db/hsql/DBDatabaseDriverHSqlTest.java | 58 +++---
.../db/mssql/DBDatabaseDriverMSSqlDateTest.java | 24 ++-
.../empire/db/mssql/DBDatabaseDriverMSSqlTest.java | 20 +-
.../postgresql/DBDatabaseDriverPostgreSQLTest.java | 25 ++-
.../db/sqlite/DBDatabaseDriverSQLiteTest.java | 61 +++---
49 files changed, 784 insertions(+), 653 deletions(-)
diff --git a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
index 723cc3b..169583e 100644
--- a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
+++ b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
@@ -31,12 +31,14 @@ import org.apache.empire.db.DBCmdParam;
import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBQuery;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTableColumn;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.exceptions.ConstraintViolationException;
import org.apache.empire.db.h2.DBDatabaseDriverH2;
import org.apache.empire.db.postgresql.DBDatabaseDriverPostgreSQL;
@@ -53,6 +55,8 @@ public class SampleAdvApp
private static SampleAdvConfig config = new SampleAdvConfig();
+ private static DBContext context;
+
// Shortcuts
private static SampleAdvDB.Employees T_EMP = db.T_EMPLOYEES;
private static SampleAdvDB.Departments T_DEP = db.T_DEPARTMENTS;
@@ -82,6 +86,9 @@ public class SampleAdvApp
// STEP 2: Choose a driver
System.out.println("*** Step 2: getDatabaseProvider() ***");
DBDatabaseDriver driver = getDatabaseDriver(config.getDatabaseProvider());
+
+ // STEP 2.2: Create a Context
+ context = new DBContextStatic(driver, conn);
// STEP 3: Open Database (and create if not existing)
System.out.println("*** Step 3: openDatabase() ***");
@@ -103,7 +110,7 @@ public class SampleAdvApp
{
conn.setAutoCommit(true);
}
- createDatabase(driver, conn);
+ createDatabase();
if(db.getDriver() instanceof DBDatabaseDriverPostgreSQL)
{
conn.setAutoCommit(false);
@@ -130,7 +137,7 @@ public class SampleAdvApp
int idEmp3 = insertEmployee(conn, "Emma", "White", "F");
// Insert History as batch
- DBSQLScript batch = new DBSQLScript();
+ DBSQLScript batch = new DBSQLScript(context);
insertEmpDepHistory(batch, idEmp1, idDevDep, DateUtils.getDate(2007, 12, 1));
insertEmpDepHistory(batch, idEmp1, idProdDep, DateUtils.getDate(2008, 9, 1));
insertEmpDepHistory(batch, idEmp1, idSalDep, DateUtils.getDate(2009, 5, 15));
@@ -141,10 +148,10 @@ public class SampleAdvApp
insertEmpDepHistory(batch, idEmp3, idDevDep, DateUtils.getDate(2006, 9, 15));
insertEmpDepHistory(batch, idEmp3, idSalDep, DateUtils.getDate(2007, 6, 1));
insertEmpDepHistory(batch, idEmp3, idProdDep, DateUtils.getDate(2008, 7, 31));
- batch.executeBatch(db.getDriver(), conn);
+ batch.executeBatch();
// commit
- db.commit(conn);
+ context.commit();
// STEP 7: read from Employee_Info_View
System.out.println("--------------------------------------------------------");
@@ -165,7 +172,7 @@ public class SampleAdvApp
HashMap<Integer, DBRecord> employeeMap = bulkReadRecords(conn);
DBRecord rec = employeeMap.get(idEmp2);
rec.setValue(db.T_EMPLOYEES.C_SALUTATION, "Mr.");
- rec.update(conn);
+ rec.update();
// STEP 10: bulkProcessRecords
System.out.println("--------------------------------------------------------");
@@ -183,17 +190,17 @@ public class SampleAdvApp
if (db.getDriver() instanceof DBDatabaseDriverH2) {
log.info("As H2 does not support changing a table with a view defined we remove the view");
System.out.println("*** drop EMPLOYEE_INFO_VIEW ***");
- DBSQLScript script = new DBSQLScript();
+ DBSQLScript script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.DROP, db.V_EMPLOYEE_INFO, script);
- script.executeAll(db.getDriver(), conn);
+ script.executeAll();
}
ddlSample(conn, idEmp2);
if (db.getDriver() instanceof DBDatabaseDriverH2) {
log.info("And put back the view");
System.out.println("*** create EMPLOYEE_INFO_VIEW ***");
- DBSQLScript script = new DBSQLScript();
+ DBSQLScript script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.CREATE, db.V_EMPLOYEE_INFO, script);
- script.executeAll(db.getDriver(), conn);
+ script.executeAll();
}
// STEP 13: delete records
@@ -297,17 +304,17 @@ public class SampleAdvApp
* Please make sure you uses the correct DatabaseDriver for your target dbms.
* </PRE>
*/
- private static void createDatabase(DBDatabaseDriver driver, Connection conn)
+ private static void createDatabase()
{
// create DLL for Database Definition
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(driver, script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
// Show DLL Statement
System.out.println(script.toString());
// Execute Script
- script.executeAll(driver, conn);
+ script.executeAll();
// Commit
- db.commit(conn);
+ context.commit();
}
/**
@@ -334,11 +341,11 @@ public class SampleAdvApp
private static int insertDepartment(Connection conn, String departmentName, String businessUnit)
{
// Insert a Department
- DBRecord rec = new DBRecord();
- rec.create(T_DEP);
+ DBRecord rec = new DBRecord(context, T_DEP);
+ rec.create();
rec.setValue(T_DEP.C_NAME, departmentName);
rec.setValue(T_DEP.C_BUSINESS_UNIT, businessUnit);
- rec.update(conn);
+ rec.update();
// Return Department ID
return rec.getInt(T_DEP.C_DEPARTMENT_ID);
}
@@ -351,12 +358,12 @@ public class SampleAdvApp
private static int insertEmployee(Connection conn, String firstName, String lastName, String gender)
{
// Insert an Employee
- DBRecord rec = new DBRecord();
- rec.create(T_EMP);
+ DBRecord rec = new DBRecord(context, T_EMP);
+ rec.create();
rec.setValue(T_EMP.C_FIRSTNAME, firstName);
rec.setValue(T_EMP.C_LASTNAME, lastName);
rec.setValue(T_EMP.C_GENDER, gender);
- rec.update(conn);
+ rec.update();
// Return Employee ID
return rec.getInt(T_EMP.C_EMPLOYEE_ID);
}
@@ -370,12 +377,12 @@ public class SampleAdvApp
{
// Insert an Employee
/*
- DBRecord rec = new DBRecord();
+ DBRecord rec = new DBRecord(context);
rec.create(T_EDH);
rec.setValue(T_EDH.C_EMPLOYEE_ID, employeeId);
rec.setValue(T_EDH.C_DEPARTMENT_ID, departmentId);
rec.setValue(T_EDH.C_DATE_FROM, dateFrom);
- rec.update(conn);
+ rec.update();
*/
DBCommand cmd = db.createCommand();
cmd.set(T_EDH.C_EMPLOYEE_ID.to(employeeId));
@@ -401,7 +408,7 @@ public class SampleAdvApp
System.out.println("Perfoming two queries using a the same command with different parameter values.");
- DBReader r = new DBReader();
+ DBReader r = new DBReader(context);
try {
// Query all females currently working in the Production department
System.out.println("1. Query all females currently working in the production department");
@@ -409,7 +416,7 @@ public class SampleAdvApp
genderParam.setValue('F'); // set gender to female
curDepParam.setValue(idProdDep); // set department id to production department
// Open reader using a prepared statement (due to command parameters!)
- r.open(cmd, conn);
+ r.open(cmd);
// print all results
System.out.println("Females working in the production department are:");
while (r.moveNext())
@@ -423,7 +430,7 @@ public class SampleAdvApp
genderParam.setValue('M'); // set gender to female
curDepParam.setValue(idDevDep); // set department id to production department
// Open reader using a prepared statement (due to command parameters!)
- r.open(cmd, conn);
+ r.open(cmd);
// print all results
System.out.println("Males currently working in the development department are:");
while (r.moveNext())
@@ -454,15 +461,15 @@ public class SampleAdvApp
cmd.where(T_EMP.C_RETIRED.is(false));
// Query Records and print output
- DBReader reader = new DBReader();
+ DBReader reader = new DBReader(context);
try
{
// Open Reader
System.out.println("Running Query:");
System.out.println(cmd.getSelect());
- reader.open(cmd, conn);
+ reader.open(cmd);
// Print output
- DBRecord record = new DBRecord();
+ DBRecord record = new DBRecord(context, EMP);
while (reader.moveNext())
{
// Calculate sum
@@ -470,13 +477,13 @@ public class SampleAdvApp
for (int i=0; i<reader.getFieldCount(); i++)
sum += calcCharSum(reader.getString(i));
// Init updateable record
- reader.initRecord(EMP, record);
+ reader.initRecord(record);
// reader
record.setValue(T_EMP.C_CHECKSUM, sum);
- record.update(conn);
+ record.update();
}
// Done
- db.commit(conn);
+ context.commit();
} finally
{
@@ -507,18 +514,18 @@ public class SampleAdvApp
cmd.where(T_EMP.C_RETIRED.is(false));
// Query Records and print output
- DBReader reader = new DBReader();
+ DBReader reader = new DBReader(context);
try
{ // Open Reader
System.out.println("Running Query:");
System.out.println(cmd.getSelect());
- reader.open(cmd, conn);
+ reader.open(cmd);
// Print output
HashMap<Integer, DBRecord> employeeMap = new HashMap<Integer, DBRecord>();
while (reader.moveNext())
{
- DBRecord rec = new DBRecord();
- reader.initRecord(T_EMP, rec);
+ DBRecord rec = new DBRecord(context, T_EMP);
+ reader.initRecord(rec);
employeeMap.put(reader.getInt(T_EMP.C_EMPLOYEE_ID), rec);
}
return employeeMap;
@@ -545,34 +552,34 @@ public class SampleAdvApp
// Now create the corresponding DDL statement
System.out.println("Creating new column named FOO as varchar(20) for the EMPLOYEES table:");
- DBSQLScript script = new DBSQLScript();
+ DBSQLScript script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.CREATE, C_FOO, script);
- script.executeAll(db.getDriver(), conn);
+ script.executeAll();
// Now load a record from that table and set the value for foo
System.out.println("Changing the value for the FOO field of a particular employee:");
- DBRecord rec = new DBRecord();
- rec.read(db.T_EMPLOYEES, idTestPerson, conn);
+ DBRecord rec = new DBRecord(context, db.T_EMPLOYEES);
+ rec.read(idTestPerson);
rec.setValue(C_FOO, "Hello World");
- rec.update(conn);
+ rec.update();
// Now extend the size of the field from 20 to 40 characters
System.out.println("Extending size of column FOO to 40 characters:");
C_FOO.setSize(40);
script.clear();
db.getDriver().getDDLScript(DBCmdType.ALTER, C_FOO, script);
- script.executeAll(db.getDriver(), conn);
+ script.executeAll();
// Now set a longer value for the record
System.out.println("Changing the value for the FOO field for the above employee to a longer string:");
rec.setValue(C_FOO, "This is a very long field value!");
- rec.update(conn);
+ rec.update();
// Finally, drop the column again
System.out.println("Dropping the FOO column from the employee table:");
script.clear();
db.getDriver().getDDLScript(DBCmdType.DROP, C_FOO, script);
- script.executeAll(db.getDriver(), conn);
+ script.executeAll();
}
/**
@@ -619,12 +626,12 @@ public class SampleAdvApp
// Define an updateable query
DBQuery Q_EMP_DEP = new DBQuery(cmd, T_EMP.C_EMPLOYEE_ID);
- DBRecord rec = new DBRecord();
- rec.read(Q_EMP_DEP, employeeId, conn);
+ DBRecord rec = new DBRecord(context, Q_EMP_DEP);
+ rec.read(employeeId);
// Modify and Update fields from both Employee and Department
rec.setValue(T_EMP.C_PHONE_NUMBER, "0815-4711");
rec.setValue(T_DEP.C_BUSINESS_UNIT, "AUTO");
- rec.update(conn);
+ rec.update();
// Successfully updated
System.out.println("The employee has been sucessfully updated");
}
@@ -639,7 +646,7 @@ public class SampleAdvApp
*/
private static void deleteRecordSample(int idEmployee, int idDepartment, Connection conn)
{
- db.commit(conn);
+ context.commit();
// Delete an employee
// This statement is designed to succeed since cascaded deletes are enabled for this relation.
db.T_EMPLOYEES.deleteRecord(idEmployee, conn);
@@ -662,12 +669,12 @@ public class SampleAdvApp
private static void printQueryResults(DBCommand cmd, Connection conn)
{
// Query Records and print output
- DBReader reader = new DBReader();
+ DBReader reader = new DBReader(context);
try
{ // Open Reader
System.out.println("Running Query:");
System.out.println(cmd.getSelect());
- reader.open(cmd, conn);
+ reader.open(cmd);
// Print column titles
System.out.println("---------------------------------");
int count = reader.getFieldCount();
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 31ede21..84a4beb 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
@@ -30,7 +30,6 @@ import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRecord;
-import org.apache.empire.db.DBRecordV3;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.derby.DBDatabaseDriverDerby;
@@ -51,7 +50,9 @@ public class SampleApp
private static final SampleDB db = new SampleDB();
- private static SampleConfig config = new SampleConfig();
+ private static SampleConfig config = new SampleConfig();
+
+ private static DBContext context;
private enum QueryType
{
@@ -85,7 +86,8 @@ public class SampleApp
System.out.println("*** Step 2: getDatabaseProvider() ***");
DBDatabaseDriver driver = getDatabaseDriver(config.getDatabaseProvider(), conn);
- DBContext context = new DBContextStatic(driver, conn);
+ // STEP 2.2: Create a Context
+ context = new DBContextStatic(driver, conn);
// STEP 3: Open Database (and create if not existing)
System.out.println("*** Step 3: openDatabase() ***");
@@ -104,7 +106,7 @@ public class SampleApp
{
conn.setAutoCommit(true);
}
- createDatabase(driver, conn);
+ createDatabase();
if(db.getDriver() instanceof DBDatabaseDriverPostgreSQL)
{
conn.setAutoCommit(false);
@@ -120,40 +122,40 @@ public class SampleApp
// STEP 6: Insert Departments
System.out.println("*** Step 6: insertDepartment() & insertEmployee() ***");
- int idDevDep = insertDepartment(conn, "Development", "ITTK");
- int idSalDep = insertDepartment(conn, "Sales", "ITTK");
+ int idDevDep = insertDepartment("Development", "ITTK");
+ int idSalDep = insertDepartment("Sales", "ITTK");
// Insert Employees
- int idPers1 = insertEmployee(conn, "Peter", "Sharp", Gender.M, idDevDep);
- int idPers2 = insertEmployee(conn, "Fred", "Bloggs", Gender.M, idDevDep);
- int idPers3 = insertEmployee(conn, "Emma", "White", Gender.F, idSalDep);
+ int idPers1 = insertEmployee("Peter", "Sharp", Gender.M, idDevDep);
+ int idPers2 = insertEmployee("Fred", "Bloggs", Gender.M, idDevDep);
+ int idPers3 = insertEmployee("Emma", "White", Gender.F, idSalDep);
// commit
- db.commit(conn);
+ context.commit();
- int idEmp = testTransactionCreate(context, idDevDep);
- testTransactionUpdate(context, idEmp);
- testTransactionDelete(context, idEmp);
+ int idEmp = testTransactionCreate(idDevDep);
+ testTransactionUpdate(idEmp);
+ testTransactionDelete(idEmp);
// STEP 7: Update Records (by setting the phone Number)
System.out.println("*** Step 7: updateEmployee() ***");
- updateEmployee(conn, idPers1, "+49-7531-457160");
- updateEmployee(conn, idPers2, "+49-5555-505050");
- updateEmployee(conn, idPers3, "+49-040-125486");
+ updateEmployee(idPers1, "+49-7531-457160");
+ updateEmployee(idPers2, "+49-5555-505050");
+ updateEmployee(idPers3, "+49-040-125486");
// commit
- db.commit(conn);
+ context.commit();
// STEP 8: Option 1: Query Records and print tab-separated
System.out.println("*** Step 8 Option 1: queryRecords() / Tab-Output ***");
- queryRecords(conn, QueryType.Reader); // Tab-Output
+ queryRecords(QueryType.Reader); // Tab-Output
// STEP 8: Option 2: Query Records as a list of java beans
System.out.println("*** Step 8 Option 2: queryRecords() / Bean-List-Output ***");
- queryRecords(conn, QueryType.BeanList); // Bean-List-Output
+ queryRecords(QueryType.BeanList); // Bean-List-Output
// STEP 8: Option 3: Query Records as XML
System.out.println("*** Step 8 Option 3: queryRecords() / XML-Output ***");
- queryRecords(conn, QueryType.XmlDocument); // XML-Output
+ queryRecords(QueryType.XmlDocument); // XML-Output
// STEP 9: Use Bean Result to query beans
queryBeans(conn);
@@ -166,8 +168,10 @@ public class SampleApp
// Error
System.out.println(e.toString());
e.printStackTrace();
+
+ } finally {
+ context.discard();
}
-
}
/**
@@ -259,17 +263,17 @@ public class SampleApp
* Please make sure you uses the correct DatabaseDriver for your target DBMS.
* </PRE>
*/
- private static void createDatabase(DBDatabaseDriver driver, Connection conn)
+ private static void createDatabase()
{
// create DDL for Database Definition
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(driver, script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
// Show DDL Statement
System.out.println(script.toString());
// Execute Script
- script.executeAll(driver, conn, false);
+ script.executeAll(false);
// Commit
- db.commit(conn);
+ context.commit();
}
/**
@@ -291,14 +295,14 @@ public class SampleApp
* Insert a Department into the Departments table.
* </PRE>
*/
- private static int insertDepartment(Connection conn, String departmentName, String businessUnit)
+ private static int insertDepartment(String departmentName, String businessUnit)
{
// Insert a Department
- DBRecord rec = new DBRecord();
- rec.create(db.DEPARTMENTS);
+ DBRecord rec = new DBRecord(context, db.DEPARTMENTS);
+ rec.create();
rec.setValue(db.DEPARTMENTS.NAME, departmentName);
rec.setValue(db.DEPARTMENTS.BUSINESS_UNIT, businessUnit);
- rec.update(conn);
+ rec.update();
// Return Department ID
return rec.getInt(db.DEPARTMENTS.DEPARTMENT_ID);
}
@@ -308,16 +312,16 @@ public class SampleApp
* Inserts an Employee into the Employees table.
* </PRE>
*/
- private static int insertEmployee(Connection conn, String firstName, String lastName, Gender gender, int departmentId)
+ private static int insertEmployee(String firstName, String lastName, Gender gender, int departmentId)
{
// Insert an Employee
- DBRecord rec = new DBRecord();
- rec.create(db.EMPLOYEES);
+ DBRecord rec = new DBRecord(context, db.EMPLOYEES);
+ rec.create();
rec.setValue(db.EMPLOYEES.FIRSTNAME, firstName);
rec.setValue(db.EMPLOYEES.LASTNAME, lastName);
rec.setValue(db.EMPLOYEES.GENDER, gender);
rec.setValue(db.EMPLOYEES.DEPARTMENT_ID, departmentId);
- rec.update(conn);
+ rec.update();
// Return Employee ID
return rec.getInt(db.EMPLOYEES.EMPLOYEE_ID);
}
@@ -327,24 +331,24 @@ public class SampleApp
* Updates an employee record by setting the phone number.
* </PRE>
*/
- private static void updateEmployee(Connection conn, int idPers, String phoneNumber)
+ private static void updateEmployee(int idPers, String phoneNumber)
{
// Update an Employee
- DBRecord rec = new DBRecord();
- rec.read(db.EMPLOYEES, idPers, conn);
+ DBRecord rec = new DBRecord(context, db.EMPLOYEES);
+ rec.read(idPers);
// Set
rec.setValue(db.EMPLOYEES.PHONE_NUMBER, phoneNumber);
- rec.update(conn);
+ rec.update();
}
/**
* @param context
* @param idDep
*/
- private static int testTransactionCreate(DBContext context, int idDep)
+ private static int testTransactionCreate(int idDep)
{
SampleDB.Employees T = db.EMPLOYEES;
- DBRecordV3 rec = new DBRecordV3(context, T);
+ DBRecord rec = new DBRecord(context, T);
rec.create();
rec.setValue(T.FIRSTNAME, "Foo");
@@ -383,10 +387,10 @@ public class SampleApp
* @param context
* @param idDep
*/
- private static void testTransactionUpdate(DBContext context, int idEmp)
+ private static void testTransactionUpdate(int idEmp)
{
SampleDB.Employees T = db.EMPLOYEES;
- DBRecordV3 rec = new DBRecordV3(context, T);
+ DBRecord rec = new DBRecord(context, T);
rec.read(idEmp);
rec.setValue(T.PHONE_NUMBER, null);
@@ -415,10 +419,10 @@ public class SampleApp
* @param context
* @param idDep
*/
- private static void testTransactionDelete(DBContext context, int idEmp)
+ private static void testTransactionDelete(int idEmp)
{
SampleDB.Employees T = db.EMPLOYEES;
- DBRecordV3 rec = new DBRecordV3(context, T);
+ DBRecord rec = new DBRecord(context, T);
rec.read(idEmp);
/*
@@ -471,7 +475,7 @@ public class SampleApp
* Please note, that the XML not only contains the data but also the field metadata.
* </PRE>
*/
- private static void queryRecords(Connection conn, QueryType queryType)
+ private static void queryRecords(QueryType queryType)
{
// Define the query
DBCommand cmd = db.createCommand();
@@ -515,13 +519,13 @@ public class SampleApp
*/
// Query Records and print output
- DBReader reader = new DBReader();
+ DBReader reader = new DBReader(context);
try
{
// Open Reader
System.out.println("Running Query:");
System.out.println(cmd.getSelect());
- reader.open(cmd, conn);
+ reader.open(cmd);
// Print output
System.out.println("---------------------------------");
switch(queryType)
@@ -566,13 +570,13 @@ public class SampleApp
// Query all males
BeanResult<SampleBean> result = new BeanResult<SampleBean>(SampleBean.class, db.EMPLOYEES);
result.getCommand().where(db.EMPLOYEES.GENDER.is(Gender.M));
- result.fetch(conn);
+ result.fetch(context);
System.out.println("Number of male employees is: "+result.size());
// And now, the females
result.getCommand().where(db.EMPLOYEES.GENDER.is(Gender.F));
- result.fetch(conn);
+ result.fetch(context);
System.out.println("Number of female employees is: "+result.size());
}
diff --git a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
index 93efb64..05a05b2 100644
--- a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
+++ b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
@@ -18,7 +18,6 @@
*/
package org.apache.empire.samples.db;
-import org.apache.empire.commons.Options;
import org.apache.empire.data.DataType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBDatabase;
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java
index 717eef7..76dd579 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/DepartmentRecord.java
@@ -18,16 +18,16 @@
*/
package org.apache.empire.jsf2.websample.db.records;
-import org.apache.empire.jsf2.websample.db.SampleDB;
import org.apache.empire.jsf2.websample.db.SampleDB.TDepartments;
+import org.apache.empire.jsf2.websample.web.SampleContext;
public class DepartmentRecord extends SampleRecord<TDepartments>
{
private final static long serialVersionUID = 1L;
- public DepartmentRecord(SampleDB db)
+ public DepartmentRecord(SampleContext context)
{
- super(db.T_DEPARTMENTS);
+ super(context, context.getDatabase().T_DEPARTMENTS);
}
}
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 6c1789a..076f108 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
@@ -24,15 +24,16 @@ import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBCommand;
import org.apache.empire.jsf2.websample.db.SampleDB;
import org.apache.empire.jsf2.websample.db.SampleDB.TEmployees;
+import org.apache.empire.jsf2.websample.web.SampleContext;
import org.apache.empire.jsf2.websample.web.SampleUtils;
public class EmployeeRecord extends SampleRecord<TEmployees>
{
private final static long serialVersionUID = 1L;
- public EmployeeRecord(SampleDB db)
+ public EmployeeRecord(SampleContext context)
{
- super(db.T_EMPLOYEES);
+ super(context, context.getDatabase().T_EMPLOYEES);
}
/*
@@ -68,7 +69,7 @@ public class EmployeeRecord extends SampleRecord<TEmployees>
// Sample Implementation for Department Record
public DepartmentRecord getDepartmentRecord()
{
- DepartmentRecord rec = new DepartmentRecord((SampleDB)this.getDatabase());
+ DepartmentRecord rec = new DepartmentRecord((SampleContext)getContext());
SampleDB.TDepartments table = SampleUtils.getDatabase().T_DEPARTMENTS;
rec.read(table, this.getInt(T.DEPARTMENT_ID), SampleUtils.getConnection());
return rec;
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java
index f8d8203..1332b2d 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/db/records/SampleRecord.java
@@ -18,8 +18,7 @@
*/
package org.apache.empire.jsf2.websample.db.records;
-import java.sql.Connection;
-
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBRecord;
import org.apache.empire.jsf2.websample.db.SampleTable;
@@ -30,8 +29,8 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
protected T T; // The table
- public SampleRecord(T table) {
- super(table);
+ public SampleRecord(DBContext context, T table) {
+ super(context, table);
this.T = table;
}
@@ -42,7 +41,8 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
public T getTable() {
return T;
}
-
+
+ /*
public void create(Connection conn)
{
super.create(getTable(), conn);
@@ -62,5 +62,6 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
{
super.read(getTable(), id, conn);
}
+ */
}
\ No newline at end of file
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleApplication.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleApplication.java
index 7cb3811..02c62e9 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleApplication.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleApplication.java
@@ -20,6 +20,7 @@ package org.apache.empire.jsf2.websample.web;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.SQLException;
import java.util.Locale;
import javax.servlet.ServletContext;
@@ -27,10 +28,12 @@ import javax.sql.DataSource;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.exceptions.QueryFailedException;
import org.apache.empire.db.hsql.DBDatabaseDriverHSql;
import org.apache.empire.db.mysql.DBDatabaseDriverMySQL;
@@ -133,15 +136,18 @@ public class SampleApplication extends WebApplication {
DBDatabaseDriver driver = getDatabaseDriver(driverProvider);
log.info("Opening database '{}' using driver '{}'", sampleDB.getClass().getSimpleName(), driver.getClass().getSimpleName());
Connection conn = null;
+ DBContext context = null;
try {
conn = getConnection(sampleDB);
+ context = new DBContextStatic(driver, conn);
sampleDB.open(driver, conn);
if (!databaseExists(conn)) {
// STEP 4: Create Database
log.info("Creating database {}", sampleDB.getClass().getSimpleName());
- createSampleDatabase(driver, conn);
+ createSampleDatabase(context);
}
} finally {
+ context.discard();
releaseConnection(sampleDB, conn, true);
}
}
@@ -199,43 +205,42 @@ public class SampleApplication extends WebApplication {
* the department tables does not exist, the entire dll-script is executed
* line by line
*/
- private void createSampleDatabase(DBDatabaseDriver driver, Connection conn) {
+ private void createSampleDatabase(DBContext context) {
// create DLL for Database Definition
- DBSQLScript script = new DBSQLScript();
- sampleDB.getCreateDDLScript(driver, script);
+ DBSQLScript script = new DBSQLScript(context);
+ sampleDB.getCreateDDLScript(script);
// Show DLL Statements
System.out.println(script.toString());
// Execute Script
- script.executeAll(driver, conn, false);
- sampleDB.commit(conn);
+ script.executeAll(false);
+ context.commit();
// Open again
if (!sampleDB.isOpen()) {
- sampleDB.open(driver, conn);
+ sampleDB.open(context.getDriver(), conn);
}
// Insert Sample Departments
- insertDepartmentSampleRecord(conn, "Procurement", "ITTK");
- int idDevDep = insertDepartmentSampleRecord(conn, "Development", "ITTK");
- int idSalDep = insertDepartmentSampleRecord(conn, "Sales", "ITTK");
+ insertDepartmentSampleRecord(context, "Procurement", "ITTK");
+ int idDevDep = insertDepartmentSampleRecord(context, "Development", "ITTK");
+ int idSalDep = insertDepartmentSampleRecord(context, "Sales", "ITTK");
// Insert Sample Employees
- insertEmployeeSampleRecord(conn, "Mr.", "Eugen", "Miller", "M", idDevDep);
- insertEmployeeSampleRecord(conn, "Mr.", "Max", "Mc. Callahan", "M", idDevDep);
- insertEmployeeSampleRecord(conn, "Mrs.", "Anna", "Smith", "F", idSalDep);
+ insertEmployeeSampleRecord(context, "Mr.", "Eugen", "Miller", "M", idDevDep);
+ insertEmployeeSampleRecord(context, "Mr.", "Max", "Mc. Callahan", "M", idDevDep);
+ insertEmployeeSampleRecord(context, "Mrs.", "Anna", "Smith", "F", idSalDep);
// Commit
- sampleDB.commit(conn);
+ context.commit();
}
/*
* Insert a department
*/
- private int insertDepartmentSampleRecord(Connection conn,
- String department_name, String businessUnit) {
+ private int insertDepartmentSampleRecord(DBContext context, String department_name, String businessUnit) {
// Insert a Department
- DBRecord rec = new DBRecord();
- rec.create(sampleDB.T_DEPARTMENTS);
+ DBRecord rec = new DBRecord(context, sampleDB.T_DEPARTMENTS);
+ rec.create();
rec.setValue(sampleDB.T_DEPARTMENTS.NAME, department_name);
rec.setValue(sampleDB.T_DEPARTMENTS.BUSINESS_UNIT, businessUnit);
try {
- rec.update(conn);
+ rec.update();
} catch (Exception e) {
log.error(e.getLocalizedMessage());
return 0;
@@ -247,18 +252,17 @@ public class SampleApplication extends WebApplication {
/*
* Insert a person
*/
- private int insertEmployeeSampleRecord(Connection conn, String salutation,
- String firstName, String lastName, String gender, int depID) {
+ private int insertEmployeeSampleRecord(DBContext context, String salutation, String firstName, String lastName, String gender, int depID) {
// Insert an Employee
- DBRecord rec = new DBRecord();
- rec.create(sampleDB.T_EMPLOYEES);
+ DBRecord rec = new DBRecord(context, sampleDB.T_EMPLOYEES);
+ rec.create();
rec.setValue(sampleDB.T_EMPLOYEES.SALUTATION, salutation);
rec.setValue(sampleDB.T_EMPLOYEES.FIRST_NAME, firstName);
rec.setValue(sampleDB.T_EMPLOYEES.LAST_NAME, lastName);
rec.setValue(sampleDB.T_EMPLOYEES.GENDER, gender);
rec.setValue(sampleDB.T_EMPLOYEES.DEPARTMENT_ID, depID);
try {
- rec.update(conn);
+ rec.update();
} catch (Exception e) {
log.error(e.getLocalizedMessage());
return 0;
@@ -293,21 +297,30 @@ public class SampleApplication extends WebApplication {
@Override
protected void releaseConnection(DBDatabase db, Connection conn, boolean commit)
{
- // release connection
- if (conn == null)
- {
- return;
+ try
+ { // release connection
+ if (conn == null)
+ {
+ return;
+ }
+ // Commit or rollback connection depending on the exit code
+ if (commit)
+ { // success: commit all changes
+ conn.commit();
+ log.debug("REQUEST commited.");
+ }
+ else
+ { // failure: rollback all changes
+ conn.rollback();
+ log.debug("REQUEST rolled back.");
+ }
+ // Don't Release Connection
+ // conn.close();
}
- // Commit or rollback connection depending on the exit code
- if (commit)
- { // success: commit all changes
- db.commit(conn);
- log.debug("REQUEST {}: commited.");
- }
- else
- { // failure: rollback all changes
- db.rollback(conn);
- log.debug("REQUEST {}: rolled back.");
+ catch (SQLException e)
+ {
+ log.error("Error releasing connection", e);
+ e.printStackTrace();
}
}
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
new file mode 100644
index 0000000..e328ec0
--- /dev/null
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
@@ -0,0 +1,48 @@
+/*
+ * ESTEAM Software GmbH, 19.01.2022
+ */
+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.websample.db.SampleDB;
+
+public class SampleContext extends DBContextBase
+{
+ private final SampleApplication app;
+
+ private final SampleDB db;
+
+ public SampleContext(SampleApplication app)
+ {
+ this.app = app;
+ this.db = app.getDatabase();
+ }
+
+ public SampleDB getDatabase()
+ {
+ return db;
+ }
+
+ 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);
+ }
+}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
index 571ed64..7f91052 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeDetailPage.java
@@ -43,7 +43,7 @@ public class EmployeeDetailPage extends SamplePage
log.trace("EmployeeDetailPage created");
SampleDB db = getDatabase();
- EmployeeRecord emplRec = new EmployeeRecord(db);
+ EmployeeRecord emplRec = new EmployeeRecord(getSampleContext());
employee = new RecordPageElement<EmployeeRecord>(this, emplRec.getTable(), emplRec);
}
@@ -96,22 +96,19 @@ public class EmployeeDetailPage extends SamplePage
public void doCreate()
{
- Connection conn = getConnection();
- getEmployeeRecord().create(conn);
+ getEmployeeRecord().create();
doRefresh();
}
public PageOutcome doSave()
{
- Connection conn = getConnection();
- getEmployeeRecord().update(conn);
+ getEmployeeRecord().update();
return getParentOutcome(true);
}
public PageOutcome doDelete()
{
- Connection conn = getConnection();
- getEmployeeRecord().delete(conn);
+ getEmployeeRecord().delete();
return getParentOutcome(true);
}
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
index e98a72b..18af8d8 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/EmployeeListPage.java
@@ -208,7 +208,7 @@ public class EmployeeListPage extends SamplePage
queryCmd.select(DEP.DEPARTMENT_ID,DEP.NAME);
SampleDB db = getDatabase();
- return db.queryOptionList(queryCmd, getConnection());
+ return db.queryOptionList(queryCmd, getSampleContext().getConnection());
}
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 396341e..84eefca 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
@@ -18,12 +18,13 @@
*/
package org.apache.empire.jsf2.websample.web.pages;
-import java.sql.Connection;
-
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
+import org.apache.empire.db.DBDatabase;
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.SampleUser;
import org.apache.empire.jsf2.websample.web.SampleUtils;
@@ -31,6 +32,23 @@ public class SamplePage extends Page
{
private static final long serialVersionUID = 1L;
+ private SampleContext sampleContext = null;
+
+ public SampleContext getSampleContext()
+ {
+ if (this.sampleContext == null)
+ {
+ SampleApplication app = SampleUtils.getSampleApplication();
+ this.sampleContext = new SampleContext(app);
+ }
+ return this.sampleContext;
+ }
+
+ @Override
+ public DBContext getDBContext(DBDatabase db)
+ {
+ return getSampleContext();
+ }
protected SampleApplication getApplication()
{
@@ -42,12 +60,6 @@ public class SamplePage extends Page
return SampleUtils.getDatabase();
}
- public Connection getConnection()
- {
- Connection conn = SampleUtils.getConnection();
- return conn;
- }
-
public SampleUser getUser()
{
return SampleUtils.getSampleUser();
@@ -58,8 +70,6 @@ public class SamplePage extends Page
// return SampleUtils.getSampleSession().getUser().getLanguageIndex();
// }
-
-
protected DBCommand createQueryCommand()
{
return getDatabase().createCommand();
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/SampleServiceApp.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/SampleServiceApp.java
index 8a9e1a5..392949d 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/SampleServiceApp.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/SampleServiceApp.java
@@ -19,6 +19,7 @@
package org.apache.empire.rest.app;
import java.sql.Connection;
import java.sql.DriverManager;
+import java.sql.SQLException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
@@ -30,10 +31,12 @@ import javax.servlet.ServletContextListener;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.exceptions.QueryFailedException;
import org.apache.empire.db.hsql.DBDatabaseDriverHSql;
import org.apache.empire.rest.service.Service;
@@ -144,16 +147,30 @@ public class SampleServiceApp
protected void releaseConnection(DBDatabase db, Connection conn, boolean commit) {
// release connection
- if (conn == null) {
- return;
+ try
+ { // release connection
+ if (conn == null)
+ {
+ return;
+ }
+ // Commit or rollback connection depending on the exit code
+ if (commit)
+ { // success: commit all changes
+ conn.commit();
+ log.debug("REQUEST commited.");
+ }
+ else
+ { // failure: rollback all changes
+ conn.rollback();
+ log.debug("REQUEST rolled back.");
+ }
+ // Don't Release Connection
+ // conn.close();
}
- // Commit or rollback connection depending on the exit code
- if (commit) { // success: commit all changes
- db.commit(conn);
- log.debug("REQUEST {}: commited.");
- } else { // failure: rollback all changes
- db.rollback(conn);
- log.debug("REQUEST {}: rolled back.");
+ catch (SQLException e)
+ {
+ log.error("Error releasing connection", e);
+ e.printStackTrace();
}
}
@@ -167,15 +184,18 @@ public class SampleServiceApp
DBDatabaseDriver driver = new DBDatabaseDriverHSql();
log.info("Opening database '{}' using driver '{}'", db.getClass().getSimpleName(), driver.getClass().getSimpleName());
Connection conn = null;
+ DBContext context = null;
try {
conn = getJDBCConnection(ctx);
+ context = new DBContextStatic(driver, conn);
db.open(driver, conn);
if (!databaseExists(db, conn)) {
// STEP 4: Create Database
log.info("Creating database {}", db.getClass().getSimpleName());
- createSampleDatabase(db, driver, conn);
+ createSampleDatabase(db, context);
}
} finally {
+ context.discard();
releaseConnection(db, conn, true);
}
@@ -193,39 +213,39 @@ public class SampleServiceApp
}
}
- private static void createSampleDatabase(SampleDB db, DBDatabaseDriver driver, Connection conn) {
+ private static void createSampleDatabase(SampleDB db, DBContext context) {
// create DLL for Database Definition
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(driver, script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
// Show DLL Statements
System.out.println(script.toString());
// Execute Script
- script.executeAll(driver, conn, false);
- db.commit(conn);
+ script.executeAll(false);
+ context.commit();
// Open again
if (!db.isOpen()) {
- db.open(driver, conn);
+ db.open(context.getDriver(), context.getConnection());
}
// Insert Sample Departments
- insertDepartmentSampleRecord(db, conn, "Procurement", "ITTK");
- int idDevDep = insertDepartmentSampleRecord(db, conn, "Development", "ITTK");
- int idSalDep = insertDepartmentSampleRecord(db, conn, "Sales", "ITTK");
+ insertDepartmentSampleRecord(db, context, "Procurement", "ITTK");
+ int idDevDep = insertDepartmentSampleRecord(db, context, "Development", "ITTK");
+ int idSalDep = insertDepartmentSampleRecord(db, context, "Sales", "ITTK");
// Insert Sample Employees
- insertEmployeeSampleRecord(db, conn, "Mr.", "Eugen", "Miller", "M", idDevDep);
- insertEmployeeSampleRecord(db, conn, "Mr.", "Max", "Mc. Callahan", "M", idDevDep);
- insertEmployeeSampleRecord(db, conn, "Mrs.", "Anna", "Smith", "F", idSalDep);
+ insertEmployeeSampleRecord(db, context, "Mr.", "Eugen", "Miller", "M", idDevDep);
+ insertEmployeeSampleRecord(db, context, "Mr.", "Max", "Mc. Callahan", "M", idDevDep);
+ insertEmployeeSampleRecord(db, context, "Mrs.", "Anna", "Smith", "F", idSalDep);
// Commit
- db.commit(conn);
+ context.commit();
}
- private static int insertDepartmentSampleRecord(SampleDB db, Connection conn, String department_name, String businessUnit) {
+ private static int insertDepartmentSampleRecord(SampleDB db, DBContext context, String department_name, String businessUnit) {
// Insert a Department
- DBRecord rec = new DBRecord();
- rec.create(db.T_DEPARTMENTS);
+ DBRecord rec = new DBRecord(context, db.T_DEPARTMENTS);
+ rec.create();
rec.setValue(db.T_DEPARTMENTS.NAME, department_name);
rec.setValue(db.T_DEPARTMENTS.BUSINESS_UNIT, businessUnit);
try {
- rec.update(conn);
+ rec.update();
} catch (Exception e) {
log.error(e.getLocalizedMessage());
return 0;
@@ -237,17 +257,17 @@ public class SampleServiceApp
/*
* Insert a person
*/
- private static int insertEmployeeSampleRecord(SampleDB db, Connection conn, String salutation, String firstName, String lastName, String gender, int depID) {
+ private static int insertEmployeeSampleRecord(SampleDB db, DBContext context, String salutation, String firstName, String lastName, String gender, int depID) {
// Insert an Employee
- DBRecord rec = new DBRecord();
- rec.create(db.T_EMPLOYEES);
+ DBRecord rec = new DBRecord(context, db.T_EMPLOYEES);
+ rec.create();
rec.setValue(db.T_EMPLOYEES.SALUTATION, salutation);
rec.setValue(db.T_EMPLOYEES.FIRST_NAME, firstName);
rec.setValue(db.T_EMPLOYEES.LAST_NAME, lastName);
rec.setValue(db.T_EMPLOYEES.GENDER, gender);
rec.setValue(db.T_EMPLOYEES.DEPARTMENT_ID, depID);
try {
- rec.update(conn);
+ rec.update();
} catch (Exception e) {
log.error(e.getLocalizedMessage());
return 0;
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java
index aef35f5..eb1a24c 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java
@@ -126,10 +126,10 @@ public class EmployeeService extends Service {
meta[i] = new JsoColumnMeta(cols[i], txtres);
}
- DBReader reader = new DBReader();
+ DBReader reader = new DBReader(getRecordContext());
List<JsoRecordData> list = new ArrayList<>();
try {
- reader.open(cmd, getConnection());
+ reader.open(cmd);
while (reader.moveNext()) {
list.add(new JsoRecordData(reader));
}
@@ -148,7 +148,7 @@ public class EmployeeService extends Service {
RecordContext ctx = this.getRecordContext();
try {
// return a record
- EmployeeRecord rec = new EmployeeRecord(getDatabase(), ctx);
+ EmployeeRecord rec = new EmployeeRecord(ctx);
rec.read(employeeId);
JsoRecordData emp = new JsoRecordData(rec);
return Response.ok(new JsoResultWithMeta(emp, rec.getMeta())).build();
@@ -167,7 +167,7 @@ public class EmployeeService extends Service {
RecordContext ctx = this.getRecordContext();
try {
// return a record
- EmployeeRecord rec = new EmployeeRecord(getDatabase(), ctx);
+ EmployeeRecord rec = new EmployeeRecord(ctx);
rec.create();
JsoRecordData emp = new JsoRecordData(rec);
return Response.ok(new JsoResultWithMeta(emp, rec.getMeta())).build();
@@ -187,7 +187,7 @@ public class EmployeeService extends Service {
RecordContext ctx = this.getRecordContext();
try {
// return a record
- EmployeeRecord rec = new EmployeeRecord(getDatabase(), ctx);
+ EmployeeRecord rec = new EmployeeRecord(ctx);
rec.init(employeeData, employeeData.isNewRecord());
rec.update();
return Response.ok().build();
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 f087e82..2116e71 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
@@ -29,6 +29,8 @@ import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
+import org.apache.empire.db.DBDatabaseDriver;
+import org.apache.empire.db.context.DBContextBase;
import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.rest.app.SampleServiceApp;
import org.apache.empire.rest.app.TextResolver;
@@ -62,18 +64,32 @@ public abstract class Service {
* Holds a connection and therefore must not live for longer than the request
* @author doebele
*/
- public static class ServiceRecordContext implements RecordContext
+ public static class ServiceRecordContext extends DBContextBase implements RecordContext
{
+ private final SampleDB db;
private final Connection conn;
private final TextResolver textResolver;
- public ServiceRecordContext(Connection conn)
+ public ServiceRecordContext(SampleDB db, Connection conn)
{
+ this.db = db;
this.conn = conn;
this.textResolver = SampleServiceApp.instance().getTextResolver(Locale.ENGLISH);
}
@Override
+ public SampleDB getDb()
+ {
+ return db;
+ }
+
+ @Override
+ public DBDatabaseDriver getDriver()
+ {
+ return db.getDriver();
+ }
+
+ @Override
public Connection getConnection()
{
return conn;
@@ -87,7 +103,7 @@ public abstract class Service {
}
@Context
- private ServletContext context;
+ private ServletContext servletContext;
@Context
private ContainerRequestContext containerRequestContext;
@@ -96,7 +112,7 @@ public abstract class Service {
private HttpServletRequest req;
public SampleDB getDatabase() {
- return (SampleDB) this.context.getAttribute(Service.Consts.ATTRIBUTE_DB);
+ return (SampleDB) this.servletContext.getAttribute(Service.Consts.ATTRIBUTE_DB);
}
public Connection getConnection() {
@@ -105,7 +121,7 @@ public abstract class Service {
}
public RecordContext getRecordContext() {
- return new ServiceRecordContext(getConnection());
+ return new ServiceRecordContext(getDatabase(), getConnection());
}
public ServletRequest getServletRequest() {
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java
index 32d9418..d7a2739 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java
@@ -20,6 +20,7 @@ package org.apache.empire.vue.sample.db;
import java.sql.Connection;
+import org.apache.empire.db.DBContext;
import org.apache.empire.rest.app.TextResolver;
/**
@@ -28,8 +29,9 @@ import org.apache.empire.rest.app.TextResolver;
* @author doebele
*
*/
-public interface RecordContext
+public interface RecordContext extends DBContext
{
+ SampleDB getDb();
/**
* provide a JDBC connection for DB operations
* @return the JDBC connection
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/DepartmentRecord.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/DepartmentRecord.java
index b38e61c..69b9845 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/DepartmentRecord.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/DepartmentRecord.java
@@ -26,9 +26,9 @@ public class DepartmentRecord extends SampleRecord<TDepartments>
{
private final static long serialVersionUID = 1L;
- public DepartmentRecord(SampleDB db, RecordContext recordContext)
+ public DepartmentRecord(RecordContext recordContext)
{
- super(db.T_DEPARTMENTS, recordContext);
+ super(recordContext.getDb().T_DEPARTMENTS, recordContext);
}
}
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/EmployeeRecord.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/EmployeeRecord.java
index cffe29a..38656a5 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/EmployeeRecord.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/EmployeeRecord.java
@@ -30,9 +30,9 @@ public class EmployeeRecord extends SampleRecord<TEmployees>
{
private final static long serialVersionUID = 1L;
- public EmployeeRecord(SampleDB db, RecordContext recordContext)
+ public EmployeeRecord(RecordContext recordContext)
{
- super(db.T_EMPLOYEES, recordContext);
+ super(recordContext.getDb().T_EMPLOYEES, recordContext);
}
/*
@@ -68,9 +68,9 @@ public class EmployeeRecord extends SampleRecord<TEmployees>
// Sample Implementation for Department Record
public DepartmentRecord getDepartmentRecord()
{
- DepartmentRecord rec = new DepartmentRecord((SampleDB)this.getDatabase(), recordContext);
+ DepartmentRecord rec = new DepartmentRecord(recordContext);
SampleDB.TDepartments table = ((SampleDB)getDatabase()).T_DEPARTMENTS;
- rec.read(table, this.getInt(T.DEPARTMENT_ID), recordContext.getConnection());
+ rec.read(this.getInt(T.DEPARTMENT_ID));
return rec;
}
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java
index eba7767..73a93f1 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java
@@ -43,7 +43,7 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
protected final RecordContext recordContext;
public SampleRecord(T table, RecordContext recordContext) {
- super(table);
+ super(recordContext, table);
this.T = table;
this.recordContext = recordContext;
}
@@ -129,25 +129,4 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
throw new RecordInitException(exptns);
}
}
-
- public void create()
- {
- super.create(getTable(), recordContext.getConnection());
- }
-
- public void read(Object[] keys)
- {
- super.read(getTable(), keys, recordContext.getConnection());
- }
-
- public void read(Object id)
- {
- super.read(getTable(), id, recordContext.getConnection());
- }
-
- public void update()
- {
- super.update(recordContext.getConnection());
- }
-
}
\ No newline at end of file
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
index 19bf909..d20add2 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
@@ -20,7 +20,6 @@ package org.apache.empire.jsf2.app;
import java.io.File;
import java.io.IOException;
-import java.sql.Connection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -38,6 +37,7 @@ import javax.servlet.http.HttpServletRequest;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.Column;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.exceptions.EmpireException;
import org.apache.empire.exceptions.InternalException;
@@ -191,22 +191,23 @@ public class FacesUtils
FacesUtils.redirectDirectly(fc, page.getOutcome());
}
- /* Connection */
+ /* Connection
- public Connection getConnection(final FacesContext fc, DBDatabase db)
+ public DBContext getDBContext(final FacesContext fc, DBDatabase db)
{
- return getWebApplication().getConnectionForRequest(fc, db);
+ return getWebApplication().getDBContextForRequest(fc, db);
}
- public void releaseAllConnections(final FacesContext fc, boolean commit)
+ public void releaseDBContext(final FacesContext fc, DBDatabase db, boolean commit)
{
- getWebApplication().releaseAllConnections(fc, commit);
+ getWebApplication().releaseDBContext(fc, db, commit);
}
- public void releaseAllConnections(final FacesContext fc, DBDatabase db, boolean commit)
+ public void releaseAllDBContexts(final FacesContext fc, boolean commit)
{
- getWebApplication().releaseConnection(fc, db, commit);
+ getWebApplication().releaseAllDBContexts(fc, commit);
}
+ */
/* Pages */
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java
index 682298d..4607a4d 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebApplication.java
@@ -429,12 +429,12 @@ public abstract class WebApplication
// Commit or rollback connection depending on the exit code
if (commit)
{ // success: commit all changes
- db.commit(conn);
+ conn.commit();
log.debug("REQUEST commited.");
}
else
{ // failure: rollback all changes
- db.rollback(conn);
+ conn.rollback();
log.debug("REQUEST rolled back.");
}
// Release Connection
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
index e248852..cecd9a8 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
@@ -18,6 +18,7 @@
*/
package org.apache.empire.jsf2.pageelements;
+import java.sql.Connection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -247,6 +248,7 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
public void initItems(DBCommand queryCmd, DBCommand countCmd, int pageSize)
{
clearItems();
+ Connection conn = getDBContext(rowset).getConnection();
// Init List Table Info
BeanListTableInfo lti = (BeanListTableInfo) getTableInfo();
lti.setQueryCmd(queryCmd);
@@ -254,7 +256,7 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
{ // Negative count means: loadItems should load all items.
countCmd.clearSelect();
countCmd.select(rowset.count());
- int count = rowset.getDatabase().querySingleInt(countCmd.getSelect(), countCmd.getParamValues(), 0, getConnection(rowset));
+ int count = rowset.getDatabase().querySingleInt(countCmd.getSelect(), countCmd.getParamValues(), 0, conn);
lti.init(count, pageSize);
}
else
@@ -319,7 +321,7 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
{
// DBReader
BeanListTableInfo lti = (BeanListTableInfo) getTableInfo();
- DBReader r = new DBReader();
+ DBReader r = new DBReader(getDBContext(rowset));
try
{ // Check command
DBCommand queryCmd = lti.getQueryCmd();
@@ -367,7 +369,7 @@ public class BeanListPageElement<T> extends ListPageElement<T> implements ListIt
}
// DBReader.open must always be surrounded with a try {} finally {} block!
- r.open(queryCmd, getConnection(queryCmd));
+ r.open(queryCmd);
// get position from the session
if (skipRows>0)
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
index c708a81..b3c8e67 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/RecordPageElement.java
@@ -132,8 +132,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
throw new ObjectNotValidException(record);
}
// Record laden
- Connection conn = getPage().getConnection(rowset.getDatabase());
- record.read(rowset, recKey, conn);
+ record.read(recKey);
}
/**
@@ -150,8 +149,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
this.removeSessionObject(DBRecord.class);
this.setSessionObject(Object[].class, recKey);
// Record laden
- Connection conn = getPage().getConnection(rowset.getDatabase());
- record.read(rowset, recKey, conn);
+ record.read(recKey);
}
/**
@@ -180,8 +178,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
*/
public void createRecord()
{
- Connection conn = getPage().getConnection(rowset.getDatabase());
- record.create(rowset, conn);
+ record.create();
// Put key on Session
this.removeSessionObject(Object[].class);
this.setSessionObject(DBRecord.class, record);
@@ -204,8 +201,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
{ // Not Modified
return true;
}
- Connection conn = getPage().getConnection(rowset.getDatabase());
- record.update(conn);
+ record.update();
// Put key on Session
this.removeSessionObject(DBRecord.class);
this.setSessionObject(Object[].class, record.getKeyValues());
@@ -232,8 +228,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
if (!record.isValid())
throw new ObjectNotValidException(record);
// delete
- Connection conn = getPage().getConnection(rowset.getDatabase());
- record.delete(conn);
+ record.delete();
// Put key on Session
this.removeSessionObject(Object[].class);
this.removeSessionObject(DBRecord.class);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java
index f1c7ace..5483263 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/Page.java
@@ -20,7 +20,6 @@ package org.apache.empire.jsf2.pages;
import java.io.Serializable;
import java.lang.reflect.Method;
-import java.sql.Connection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -32,6 +31,7 @@ import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.apache.empire.commons.StringUtils;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBRowSet;
import org.apache.empire.exceptions.EmpireException;
@@ -67,6 +67,13 @@ public abstract class Page implements Serializable
}
}
+ /**
+ * return a DBContext for a particular database
+ * @param db the database for which to obtain a connection
+ * @return the connection for the given database
+ */
+ public abstract DBContext getDBContext(DBDatabase db);
+
public String getPageName()
{
return (pageDefinition != null ? pageDefinition.getPageBeanName() : "{" + getClass().getSimpleName() + "}");
@@ -395,17 +402,6 @@ public abstract class Page implements Serializable
return getParentOutcome(null, redirect);
}
- /**
- * return a connection for a particular database
- * @param db the database for which to obtain a connection
- * @return the connection for the given database
- */
- public Connection getConnection(DBDatabase db)
- {
- WebApplication app = FacesUtils.getWebApplication();
- return app.getConnectionForRequest(FacesUtils.getContext(), db);
- }
-
public <T extends ParameterObject> T getObjectFromParam(Class<T> paramType, String idParam)
{
FacesContext fc = FacesUtils.getContext();
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
index e5c1147..6fb0675 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pages/PageElement.java
@@ -19,12 +19,12 @@
package org.apache.empire.jsf2.pages;
import java.io.Serializable;
-import java.sql.Connection;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.apache.empire.commons.StringUtils;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBRowSet;
@@ -101,16 +101,16 @@ public class PageElement implements Serializable
setSessionObject(type, null);
}
- public Connection getConnection(DBDatabase db)
+ public DBContext getDBContext(DBDatabase db)
{
- return page.getConnection(db);
+ return page.getDBContext(db);
}
- public Connection getConnection(DBObject dbo)
+ public DBContext getDBContext(DBObject dbo)
{
if (dbo==null)
throw new InvalidArgumentException("dbo", dbo);
- return page.getConnection(dbo.getDatabase());
+ return getDBContext(dbo.getDatabase());
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/data/bean/BeanResult.java b/empire-db/src/main/java/org/apache/empire/data/bean/BeanResult.java
index 1da2aa8..9a179fb 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanResult.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanResult.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRowSet;
@@ -115,13 +116,13 @@ public class BeanResult<T> extends ArrayList<T>
return cmd;
}
- public int fetch(Connection conn, int maxItems)
+ public int fetch(DBContext context, int maxItems)
{
clear();
- DBReader reader = new DBReader();
+ DBReader reader = new DBReader(context);
try {
// Open and Read
- reader.open(cmd, conn);
+ reader.open(cmd);
reader.getBeanList(this, clazz, maxItems);
return size();
@@ -130,9 +131,9 @@ public class BeanResult<T> extends ArrayList<T>
}
}
- public final int fetch(Connection conn)
+ public final int fetch(DBContext context)
{
- return fetch(conn, -1);
+ return fetch(context, -1);
}
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
index e55f4f8..33b86b2 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
@@ -143,21 +143,21 @@ public abstract class DBCommandExpr extends DBExpr
/** Returns the error message: ERR_NOTSUPPORTED */
@Override
- public void createRecord(DBRecord rec, Connection conn)
+ public void createRecord(DBRecord rec, boolean deferredInit)
{
throw new NotSupportedException(this, "addRecord");
}
/** Returns the error message: ERR_NOTSUPPORTED */
@Override
- public void readRecord(DBRecord rec, Object[] keys, Connection conn)
+ public void readRecord(DBRecord rec, Object[] keys)
{
throw new NotSupportedException(this, "getRecord");
}
/** Returns the error message: ERR_NOTSUPPORTED */
@Override
- public void updateRecord(DBRecord rec, Connection conn)
+ public void updateRecord(DBRecord rec)
{
throw new NotSupportedException(this, "updateRecord");
}
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 51e7017..9e9adb7 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
@@ -19,4 +19,6 @@ public interface DBContext
void addRollbackHandler(DBRollbackHandler handler);
+ void discard();
+
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBContextAware.java b/empire-db/src/main/java/org/apache/empire/db/DBContextAware.java
new file mode 100644
index 0000000..2360af9
--- /dev/null
+++ b/empire-db/src/main/java/org/apache/empire/db/DBContextAware.java
@@ -0,0 +1,9 @@
+/*
+ * ESTEAM Software GmbH, 19.01.2022
+ */
+package org.apache.empire.db;
+
+public interface DBContextAware
+{
+ <T extends DBContext> T getContext();
+}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
index 089bf46..264c55f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBDatabase.java
@@ -364,7 +364,7 @@ public abstract class DBDatabase extends DBObject
* @param driver The driver for which to create a DDL Script
* @param script the script object that will be completed
*/
- public synchronized void getCreateDDLScript(DBDatabaseDriver driver, DBSQLScript script)
+ public synchronized void getCreateDDLScript(DBSQLScript script)
{
DBDatabaseDriver prevDriver = this.driver;
try {
@@ -1571,7 +1571,7 @@ public abstract class DBDatabase extends DBObject
*
* @param conn a valid database connection
*/
- public void commit(Connection conn)
+ private void commit(Connection conn)
{
try
{ // Check argument
@@ -1595,7 +1595,7 @@ public abstract class DBDatabase extends DBObject
* <P>
* @param conn a valid database connection
*/
- public void rollback(Connection conn)
+ private void rollback(Connection conn)
{
try
{ // Check argument
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index 4347a89..f6dafb5 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -371,7 +371,7 @@ public class DBQuery extends DBRowSet
* @throws NotImplementedException because this is not implemented
*/
@Override
- public void createRecord(DBRecord rec, Connection conn)
+ public void createRecord(DBRecord rec, boolean deferredInit)
{
throw new NotImplementedException(this, "createRecord");
}
@@ -384,9 +384,9 @@ public class DBQuery extends DBRowSet
* @param conn a valid connection to the database.
*/
@Override
- public void readRecord(DBRecord rec, Object[] key, Connection conn)
+ public void readRecord(DBRecord rec, Object[] key)
{
- if (conn == null || rec == null)
+ if (rec == null)
throw new InvalidArgumentException("conn|rec", null);
DBColumn[] keyColumns = getKeyColumns();
if (key == null || keyColumns.length != key.length)
@@ -403,7 +403,7 @@ public class DBQuery extends DBRowSet
// Read Record
try {
// Read Record
- readRecord(rec, cmd, conn);
+ readRecord(rec, cmd);
// Set RowSetData
rec.updateComplete(key.clone());
} catch (QueryNoResultException e) {
@@ -419,7 +419,7 @@ public class DBQuery extends DBRowSet
* @param conn a valid connection to the database.
*/
@Override
- public void updateRecord(DBRecord rec, Connection conn)
+ public void updateRecord(DBRecord rec)
{
// check updateable
if (isUpdateable()==false)
@@ -427,8 +427,6 @@ public class DBQuery extends DBRowSet
// check params
if (rec == null)
throw new InvalidArgumentException("record", null);
- if (conn == null)
- throw new InvalidArgumentException("conn", null);
// Has record been modified?
if (rec.isModified() == false)
return; // Nothing to update
@@ -467,6 +465,8 @@ public class DBQuery extends DBRowSet
updCmd.set(col.to(fields[i]));
}
}
+ // the connection
+ Connection conn = rec.getContext().getConnection();
// the commands
DBCommand cmd = getCommandFromExpression();
Object[] keys = (Object[]) rec.getRowSetData();
@@ -562,14 +562,14 @@ public class DBQuery extends DBRowSet
// Execute SQL
int affected = db.executeSQL(upd.getUpdate(), upd.getParamValues(), conn);
- if (affected <= 0)
+ if (affected<= 0)
{ // Error
if (affected == 0)
{ // Record not found
throw new RecordUpdateFailedException(this, keys);
}
// Rollback
- db.rollback(conn);
+ // context.rollback();
return;
}
else if (affected > 1)
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBReader.java b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
index 7906382..7f9978a 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
@@ -71,7 +71,7 @@ import org.w3c.dom.Element;
*
*
*/
-public class DBReader extends DBRecordData
+public class DBReader extends DBRecordData implements DBContextAware
{
private final static long serialVersionUID = 1L;
@@ -238,6 +238,8 @@ public class DBReader extends DBRecordData
*/
private static ThreadLocal<Map<DBReader, Exception>> threadLocalOpenResultSets = new ThreadLocal<Map<DBReader, Exception>>();
+ private final DBContext context;
+
// Object references
private DBDatabase db = null;
private DBColumnExpr[] colList = null;
@@ -246,22 +248,34 @@ public class DBReader extends DBRecordData
private Map<ColumnExpr, Integer> fieldIndexMap = null;
/**
+ * Constructs an empty DBRecordSet object.
+ * @param useFieldIndexMap
+ */
+ public DBReader(DBContext context, boolean useFieldIndexMap)
+ {
+ this.context = context;
+ if (useFieldIndexMap)
+ fieldIndexMap = new HashMap<ColumnExpr, Integer>();
+ }
+
+ /**
* Constructs a default DBReader object with the fieldIndexMap enabled.
*/
- public DBReader()
+ public DBReader(DBContext context)
{
- // Default Constructor
- this(true);
+ // Simple Constructor
+ this(context, true);
}
/**
- * Constructs an empty DBRecordSet object.
- * @param useFieldIndexMap
+ * Returns the current Context
+ * @return
*/
- public DBReader(boolean useFieldIndexMap)
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T extends DBContext> T getContext()
{
- if (useFieldIndexMap)
- fieldIndexMap = new HashMap<ColumnExpr, Integer>();
+ return ((T)context);
}
/**
@@ -410,7 +424,7 @@ public class DBReader extends DBRecordData
* @param scrollable true if the reader should be scrollable or false if not
* @param conn a valid JDBC connection.
*/
- public void open(DBCommandExpr cmd, boolean scrollable, Connection conn)
+ public void open(DBCommandExpr cmd, boolean scrollable)
{
if (isOpen())
close();
@@ -433,7 +447,7 @@ public class DBReader extends DBRecordData
}
// Execute the query
DBDatabase queryDb = cmd.getDatabase();
- ResultSet queryRset = queryDb.executeQuery(sqlCmd, paramValues, scrollable, conn);
+ ResultSet queryRset = queryDb.executeQuery(sqlCmd, paramValues, scrollable, context.getConnection());
if (queryRset==null)
throw new QueryNoResultException(sqlCmd);
// init
@@ -448,9 +462,9 @@ public class DBReader extends DBRecordData
* @param cmd the SQL-Command with cmd.getSelect()
* @param conn a valid JDBC connection.
*/
- public final void open(DBCommandExpr cmd, Connection conn)
+ public final void open(DBCommandExpr cmd)
{
- open(cmd, false, conn);
+ open(cmd, false);
}
/**
@@ -466,9 +480,9 @@ public class DBReader extends DBRecordData
* @param cmd the SQL-Command with cmd.getSelect()
* @param conn a valid JDBC connection.
*/
- public void getRecordData(DBCommandExpr cmd, Connection conn)
+ public void getRecordData(DBCommandExpr cmd)
{ // Open the record
- open(cmd, conn);
+ open(cmd);
// Get First Record
if (!moveNext())
{ // Close
@@ -630,11 +644,10 @@ public class DBReader extends DBRecordData
* @param rowset the rowset to which to attach
* @param rec the record which to initialize
*/
- public void initRecord(DBRowSet rowset, DBRecord rec)
+ public void initRecord(DBRecord rec)
{
- if (rowset==null)
- throw new InvalidArgumentException("rowset", rowset);
- // init Record
+ // init Record
+ DBRowSet rowset = rec.getRowSet();
rowset.initRecord(rec, this);
}
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 091db47..6bcb4cf 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
@@ -38,6 +38,7 @@ import org.apache.empire.db.exceptions.FieldValueNotFetchedException;
import org.apache.empire.db.expr.compare.DBCompareExpr;
import org.apache.empire.exceptions.BeanPropertyGetException;
import org.apache.empire.exceptions.InvalidArgumentException;
+import org.apache.empire.exceptions.NotSupportedException;
import org.apache.empire.exceptions.ObjectNotValidException;
import org.apache.empire.xml.XMLUtil;
import org.slf4j.Logger;
@@ -51,7 +52,7 @@ import org.w3c.dom.Element;
* This class handles one record from a database table.
*
*/
-public class DBRecord extends DBRecordData implements Record, Cloneable
+public class DBRecord extends DBRecordData implements DBContextAware, Record, Cloneable
{
private final static long serialVersionUID = 1L;
@@ -199,9 +200,11 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
protected static final Logger log = LoggerFactory.getLogger(DBRecord.class);
+ private final DBContext context;
+ private final DBRowSet rowset;
+
// This is the record data
private State state;
- private DBRowSet rowset;
private Object[] fields;
private boolean[] modified;
private boolean validateFieldValues;
@@ -213,8 +216,7 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
* The record is not attached to a RowSet and the record's state is initially set to REC_INVALID.
*
* Please derive your own Objects from this class.
- */
- public DBRecord()
+ protected DBRecord()
{
state = State.Invalid;
rowset = null;
@@ -224,12 +226,28 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
validateFieldValues = true;
}
- public DBRecord(DBRowSet initialRowset)
+ protected DBRecord(DBRowSet initialRowset)
{
this();
// allow initial rowset
rowset = initialRowset;
}
+ */
+
+ public DBRecord(DBContext context, DBRowSet rowset)
+ {
+ // Check params
+ if (context==null || rowset==null)
+ throw new InvalidArgumentException("context|rowset", context);
+ // init
+ this.context = context;
+ this.rowset = rowset;
+ this.state = State.Invalid;
+ this.fields = null;
+ this.modified = null;
+ this.rowsetData = null;
+ this.validateFieldValues = true;
+ }
/**
* This method is used internally by the RowSet to initialize the record's properties
@@ -237,33 +255,22 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
* @param rowSetData any further RowSet specific data
* @param newRecord
*/
- protected void initData(DBRowSet rowset, Object rowSetData, boolean newRecord)
+ void initData(Object rowSetData, boolean newRecord)
{
// Init rowset
- boolean rowsetChanged = (this.rowset != rowset);
- if (rowsetChanged)
- fields = null;
- this.rowset = rowset;
- // Init fields
- if (rowset!=null)
- { // Set Rowset
- int colCount = rowset.getColumns().size();
- if (fields==null || fields.length!=colCount)
- fields = new Object[colCount];
- else
- { // clear fields
- for (int i=0; i<fields.length; i++)
- if (fields[i]!=ObjectUtils.NO_VALUE)
- fields[i]=null;
- }
+ int colCount = rowset.getColumns().size();
+ if (fields==null || fields.length!=colCount)
+ fields = new Object[colCount];
+ else
+ { // clear fields
+ for (int i=0; i<fields.length; i++)
+ if (fields[i]!=ObjectUtils.NO_VALUE)
+ fields[i]=null;
}
// Set State
this.rowsetData = rowSetData;
this.modified = null;
changeState((rowset==null ? State.Invalid : (newRecord ? State.New : State.Valid)));
- // notify
- if (rowsetChanged)
- onRowSetChanged();
}
/**
@@ -307,7 +314,8 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
try
{
DBRecord rec = (DBRecord)super.clone();
- rec.rowset = this.rowset;
+ if (rec.rowset!= this.rowset)
+ throw new NotSupportedException(this, "clone");
rec.state = this.state;
if (rec.fields == fields && fields!=null)
rec.fields = fields.clone();
@@ -336,13 +344,25 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
}
/**
+ * Returns the current Context
+ * @return
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T extends DBContext> T getContext()
+ {
+ return ((T)context);
+ }
+
+ /**
* Returns the DBRowSet object.
*
* @return the DBRowSet object
*/
- public DBRowSet getRowSet()
+ @SuppressWarnings("unchecked")
+ public <T extends DBRowSet> T getRowSet()
{
- return rowset;
+ return (T)this.rowset;
}
/**
@@ -933,92 +953,65 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
* @param keyValues a Object array, the primary key(s)
* @param insert if true change the state of this object to REC_NEW
*/
- public void init(DBRowSet table, Object[] keyValues, boolean insert)
+ protected void init(DBRowSet table, Object[] keyValues, boolean insert)
{ // Init with keys
if (table!=null)
table.initRecord(this, keyValues, insert);
else
- initData(null, null, false);
+ initData(null, false);
}
-
+
/**
- * Creates a new record for the given table.<BR>
- * All record fields will be filled with their default values.
- * The record's state is set to NEW
- * <P>
- * If a connection is supplied sequence generated values will be obtained<BR>
- * Otherwise the sequence will be generated later.
- * <P>
- * @param table the table for which to create a record
- * @param conn a valid JDBC connection
+ * Initializes this record object
+ * @param table
+ * @param keyValues
+ * @param insert
*/
- public void create(DBRowSet table, Connection conn)
- {
- if (table==null)
- throw new InvalidArgumentException("table", table);
- // create
- table.createRecord(this, conn);
+ public void init(boolean statusNew, Object... key)
+ { // Init with keys
+ rowset.initRecord(this, key, statusNew);
}
-
+
/**
- * Creates a new record for the given table.<BR>
- * All record fields will be filled with their default values.<BR>
- * The record's state is set to NEW
- * <P>
- * @param table the table for which to create a record
+ * Creates a new record
*/
- public final void create(DBRowSet table)
+ public void create(boolean deferredInit)
{
- create(table, null);
+ rowset.createRecord(this, deferredInit);
+ // remove rollback
+ context.removeRollbackHandler(this);
}
/**
- * Reads a record from the database identified by it's primary key.
- * After successful reading the record will be valid and all values will be accessible.
- * @see org.apache.empire.db.DBTable#readRecord(DBRecord, Object[], Connection)
- *
- * @param table the rowset from which to read the record
- * @param keys an array of the primary key values
- * @param conn a valid connection to the database.
+ * Creates a new record
*/
- public void read(DBRowSet table, Object[] key, Connection conn)
+ public void create()
{
- if (table==null)
- throw new InvalidArgumentException("table", table);
- // read
- table.readRecord(this, key, conn);
+ create(false);
}
-
+
/**
- * Reads a record from the database identified by it's primary key.
- * After successful reading the record will be valid and all values will be accessible.
- * @see org.apache.empire.db.DBTable#readRecord(DBRecord, Object[], Connection)
- *
- * @param table the rowset from which to read the record
- * @param id the primary key of the record to load.
- * @param conn a valid connection to the database.
+ * Reads a record from the database
+ * @param key an array of the primary key values
*/
- public final void read(DBRowSet table, Object id, Connection conn)
+ public void read(Object... key)
{
- if (id instanceof Collection<?>)
- { // If it's a collection then convert it to an array
- read(table, ((Collection<?>)id).toArray(), conn);
- }
- // Simple One-Column key
- read(table, new Object[] { id }, conn);
+ // temporarily check for connection
+ // invalid due to conversion from old Api where Connection was the last param
+ for (int i=0; i<key.length; i++)
+ if (key[i] instanceof Connection)
+ throw new InvalidArgumentException("key", key);
+ // read
+ rowset.readRecord(this, key);
+ // remove rollback
+ context.removeRollbackHandler(this);
}
-
+
/**
- * Reads a record from the database identified by one or more constraints.
- *
- * In oder to concatenate constraints use the and() operator from the first constraint
- * e.g. FIRSTNAME.is("Joe").and(LASTNAME.is("Doe"))
- *
- * @param table the rowset from which to read the record
- * @param whereConstraints the constraint(s) (which must all be on the table)
- * @param conn a valid connection to the database.
+ * Reads a record from the database
+ * @param key an array of the primary key values
*/
- public void read(DBRowSet table, DBCompareExpr whereConstraints, Connection conn)
+ public void read(DBCompareExpr whereConstraints)
{
if (whereConstraints==null)
throw new InvalidArgumentException("whereConstraints", null);
@@ -1026,29 +1019,30 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
Set<DBColumn> columns = new HashSet<DBColumn>();
whereConstraints.addReferencedColumns(columns);
for (DBColumn c : columns)
- if (!table.equals(c.getRowSet()))
+ if (!rowset.equals(c.getRowSet()))
throw new InvalidArgumentException("whereConstraints", c.getFullName());
// read now
- DBCommand cmd = table.getDatabase().createCommand();
- cmd.select(table.getColumns());
+ DBCommand cmd = getDatabase().createCommand();
+ cmd.select(rowset.getColumns());
cmd.where(whereConstraints);
- table.readRecord(this, cmd, conn);
+ rowset.readRecord(this, cmd);
+ // remove rollback
+ context.removeRollbackHandler(this);
}
/**
* Updates the record and saves all changes in the database.
- *
- * @see org.apache.empire.db.DBTable#updateRecord(DBRecord, Connection)
- * @param conn a valid connection to the database.
*/
- public void update(Connection conn)
+ public void update()
{
if (!isValid())
throw new ObjectNotValidException(this);
if (!isModified())
- return; /* Not modified. Nothing to do! */
+ return; /* Not modified. Nothing to do! */
+ // allow rollback
+ context.addRollbackHandler(createRollbackHandler());
// update
- rowset.updateRecord(this, conn);
+ rowset.updateRecord(this);
}
/**
@@ -1056,7 +1050,7 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
* This will set change the record's state to Valid
* @param rowSetData additional data held by the rowset for this record (optional)
*/
- protected void updateComplete(Object rowSetData)
+ void updateComplete(Object rowSetData)
{
this.rowsetData = rowSetData;
this.modified = null;
@@ -1073,7 +1067,7 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
* @see org.apache.empire.db.DBTable#deleteRecord(Object[], Connection)
* @param conn a valid connection to the database.
*/
- public void delete(Connection conn)
+ protected void delete(Connection conn)
{
if (isValid()==false)
throw new ObjectNotValidException(this);
@@ -1085,6 +1079,30 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
}
close();
}
+
+ public void delete()
+ {
+ if (isValid()==false)
+ throw new ObjectNotValidException(this);
+ // allow rollback
+ context.addRollbackHandler(createRollbackHandler());
+ // Delete only if record is not new
+ if (!isNew())
+ {
+ Object[] keys = rowset.getRecordKey(this);
+ rowset.deleteRecord(keys, context.getConnection());
+ }
+ close();
+ }
+
+ /**
+ * Factory function to create createRollbackHandler();
+ * @return the DBRollbackHandler
+ */
+ protected DBRollbackHandler createRollbackHandler()
+ {
+ return new DBRecordRollbackHandler(this);
+ }
/**
* This function set the field descriptions to the the XML tag.
@@ -1295,12 +1313,13 @@ public class DBRecord extends DBRecordData implements Record, Cloneable
/**
* Override this to do extra handling when the rowset for this record changes
- */
+
protected void onRowSetChanged()
{
if (log.isTraceEnabled() && rowset!=null)
log.trace("Record has been attached to rowset " + rowset.getName());
}
+ */
/**
* Override this to do extra handling when the record changes
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordV3.java b/empire-db/src/main/java/org/apache/empire/db/DBRecordV3.java
deleted file mode 100644
index ba13ca0..0000000
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordV3.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * ESTEAM Software GmbH, 19.01.2022
- */
-package org.apache.empire.db;
-
-import org.apache.empire.exceptions.ObjectNotValidException;
-
-public class DBRecordV3 extends DBRecord
-{
-
- private static final long serialVersionUID = 1L;
-
- private final DBContext context;
-
- public DBRecordV3(DBContext context, DBRowSet rowset)
- {
- super(rowset);
- this.context = context;
- }
-
- @SuppressWarnings("unchecked")
- public <T extends DBContext> T getContext()
- {
- return ((T)context);
- }
-
- @SuppressWarnings("unchecked")
- public <T extends DBRowSet> T getTable()
- {
- return (T)super.getRowSet();
- }
-
- public void create()
- {
- super.create(getRowSet());
- // remove rollback
- context.removeRollbackHandler(this);
- }
-
- public void read(Object... key)
- {
- super.read(getRowSet(), key, context.getConnection());
- // remove rollback
- context.removeRollbackHandler(this);
- }
-
- public void update()
- {
- if (!isValid())
- throw new ObjectNotValidException(this);
- if (!isModified())
- return; /* Not modified. Nothing to do! */
- // allow rollback
- context.addRollbackHandler(createRollbackHandler());
- // update
- super.update(context.getConnection());
- }
-
- public void delete()
- {
- // allow rollback
- context.addRollbackHandler(createRollbackHandler());
- // delete
- super.delete(context.getConnection());
- }
-
- protected DBRollbackHandler createRollbackHandler()
- {
- return new DBRecordRollbackHandler(this);
- }
-
-}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRelation.java b/empire-db/src/main/java/org/apache/empire/db/DBRelation.java
index be5a3cc..884281f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRelation.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRelation.java
@@ -220,26 +220,17 @@ public class DBRelation extends DBObject
* @param enable true if the constraint should be enabled or false to disable the constraint
* @param driver the driver for which to enable or disable the relation
*/
- public String getEnableDisableStmt(boolean enable, DBDatabaseDriver driver)
+ public String getEnableDisableStmt(boolean enable, DBContext context)
{
- if (driver==null)
- throw new InvalidArgumentException("driver", driver);
+ if (context==null)
+ throw new InvalidArgumentException("context", context);
// get Statement
- DBSQLScript script = new DBSQLScript();
- driver.addEnableRelationStmt(this, enable, script);
+ DBSQLScript script = new DBSQLScript(context);
+ context.getDriver().addEnableRelationStmt(this, enable, script);
if (script.getCount()!=1)
throw new UnexpectedReturnValueException(script.getCount(), "driver.addEnableRelationStatement");
return script.getStmt(0);
}
-
- /**
- * Appends the required DLL command to enable or disable a foreign key constraint to the supplied DBDQLScript.
- * @param enable true if the constraint should be enabled or false to disable the constraint
- */
- public final String getEnableDisableStatement(boolean enable)
- {
- return getEnableDisableStmt(enable, getDatabase().getDriver());
- }
@Override
public String toString()
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index b733393..379eac4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -224,7 +224,7 @@ public abstract class DBRowSet extends DBExpr
public abstract boolean isUpdateable();
- public abstract void createRecord(DBRecord rec, Connection conn);
+ public abstract void createRecord(DBRecord rec, boolean deferredInit);
public abstract void deleteRecord(Object[] keys, Connection conn);
@@ -508,12 +508,12 @@ public abstract class DBRowSet extends DBExpr
*/
protected void prepareInitRecord(DBRecord rec, Object rowSetData, boolean insert)
{
- if (rec==null)
+ if (rec==null || rec.getRowSet()!=this)
throw new InvalidArgumentException("rec", rec);
if (columns.size() < 1)
throw new ObjectNotValidException(this);
// Init
- rec.initData(this, rowSetData, insert);
+ rec.initData(rowSetData, insert);
}
/**
@@ -634,13 +634,13 @@ public abstract class DBRowSet extends DBExpr
* @param cmd the SQL-Command used to query the record
* @param conn a valid JDBC connection.
*/
- protected void readRecord(DBRecord rec, DBCommand cmd, Connection conn)
+ protected void readRecord(DBRecord rec, DBCommand cmd)
{
DBReader reader = null;
try
{ // read record using a DBReader
- reader = new DBReader(false);
- reader.getRecordData(cmd, conn);
+ reader = new DBReader(rec.getContext(), false);
+ reader.getRecordData(cmd);
initRecord(rec, reader);
} finally {
@@ -656,10 +656,10 @@ public abstract class DBRowSet extends DBExpr
* @param key the primary key values
* @param conn a valid JDBC connection.
*/
- public void readRecord(DBRecord rec, Object[] key, Connection conn)
+ public void readRecord(DBRecord rec, Object[] key)
{
// Check Arguments
- if (conn == null || rec == null)
+ if (rec == null)
throw new InvalidArgumentException("conn|rec", null);
// Select
DBCommand cmd = db.createCommand();
@@ -668,7 +668,7 @@ public abstract class DBRowSet extends DBExpr
setKeyConstraints(cmd, key);
try {
// Read Record
- readRecord(rec, cmd, conn);
+ readRecord(rec, cmd);
} catch (QueryNoResultException e) {
// Translate exception
throw new RecordNotFoundException(this, key);
@@ -683,10 +683,10 @@ public abstract class DBRowSet extends DBExpr
* @param mode flag whether to include only the given columns or whether to add all but the given columns
* @param columns the columns to include or exclude (depending on mode)
*/
- public void readRecord(DBRecord rec, Object[] key, Connection conn, PartialMode mode, DBColumn... columns)
+ public void readRecord(DBRecord rec, Object[] key, PartialMode mode, DBColumn... columns)
{
// Check Arguments
- if (conn == null || rec == null)
+ if (rec == null)
throw new InvalidArgumentException("conn|rec", null);
// create command
DBCommand cmd = db.createCommand();
@@ -715,7 +715,7 @@ public abstract class DBRowSet extends DBExpr
setKeyConstraints(cmd, key);
try {
// Read Record
- readRecord(rec, cmd, conn);
+ readRecord(rec, cmd);
} catch (QueryNoResultException e) {
// Translate exception
throw new RecordNotFoundException(this, key);
@@ -768,7 +768,7 @@ public abstract class DBRowSet extends DBExpr
* @param rec the DBRecord object. contains all fields and the field properties
* @param conn a valid JDBC connection.
*/
- public void updateRecord(DBRecord rec, Connection conn)
+ public void updateRecord(DBRecord rec)
{
// check updateable
if (isUpdateable()==false)
@@ -778,8 +778,8 @@ public abstract class DBRowSet extends DBExpr
throw new InvalidArgumentException("record", rec);
if (rec.isValid()==false)
throw new ObjectNotValidException(rec);
- if (conn == null)
- throw new InvalidArgumentException("conn", conn);
+ // the connection
+ Connection conn = rec.getContext().getConnection();
// Get the new Timestamp
String name = getName();
Timestamp timestamp = (timestampColumn!=null) ? db.getUpdateTimestamp(conn) : null;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBSQLScript.java b/empire-db/src/main/java/org/apache/empire/db/DBSQLScript.java
index 248f1bc..e2bbfd0 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBSQLScript.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBSQLScript.java
@@ -18,7 +18,6 @@
*/
package org.apache.empire.db;
-import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
@@ -34,7 +33,7 @@ import org.slf4j.LoggerFactory;
* The class is used for obtaining and executing DDL commands supplied by the
* database driver (@see {@link DBDatabaseDriver#getDDLScript(DBCmdType, DBObject, DBSQLScript)})
*/
-public class DBSQLScript implements Iterable<String>
+public class DBSQLScript implements DBContextAware, Iterable<String>
{
// Logger
private static final Logger log = LoggerFactory.getLogger(DBSQLScript.class);
@@ -112,18 +111,33 @@ public class DBSQLScript implements Iterable<String>
protected String commandSeparator = DEFAULT_COMMAND_SEPARATOR;
protected ArrayList<SQLStmt> sqlStmtList = new ArrayList<SQLStmt>();
+
+ private final DBContext context;
- public DBSQLScript()
+ public DBSQLScript(DBContext context)
{
// nothing
+ this.context = context;
}
- public DBSQLScript(String commandSeparator)
+ public DBSQLScript(DBContext context, String commandSeparator)
{
+ this(context);
this.commandSeparator = commandSeparator;
}
/**
+ * Returns the current Context
+ * @return
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T extends DBContext> T getContext()
+ {
+ return ((T)context);
+ }
+
+ /**
* Adds a statement to the script.
*
* @param sql the statement
@@ -314,17 +328,18 @@ public class DBSQLScript implements Iterable<String>
* @param ignoreErrors true if errors should be ignored
* @return number of records affected
*/
- public int executeAll(DBDatabaseDriver driver, Connection conn, boolean ignoreErrors)
+ public int executeAll(boolean ignoreErrors)
{
log.debug("Running script containing " + String.valueOf(getCount()) + " statements.");
int result = 0;
+ DBDatabaseDriver driver = context.getDriver();
for (SQLStmt stmt : sqlStmtList)
{
try
{
// Execute Statement
log.debug("Executing: {}", stmt.getCmd());
- int count = driver.executeSQL(stmt.getCmd(), stmt.getParams(), conn, null);
+ int count = driver.executeSQL(stmt.getCmd(), stmt.getParams(), context.getConnection(), null);
result += (count >= 0 ? count : 0);
}
catch (SQLException e)
@@ -350,9 +365,9 @@ public class DBSQLScript implements Iterable<String>
* @param conn the connection
* @return number of records affected
*/
- public final int executeAll(DBDatabaseDriver driver, Connection conn)
+ public final int executeAll()
{
- return executeAll(driver, conn, false);
+ return executeAll(false);
}
/**
@@ -362,9 +377,10 @@ public class DBSQLScript implements Iterable<String>
* @param conn the connection
* @param ignoreErrors true if errors should be ignored
*/
- public int executeBatch(DBDatabaseDriver driver, Connection conn)
+ public int executeBatch()
{
log.debug("Running batch containing " + String.valueOf(getCount()) + " statements.");
+ DBDatabaseDriver driver = context.getDriver();
try
{
// Execute Statement
@@ -385,7 +401,7 @@ public class DBSQLScript implements Iterable<String>
i++;
}
// Execute batch
- int[] res = driver.executeBatch(cmdList, paramList, conn);
+ int[] res = driver.executeBatch(cmdList, paramList, context.getConnection());
for (count = 0, i = 0; i < (res != null ? res.length : 0); i++)
count += (res[i] >= 0 ? res[i] : 0);
log.debug("Script completed. {} records affected.", count);
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTable.java b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
index d31cc64..507ffae 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTable.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
@@ -593,11 +593,12 @@ public class DBTable extends DBRowSet implements Cloneable
* @param conn a valid connection to the database.
*/
@Override
- public void createRecord(DBRecord rec, Connection conn)
+ public void createRecord(DBRecord rec, boolean deferredInit)
{
// Prepare
prepareInitRecord(rec, null, true);
// Set Defaults
+ Connection conn = (deferredInit ? null : rec.getContext().getConnection());
int count = columns.size();
for (int i = 0; i < count; i++)
{
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBView.java b/empire-db/src/main/java/org/apache/empire/db/DBView.java
index 535a9fc..97d1b9f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBView.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBView.java
@@ -395,12 +395,12 @@ public abstract class DBView extends DBRowSet
}
@Override
- public void updateRecord(DBRecord rec, Connection conn)
+ public void updateRecord(DBRecord rec)
{
if (updateable==false)
throw new NotSupportedException(this, "updateRecord");
// Update the record
- super.updateRecord(rec, conn);
+ super.updateRecord(rec);
}
/*
@@ -409,7 +409,7 @@ public abstract class DBView extends DBRowSet
* @see org.apache.empire.db.DBRowSet#addRecord(org.apache.empire.db.DBRecord, java.sql.Connection)
*/
@Override
- public void createRecord(DBRecord rec, Connection conn)
+ public void createRecord(DBRecord rec, boolean deferredInit)
{
throw new NotSupportedException(this, "createRecord");
}
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 5f4c6af..f7a0a81 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
@@ -105,4 +105,25 @@ public abstract class DBContextBase implements DBContext
log.info("Rollback handler for object {} was removed", object.getClass().getSimpleName());
}
+ @Override
+ public void discard()
+ {
+ /* don't close connection! */
+ }
+
+ /**
+ * helper to close a connection on discard
+ */
+ protected void closeConnection()
+ {
+ try
+ { // close connection
+ Connection conn = getConnection();
+ conn.close();
+ } catch (SQLException sqle) {
+ // Commit failed!
+ throw new EmpireSQLException(getDriver(), sqle);
+ }
+ }
+
}
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 2102af4..8f23b8d 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,18 +4,27 @@
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
{
private final DBDatabaseDriver driver;
private final Connection conn;
+ private final boolean closeOnDiscard;
- public DBContextStatic(DBDatabaseDriver driver, Connection conn)
+ public DBContextStatic(DBDatabaseDriver driver, Connection conn, boolean closeOnDiscard)
{
this.driver = driver;
this.conn = conn;
+ this.closeOnDiscard = closeOnDiscard;
+ }
+
+ public DBContextStatic(DBDatabaseDriver driver, Connection conn)
+ {
+ this(driver, conn, false);
}
@Override
@@ -29,5 +38,13 @@ public class DBContextStatic extends DBContextBase
{
return conn;
}
-
+
+ @Override
+ public void discard()
+ {
+ super.discard();
+ // close
+ if (closeOnDiscard)
+ closeConnection();
+ }
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java b/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java
index 5e32c1d..ba1ac06 100644
--- a/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java
+++ b/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java
@@ -29,6 +29,7 @@ import org.apache.empire.db.DBCmdType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDDLGenerator;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
@@ -41,6 +42,7 @@ import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.DBView;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.exceptions.EmpireSQLException;
import org.apache.empire.db.expr.column.DBValueExpr;
import org.apache.empire.exceptions.InvalidArgumentException;
@@ -416,6 +418,7 @@ public class DBDatabaseDriverOracle extends DBDatabaseDriver
@Override
public void checkDatabase(DBDatabase db, String owner, Connection conn)
{
+ DBContext context = new DBContextStatic(this, conn);
// Check Params
if (owner==null || owner.length()==0)
throw new InvalidArgumentException("owner", owner);
@@ -427,10 +430,10 @@ public class DBDatabaseDriverOracle extends DBDatabaseDriver
sysDBCommand.where (sysDB.CI.C_OWNER.is(owner));
OracleDataDictionnary dataDictionnary = new OracleDataDictionnary();
- DBReader rd = new DBReader();
+ DBReader rd = new DBReader(context);
try
{
- rd.open(sysDBCommand, conn);
+ rd.open(sysDBCommand);
// read all
log.info("---------------------------------------------------------------------------------");
log.info("checkDatabase start: " + db.getClass().getName());
diff --git a/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java b/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java
index b29432c..77895dd 100644
--- a/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/IntegerTest.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.derby.DBDatabaseDriverDerby;
import org.apache.empire.db.h2.DBDatabaseDriverH2;
import org.apache.empire.db.hsql.DBDatabaseDriverHSql;
@@ -105,24 +106,25 @@ public class IntegerTest {
Connection connection = getJDBCConnection(config);
DBDatabaseDriver driver = getDatabaseDriver(config, connection);
+ DBContext context = new DBContextStatic(driver, connection);
database.open(driver, connection);
- createDatabase(database, driver, connection);
+ createDatabase(database, driver, context);
- DBRecord maxRec = new DBRecord();
- maxRec.create(database.SAMPLE);
+ DBRecord maxRec = new DBRecord(context, database.SAMPLE);
+ maxRec.create();
maxRec.setValue(database.SAMPLE.MY_INTEGER, Integer.MAX_VALUE);
maxRec.setValue(database.SAMPLE.MY_LONG, Long.MAX_VALUE);
maxRec.setValue(database.SAMPLE.MY_SHORT, Short.MAX_VALUE);
- maxRec.update(connection);
+ maxRec.update();
- DBRecord minRec = new DBRecord();
- minRec.create(database.SAMPLE);
+ DBRecord minRec = new DBRecord(context, database.SAMPLE);
+ minRec.create();
minRec.setValue(database.SAMPLE.MY_INTEGER, Integer.MIN_VALUE);
minRec.setValue(database.SAMPLE.MY_LONG, Long.MIN_VALUE);
minRec.setValue(database.SAMPLE.MY_SHORT, Short.MIN_VALUE);
- minRec.update(connection);
+ minRec.update();
}
private static Connection getJDBCConnection(SampleConfig config) {
@@ -186,29 +188,29 @@ public class IntegerTest {
throw new RuntimeException("Unknown Database Provider " + config.databaseProvider);
}
- private void createDatabase(DBDatabase db, DBDatabaseDriver driver, Connection conn) {
+ private void createDatabase(DBDatabase db, DBDatabaseDriver driver, DBContext context) {
// try to remove previously existing tables
- List<String> tables = getTableNames(db, conn);
- DBSQLScript script2 = new DBSQLScript();
+ List<String> tables = getTableNames(db, context.getConnection());
+ DBSQLScript script2 = new DBSQLScript(context);
for(DBTable table:db.getTables()){
if(tables.contains(table.getName())){
db.getDriver().getDDLScript(DBCmdType.DROP, table, script2);
}
}
- script2.executeAll(driver, conn, false);
+ script2.executeAll(false);
// Commit
- db.commit(conn);
+ context.commit();
// create DDL for Database Definition
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(driver, script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
// Show DDL Statement
LOGGER.info(script.toString());
// Execute Script
- script.executeAll(driver, conn, false);
+ script.executeAll(false);
// Commit
- db.commit(conn);
+ context.commit();
}
private List<String> getTableNames(DBDatabase db, Connection conn)
diff --git a/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java b/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
index 606a8c4..1b80164 100644
--- a/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/PreparedStatementTest.java
@@ -27,6 +27,7 @@ import java.sql.Connection;
import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
import org.apache.empire.db.DBCmdParam;
+import org.apache.empire.db.context.DBContextStatic;
import org.junit.Rule;
import org.junit.Test;
@@ -42,17 +43,18 @@ public class PreparedStatementTest{
Connection conn = dbResource.getConnection();
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
CompanyDB db = new CompanyDB();
db.open(driver, conn);
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
- script.executeAll(db.getDriver(), conn, false);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
+ script.executeAll(false);
- DBRecord department = new DBRecord();
- department.create(db.DEPARTMENT);
+ DBRecord department = new DBRecord(context, db.DEPARTMENT);
department.setValue(db.DEPARTMENT.NAME, "junit");
department.setValue(db.DEPARTMENT.BUSINESS_UNIT, "test");
- department.update(conn);
+ department.update();
int id = department.getInt(db.DEPARTMENT.ID);
assertTrue("Department add failed", id > 0);
@@ -75,9 +77,9 @@ public class PreparedStatementTest{
assertNotNull(cmd.getParamValues());
assertTrue(cmd.getSelect().indexOf('?') > 0);
- DBReader r = new DBReader();
+ DBReader r = new DBReader(context);
try {
- r.open(cmd, conn);
+ r.open(cmd);
// must have one record
assertEquals(true, r.moveNext());
// Department Id must be correct
diff --git a/empire-db/src/test/java/org/apache/empire/db/SerializeTest.java b/empire-db/src/test/java/org/apache/empire/db/SerializeTest.java
index 7567100..b8edcb6 100644
--- a/empire-db/src/test/java/org/apache/empire/db/SerializeTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/SerializeTest.java
@@ -20,6 +20,7 @@
package org.apache.empire.db;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.expr.order.DBOrderByExpr;
import org.junit.Assert;
import org.junit.Test;
@@ -53,12 +54,12 @@ public class SerializeTest {
}
}
-
public DBObject[] getObjectsToSerialize() {
final TestDatabase db = new TestDatabase();
- DBRecord rec = new DBRecord();
- rec.init(db.T_TEST, null, true);
- db.open(new MockDriver(), null);
+ DBContext context = new DBContextStatic(new MockDriver(), null);
+ DBRecord rec = new DBRecord(context, db.T_TEST);
+ rec.init(true);
+ db.open(context.getDriver(), null);
return new DBObject[] {
db,
db.T_TEST,
diff --git a/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java b/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
index 09f4c32..d5128a2 100644
--- a/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/hsql/DBDatabaseDriverHSqlTest.java
@@ -30,12 +30,14 @@ import org.apache.empire.DBResource.DB;
import org.apache.empire.data.DataType;
import org.apache.empire.db.CompanyDB;
import org.apache.empire.db.DBCmdType;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
+import org.apache.empire.db.context.DBContextStatic;
import org.junit.Rule;
import org.junit.Test;
@@ -51,30 +53,30 @@ public class DBDatabaseDriverHSqlTest{
Connection conn = dbResource.getConnection();
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
CompanyDB db = new CompanyDB();
db.open(driver, dbResource.getConnection());
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
+ script.executeAll(false);
- DBRecord dep = new DBRecord();
- dep.create(db.DEPARTMENT);
+ DBRecord dep = new DBRecord(context, db.DEPARTMENT);
+ dep.create();
dep.setValue(db.DEPARTMENT.NAME, "junit");
dep.setValue(db.DEPARTMENT.BUSINESS_UNIT, "test");
- dep.update(conn);
+ dep.update();
Date date = dep.getDateTime(db.DEPARTMENT.UPDATE_TIMESTAMP);
assertNotNull("Date is null", date);
assertTrue("No departments", dep.getInt(db.DEPARTMENT.ID) > 0);
-
- DBRecord emp = new DBRecord();
- emp.create(db.EMPLOYEE);
+ DBRecord emp = new DBRecord(context, db.EMPLOYEE);
emp.setValue(db.EMPLOYEE.FIRSTNAME, "junit");
emp.setValue(db.EMPLOYEE.LASTNAME, "test");
emp.setValue(db.EMPLOYEE.GENDER, "m");
emp.setValue(db.EMPLOYEE.DEPARTMENT_ID, dep.getInt(db.DEPARTMENT.ID));
- emp.update(conn);
+ emp.update();
date = emp.getDateTime(db.EMPLOYEE.UPDATE_TIMESTAMP);
assertNotNull("Date is null", date);
@@ -83,54 +85,54 @@ public class DBDatabaseDriverHSqlTest{
int id = emp.getInt(db.EMPLOYEE.ID);
// Update an Employee
- emp = new DBRecord();
- emp.read(db.EMPLOYEE, id, conn);
+ emp = new DBRecord(context, db.EMPLOYEE);
+ emp.read(id);
// Set
emp.setValue(db.EMPLOYEE.PHONE_NUMBER, "123456");
- emp.update(conn);
+ emp.update();
- emp = new DBRecord();
+ emp = new DBRecord(context, db.EMPLOYEE);
emp.read(db.EMPLOYEE, id, conn);
assertEquals("123456", emp.getString(db.EMPLOYEE.PHONE_NUMBER));
- script = new DBSQLScript();
+ script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.DROP, db.EMPLOYEE, script);
db.getDriver().getDDLScript(DBCmdType.DROP, db.DEPARTMENT, script);
- script.executeAll(db.getDriver(), conn, true);
+ script.executeAll(true);
}
-
/**
* See https://issues.apache.org/jira/browse/EMPIREDB-151
*/
@Test
public void testSequence(){
Connection conn = dbResource.getConnection();
-
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
SeqDB db = new SeqDB();
db.open(driver, dbResource.getConnection());
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
+ script.executeAll(false);
- DBRecord data = new DBRecord();
- data.create(db.DATA);
+ DBRecord data = new DBRecord(context, db.DATA);
+ data.create();
data.setValue(db.DATA.VALUE, "test");
- data.update(conn);
+ data.update();
final Object id = data.getLong(db.DATA.ID);
- DBRecord read = new DBRecord();
- read.read(db.DATA, id, conn);
+ DBRecord read = new DBRecord(context, db.DATA);
+ read.read(id);
assertEquals("test", read.getString(db.DATA.VALUE));
- script = new DBSQLScript();
+ script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.DROP, db.DATA, script);
- script.executeAll(db.getDriver(), conn, true);
+ script.executeAll(true);
}
/**
diff --git a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java
index c288126..11e2a56 100644
--- a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java
@@ -30,12 +30,14 @@ import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
import org.apache.empire.data.DataType;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
+import org.apache.empire.db.context.DBContextStatic;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -58,8 +60,9 @@ public class DBDatabaseDriverMSSqlDateTest {
public void runTestWithDateFormat(String dbDateFormat) throws Exception {
Connection conn = dbResource.getConnection();
-
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
DateTimeTestDB db = new DateTimeTestDB();
// Encoding issue occur when prepared statement is disabled
@@ -68,10 +71,10 @@ public class DBDatabaseDriverMSSqlDateTest {
db.open(driver, dbResource.getConnection());
if (!databaseExists(conn, db)) {
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
System.out.println(script.toString());
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ script.executeAll(false);
}
// STEP 5: Clear Database (Delete all records)
@@ -88,19 +91,18 @@ public class DBDatabaseDriverMSSqlDateTest {
{
- driver.executeSQL("SET DATEFORMAT " + dbDateFormat, null, conn,
- null);
- DBRecord rec = new DBRecord();
- rec.create(db.USER_INFO);
+ driver.executeSQL("SET DATEFORMAT " + dbDateFormat, null, conn, null);
+ DBRecord rec = new DBRecord(context, db.USER_INFO);
+ rec.create();
rec.setValue(db.USER_INFO.USER, "john.doe");
rec.setValue(db.USER_INFO.REG_DATE, regDate);
rec.setValue(db.USER_INFO.LAST_LOGIN, lastLoginTs);
- rec.update(conn);
+ rec.update();
int id = rec.getInt(db.USER_INFO.ID);
- DBRecord recRead = new DBRecord();
- recRead.read(db.USER_INFO, id, conn);
+ DBRecord recRead = new DBRecord(context, db.USER_INFO);
+ recRead.read(id);
assertEquals(truncDateFmt.format(lastLoginTs),
truncDateFmt.format(recRead
diff --git a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java
index a20fa35..fe2e036 100644
--- a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java
@@ -26,9 +26,11 @@ import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
import org.apache.empire.db.CompanyDB;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
+import org.apache.empire.db.context.DBContextStatic;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -44,8 +46,9 @@ public class DBDatabaseDriverMSSqlTest
public void testChineseCharacters()
{
Connection conn = dbResource.getConnection();
-
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
CompanyDB db = new CompanyDB();
// Encoding issue occur when prepared statement is disabled
@@ -54,27 +57,26 @@ public class DBDatabaseDriverMSSqlTest
db.open(driver, dbResource.getConnection());
if(!databaseExists(conn, db)){
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
System.out.println(script.toString());
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ script.executeAll(false);
}
// STEP 5: Clear Database (Delete all records)
System.out.println("*** Step 5: clearDatabase() ***");
clearDatabase(conn, db);
- DBRecord dep = new DBRecord();
- dep.create(db.DEPARTMENT);
+ DBRecord dep = new DBRecord(context, db.DEPARTMENT);
dep.setValue(db.DEPARTMENT.NAME, "junit");
dep.setValue(db.DEPARTMENT.BUSINESS_UNIT, "中文");
- dep.update(conn);
+ dep.update();
int id = dep.getInt(db.DEPARTMENT.ID);
// Update an Employee
- DBRecord depRead = new DBRecord();
- depRead.read(db.DEPARTMENT, id, conn);
+ DBRecord depRead = new DBRecord(context, db.DEPARTMENT);
+ depRead.read(id);
// You may see ?? in the DB record
assertEquals("中文", depRead.getString(db.DEPARTMENT.BUSINESS_UNIT));
diff --git a/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java b/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java
index 8b78340..c35c131 100644
--- a/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/postgresql/DBDatabaseDriverPostgreSQLTest.java
@@ -29,10 +29,12 @@ import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
import org.apache.empire.db.CompanyDB;
import org.apache.empire.db.DBCommand;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
+import org.apache.empire.db.context.DBContextStatic;
import org.apache.empire.db.exceptions.QueryFailedException;
import org.junit.Assert;
import org.junit.Ignore;
@@ -69,8 +71,9 @@ public class DBDatabaseDriverPostgreSQLTest
public void testBlobDDL() throws SQLException
{
Connection conn = dbResource.getConnection();
-
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
CompanyDB db = new CompanyDB();
// Encoding issue occurs when prepared statement is disabled
@@ -79,10 +82,10 @@ public class DBDatabaseDriverPostgreSQLTest
db.open(driver, dbResource.getConnection());
if(!databaseExists(conn, db)){
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
System.out.println(script.toString());
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ script.executeAll(false);
}
conn.close();
@@ -94,23 +97,25 @@ public class DBDatabaseDriverPostgreSQLTest
Connection conn = dbResource.getConnection();
DBDatabaseDriver driver = dbResource.newDriver();
- CompanyDB db = new CompanyDB();
+ DBContext context = new DBContextStatic(driver, conn);
+
+ CompanyDB db = new CompanyDB();
// Encoding issue occurs when prepared statement is disabled
//db.setPreparedStatementsEnabled(true);
db.open(driver, dbResource.getConnection());
- DBRecord emp = new DBRecord();
- emp.create(db.DATA);
+ DBRecord emp = new DBRecord(context, db.DATA);
+ emp.create();
emp.setValue(db.DATA.DATA, new byte[]{1,2,3});
- emp.update(conn);
+ emp.update();
// read a value
DBCommand cmd = db.createCommand();
cmd.select(db.DATA.DATA);
- DBReader reader = new DBReader();
- reader.open(cmd, conn);
+ DBReader reader = new DBReader(context);
+ reader.open(cmd);
while(reader.moveNext()){
byte[] value = (byte[]) reader.getValue(db.DATA.DATA);
Assert.assertArrayEquals(new byte[]{1,2,3}, value);
diff --git a/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java b/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java
index b33a6d9..92603d5 100644
--- a/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/sqlite/DBDatabaseDriverSQLiteTest.java
@@ -27,16 +27,17 @@ import java.util.Date;
import org.apache.empire.DBResource;
import org.apache.empire.DBResource.DB;
-import org.apache.empire.data.DataMode;
import org.apache.empire.data.DataType;
import org.apache.empire.db.CompanyDB;
import org.apache.empire.db.DBCmdType;
+import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
+import org.apache.empire.db.context.DBContextStatic;
import org.junit.Rule;
import org.junit.Test;
@@ -50,31 +51,32 @@ public class DBDatabaseDriverSQLiteTest{
public void test()
{
Connection conn = dbResource.getConnection();
-
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
CompanyDB db = new CompanyDB();
db.open(driver, dbResource.getConnection());
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
+ script.executeAll(false);
- DBRecord dep = new DBRecord();
- dep.create(db.DEPARTMENT);
+ DBRecord dep = new DBRecord(context, db.DEPARTMENT);
+ dep.create();
dep.setValue(db.DEPARTMENT.NAME, "junit");
dep.setValue(db.DEPARTMENT.BUSINESS_UNIT, "test");
- dep.update(conn);
+ dep.update();
Date date = dep.getDateTime(db.DEPARTMENT.UPDATE_TIMESTAMP);
assertNotNull("Date is null", date);
assertTrue("No departments", dep.getInt(db.DEPARTMENT.ID) > 0);
- DBRecord emp = new DBRecord();
- emp.create(db.EMPLOYEE);
+ DBRecord emp = new DBRecord(context, db.EMPLOYEE);
+ emp.create();
emp.setValue(db.EMPLOYEE.FIRSTNAME, "junit");
emp.setValue(db.EMPLOYEE.LASTNAME, "test");
emp.setValue(db.EMPLOYEE.GENDER, "m");
emp.setValue(db.EMPLOYEE.DEPARTMENT_ID, dep.getInt(db.DEPARTMENT.ID));
- emp.update(conn);
+ emp.update();
date = emp.getDateTime(db.EMPLOYEE.UPDATE_TIMESTAMP);
assertNotNull("Date is null", date);
@@ -83,21 +85,21 @@ public class DBDatabaseDriverSQLiteTest{
int id = emp.getInt(db.EMPLOYEE.ID);
// Update an Employee
- emp = new DBRecord();
- emp.read(db.EMPLOYEE, id, conn);
+ emp = new DBRecord(context, db.EMPLOYEE);
+ emp.read(id);
// Set
emp.setValue(db.EMPLOYEE.PHONE_NUMBER, "123456");
- emp.update(conn);
+ emp.update();
- emp = new DBRecord();
- emp.read(db.EMPLOYEE, id, conn);
+ emp = new DBRecord(context, db.EMPLOYEE);
+ emp.read(id);
assertEquals("123456", emp.getString(db.EMPLOYEE.PHONE_NUMBER));
- script = new DBSQLScript();
+ script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.DROP, db.EMPLOYEE, script);
db.getDriver().getDDLScript(DBCmdType.DROP, db.DEPARTMENT, script);
- script.executeAll(db.getDriver(), conn, true);
+ script.executeAll(true);
}
@@ -108,29 +110,30 @@ public class DBDatabaseDriverSQLiteTest{
@Test
public void testSequence(){
Connection conn = dbResource.getConnection();
-
DBDatabaseDriver driver = dbResource.newDriver();
+ DBContext context = new DBContextStatic(driver, conn);
+
SeqDB db = new SeqDB();
db.open(driver, dbResource.getConnection());
- DBSQLScript script = new DBSQLScript();
- db.getCreateDDLScript(db.getDriver(), script);
- script.executeAll(db.getDriver(), dbResource.getConnection(), false);
+ DBSQLScript script = new DBSQLScript(context);
+ db.getCreateDDLScript(script);
+ script.executeAll(false);
- DBRecord data = new DBRecord();
- data.create(db.DATA);
+ DBRecord data = new DBRecord(context, db.DATA);
+ data.create();
data.setValue(db.DATA.VALUE, "test");
- data.update(conn);
+ data.update();
final Object id = data.getLong(db.DATA.ID);
- DBRecord read = new DBRecord();
- read.read(db.DATA, id, conn);
+ DBRecord read = new DBRecord(context, db.DATA);
+ read.read(id);
assertEquals("test", read.getString(db.DATA.VALUE));
- script = new DBSQLScript();
+ script = new DBSQLScript(context);
db.getDriver().getDDLScript(DBCmdType.DROP, db.DATA, script);
- script.executeAll(db.getDriver(), conn, true);
+ script.executeAll(true);
}
/**