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/23 12:10:47 UTC

[empire-db] branch version3 updated: EMPIREDB-366 make DBRecord serializable

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 a75f00a  EMPIREDB-366 make DBRecord serializable
a75f00a is described below

commit a75f00a74f07c4ef7491e794640f21abad604c8c
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Sun Jan 23 13:10:46 2022 +0100

    EMPIREDB-366 make DBRecord serializable
---
 .../org/apache/empire/samples/db/SampleApp.java    |  2 +
 .../websample/db/records/DepartmentRecord.java     |  2 +-
 .../jsf2/websample/db/records/EmployeeRecord.java  |  2 +-
 .../jsf2/websample/db/records/SampleRecord.java    | 73 +++++++++++-----------
 .../empire/jsf2/websample/web/SampleContext.java   | 46 +++++++++++---
 .../empire/jsf2/websample/web/SampleUser.java      |  4 +-
 .../empire/jsf2/websample/web/SampleUtils.java     | 13 ----
 .../websample/web/pages/EmployeeDetailPage.java    | 23 +++++--
 .../empire/jsf2/websample/web/pages/LoginPage.java | 16 +++++
 .../jsf2/websample/web/pages/SamplePage.java       |  2 +-
 .../src/main/resources/lang/messages_de.properties | 18 ++++--
 .../src/main/resources/lang/messages_en.properties | 15 +++--
 .../src/main/webapp/pages/employeeDetailPage.xhtml |  1 +
 .../src/main/webapp/pages/loginPage.xhtml          |  3 +
 .../org/apache/empire/jsf2/app/DBELResolver.java   |  2 +-
 .../org/apache/empire/jsf2/app/FacesUtils.java     |  2 +
 .../org/apache/empire/jsf2/app/WebApplication.java | 11 +++-
 .../org/apache/empire/jsf2/app/WebDBContext.java   | 32 ++++++----
 .../apache/empire/jsf2/components/SelectTag.java   | 12 +++-
 .../empire/jsf2/controls/SelectInputControl.java   |  3 +-
 .../jsf2/pageelements/RecordPageElement.java       |  7 +--
 .../java/org/apache/empire/jsf2/pages/Page.java    | 43 +++++++++++--
 .../empire/jsf2/utils/TagEncodingHelper.java       |  2 +-
 .../main/java/org/apache/empire/db/DBColumn.java   | 10 +--
 .../main/java/org/apache/empire/db/DBCommand.java  |  2 +-
 .../main/java/org/apache/empire/db/DBDatabase.java |  4 +-
 .../main/java/org/apache/empire/db/DBRecord.java   | 33 +++++-----
 .../main/java/org/apache/empire/db/DBRowSet.java   |  8 +--
 .../empire/db/exceptions/FieldValueException.java  |  2 +-
 29 files changed, 252 insertions(+), 141 deletions(-)

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 0a66714..4a12013 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
@@ -134,9 +134,11 @@ public class SampleApp
 			// commit
 			context.commit();
 			
+			/*
             int idEmp = testTransactionCreate(idDevDep);
             testTransactionUpdate(idEmp);
             testTransactionDelete(idEmp);
+            */
 
 			// STEP 7: Update Records (by setting the phone Number)
 			System.out.println("*** Step 7: updateEmployee() ***");
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 423ea27..03bff52 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
@@ -23,7 +23,7 @@ import org.apache.empire.jsf2.websample.web.SampleContext;
 
 public class DepartmentRecord extends SampleRecord<TDepartments>
 {
-    // *Deprecated* private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
     public DepartmentRecord(SampleContext context)
     {
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 e4b24db..04d11fa 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
@@ -28,7 +28,7 @@ import org.apache.empire.jsf2.websample.web.SampleContext;
 
 public class EmployeeRecord extends SampleRecord<TEmployees>
 {
-    // *Deprecated* private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
     public EmployeeRecord(SampleContext context)
     {
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 88db889..508a532 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,50 +18,53 @@
  */
 package org.apache.empire.jsf2.websample.db.records;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+
+import org.apache.empire.commons.ClassUtils;
 import org.apache.empire.db.DBContext;
 import org.apache.empire.db.DBRecord;
 import org.apache.empire.jsf2.websample.db.SampleTable;
 
+public abstract class SampleRecord<T extends SampleTable> extends DBRecord
+{
+    private static final long   serialVersionUID = 1L;
 
-public abstract class SampleRecord<T extends SampleTable> extends DBRecord {
-
-	// *Deprecated* private static final long serialVersionUID = 1L;
-	
-	protected T T; // The table
-
-	public SampleRecord(DBContext context, T table) {
-		super(context, table);
-		this.T = table;
-	}
+    /*
+     * Store the table for convenience
+     */
+    protected final transient T T;
 
-	/**
-	 * Returns the table this record is based upon.
-	 * @return The table this record is based upon.
-	 */
-	public T getTable() {
-		return T;
-	}
-
-	/*
-    public void create(Connection conn)
-    {
-        super.create(getTable(), conn);
+    /**
+     * Custom deserialization for transient T.
+     */
+    private void readObject(ObjectInputStream strm)
+        throws IOException, ClassNotFoundException
+    {   // Restore T
+        T table = super.getRowSet();
+        ClassUtils.setPrivateFieldValue(SampleRecord.class, this, "T", table);
+        // read the rest
+        strm.defaultReadObject();
     }
-    
-    public void create()
-    {
-        super.create(getTable());
-    }
-	
-    public void read(Object[] keys, Connection conn)
+
+    /**
+     * Constructor for SampleRecord
+     * @param context
+     * @param table
+     */
+    protected SampleRecord(DBContext context, T table)
     {
-        super.read(getTable(), keys, conn);
+        super(context, table);
+        this.T = table;
     }
 
-    public void read(Object id, Connection conn)
+    /**
+     * Returns the table this record is based upon.
+     * @return The table this record is based upon.
+     */
+    public T getTable()
     {
-        super.read(getTable(), id, conn);
+        return T;
     }
-    */
-	
-}
\ 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/SampleContext.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
index 34ae2b2..bb10d39 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleContext.java
@@ -18,30 +18,56 @@
  */
 package org.apache.empire.jsf2.websample.web;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.commons.ClassUtils;
 import org.apache.empire.jsf2.app.WebDBContext;
 import org.apache.empire.jsf2.websample.db.SampleDB;
 
 /**
  * This is an example for a custom DBContext extension
  * @author rainer
- *
  */
 public class SampleContext extends WebDBContext<SampleDB>
 {
-    // *Deprecated* private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
     
-    private final SampleSession session;
+    private final transient SampleSession session;
     
-    public SampleContext(SampleApplication app, SampleSession session)
-    {
-        super(app, app.getDatabase());
-        // the session
-        this.session = session;
+    /**
+     * Custom serialization for transient fields.
+     * 
+     */
+    private void writeObject(ObjectOutputStream strm) throws IOException 
+    {   // write the object
+        strm.defaultWriteObject();
+    }
+    
+    /**
+     * Custom deserialization for transient fields.
+     */
+    private void readObject(ObjectInputStream strm) 
+        throws IOException, ClassNotFoundException
+    {   // Restore Session
+        FacesContext fc = FacesContext.getCurrentInstance();
+        SampleSession session = SampleUtils.getSampleSession(fc);
+        ClassUtils.setPrivateFieldValue(SampleContext.class, this, "session", session);
+        // Read the object
+        strm.defaultReadObject();
     }
     
-    public SampleApplication getApplication()
+    /**
+     * Constructs a SampleContext 
+     */
+    public SampleContext(SampleDB db, SampleSession session)
     {
-        return (SampleApplication)app;
+        super(db);
+        // the session
+        this.session = session;
     }
 
     public SampleUser getUser()
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java
index 8247767..9c0589a 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUser.java
@@ -59,9 +59,9 @@ public class SampleUser // *Deprecated* implements Serializable
         return this.language;
     }
     
-    public void setLocale(Locale lo)
+    public void setLocale(Locale locale)
     {
-        this.language = lo;
+        this.language = locale;
     }
 
 }
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
index 5391871..e282322 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/SampleUtils.java
@@ -93,17 +93,4 @@ public class SampleUtils extends FacesUtils
         FacesContext fc = getContext();
         return getFilePath(fc, path, file);
     }
-
-    /* Messages */
-
-    public static String getMessage(String messageKey)
-    {
-        return getMessage(getContext(), messageKey);
-    }
-
-    public static void addErrorMessage(String msg)
-    {
-        FacesContext fc = getContext();
-        addErrorMessage(fc, msg);
-    }
 }
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 716e714..da0e580 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
@@ -18,6 +18,9 @@
  */
 package org.apache.empire.jsf2.websample.web.pages;
 
+import javax.faces.event.ActionEvent;
+
+import org.apache.empire.commons.ClassUtils;
 import org.apache.empire.exceptions.MiscellaneousErrorException;
 import org.apache.empire.jsf2.pageelements.RecordPageElement;
 import org.apache.empire.jsf2.pages.PageOutcome;
@@ -101,18 +104,30 @@ public class EmployeeDetailPage extends SamplePage
     
     public PageOutcome doSave()
     {
-
         getEmployeeRecord().update();
         
-        getEmployeeRecord().getContext().getConnection();
-        
-        /* test transaction */  
+        /* test transaction 
         SampleDB db = this.getDatabase();
         if (getEmployeeRecord().isNull(db.T_EMPLOYEES.PHONE_NUMBER))
             throw new MiscellaneousErrorException("Phone number must not be empty!");
+        */  
         
         return getParentOutcome(true);
     }
+    
+    public void doTestSerialization(ActionEvent ae)
+    {
+        /* test serialization */
+        EmployeeRecord before = getEmployeeRecord();
+        EmployeeRecord after  = ClassUtils.testSerialization(EmployeeRecord.class, before);
+        
+        addInfoMessage("!employeeDetail_testMessage");
+        addInfoMessage("Rowset is {0}",  (after.getRowSet() ==before.getRowSet())  ? "Same" : "Different");
+        addInfoMessage("Context is {0}", (after.getContext()==before.getContext()) ? "Same" : "Different");
+        after.read(before.getKey());
+
+        addInfoMessage("!global_status", after.isValid() ? "!global_valid" : "!global_invalid");
+    }
 
     public PageOutcome doDelete()
     {
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java
index 78c58bf..8b7892e 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/java/org/apache/empire/jsf2/websample/web/pages/LoginPage.java
@@ -18,6 +18,9 @@
  */
 package org.apache.empire.jsf2.websample.web.pages;
 
+import java.util.Locale;
+
+import org.apache.empire.commons.Options;
 import org.apache.empire.jsf2.app.FacesUtils;
 import org.apache.empire.jsf2.pages.PageOutcome;
 import org.apache.empire.jsf2.websample.web.SampleSession;
@@ -26,6 +29,19 @@ import org.apache.empire.jsf2.websample.web.SampleUtils;
 public class LoginPage extends SamplePage {
 	
 	// *Deprecated* private static final long serialVersionUID = 1L;
+    
+    private static final Options languageOptions;
+    
+    static {
+        languageOptions = new Options();
+        languageOptions.set(Locale.US, "English");
+        languageOptions.set(Locale.GERMAN, "German");
+    }
+    
+    public Options getLanguageOptions()
+    {
+        return languageOptions;
+    }
 
 	public void doLogin() 
 	{
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 d4f6ce0..87805e0 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
@@ -41,7 +41,7 @@ public class SamplePage extends Page
         {
             SampleApplication app = SampleUtils.getSampleApplication();
             SampleSession session = SampleUtils.getSampleSession();
-            this.sampleContext = new SampleContext(app, session);
+            this.sampleContext = new SampleContext(app.getDatabase(), session);
         }
         return this.sampleContext;
     }
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties
index 8d3c8da..fb93c93 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_de.properties
@@ -18,8 +18,8 @@
 #fields
 field.title.employees.employeeId=Mitarbeiter Nr.
 field.title.employees.salutation=Anrede
-field.title.employees.firstname=Vorname
-field.title.employees.lastname=Nachname
+field.title.employees.firstName=Vorname
+field.title.employees.lastName=Nachname
 field.title.employees.dateOfBirth=Geburtsdatum
 field.title.employees.departmentId=Abteilung
 field.title.employees.gender=Geschlecht
@@ -46,12 +46,16 @@ application_logout=Abmelden
 
 #
 global_list_result_empty=Es wurden keine Elemente mit den angegebenen Filterkriterien gefunden.
+global_status=Der Status ist {0}
+global_valid=g�ltig
+global_invalid=ung�ltig
 
 #pages
-login_title = Anmeldung
-login_login = anmelden
-login_field_name = Benutzername
-login_field_password = Passwort
+login_title=Anmeldung
+login_login=anmelden
+login_field_name=Benutzername
+login_field_password=Passwort
+login_field_language=Sprache
 login_hint=Hinweis: Geben Sie einen beliebigen Benutzernamen und Kennwort an.
 
 employeeSearch_title = Mitarbeitersuche
@@ -78,6 +82,8 @@ employeeDetail_msg_extended = Hier k
 employeeDetail_save = Speichern
 employeeDetail_back = Zur�ck
 employeeDetail_delete = L�schen
+employeeDetail_test = Test
+employeeDetail_testMessage = Serialization erfolgreich durchgef�hrt
 
 ## Old stuff
 
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties
index 62fc4ed..b8a4107 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/resources/lang/messages_en.properties
@@ -45,13 +45,16 @@ application_logout = Logout
 
 
 global_list_result_empty=No employee(s) found
-
+global_status=The status is {0}
+global_valid=valid
+global_invalid=invalid
 
 #pages
-login_title = Login
-login_login = login
-login_field_name = User name
-login_field_password = Password
+login_title=Login
+login_login=login
+login_field_name=User name
+login_field_password=Password
+login_field_language=Sprache
 login_hint=Hint: enter any non null username and password.
 
 employeeSearch_title=Search employee
@@ -78,6 +81,8 @@ employeeDetail_msg_extended = Please display additional information here
 employeeDetail_save = Save
 employeeDetail_back = Back
 employeeDetail_delete = Delete
+employeeDetail_test = Test
+employeeDetail_testMessage = Serialization successful
 
 # Old stuff
 
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml
index 84498d9..8dd3d09 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/employeeDetailPage.xhtml
@@ -69,6 +69,7 @@
 			<h:commandLink value="#{msg.employeeDetail_back}" action="#{page.doCancel}" immediate="true" />
 			<h:commandLink value="#{msg.employeeDetail_delete}" action="#{page.doDelete}" immediate="true" rendered="#{page.employeeRecord.exists}" />
 			<h:commandLink value="#{msg.employeeDetail_save}" action="#{page.doSave}" />
+			<h:commandLink value="#{msg.employeeDetail_test}" actionListener="#{page.doTestSerialization}" />
 		</h:panelGroup>
 
 		</h:form>
diff --git a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml
index 7784c92..fcb82dc 100644
--- a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml
+++ b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/pages/loginPage.xhtml
@@ -45,6 +45,9 @@
 				<sample:formInputRow for="password" label="#{msg.login_field_password}">
 					<h:inputSecret id="password" value="#{sampleUser.password}" required="true" />
 				</sample:formInputRow>
+				<sample:formInputRow for="password" label="#{msg.login_field_language}">
+					<e:select id="language" value="#{sampleUser.locale}" options="#{page.languageOptions}" />
+				</sample:formInputRow>
 				<!-- button bar -->
 				<sample:formButtonRow>
 					<h:commandLink action="#{page.doLogin}" value="#{msg.login_title}" />
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
index e16a914..50c3d64 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
@@ -113,7 +113,7 @@ public class DBELResolver extends ELResolver
         else if (base==null)
         {   // LookupDatabase
             String name = StringUtils.toString(property);
-            DBDatabase db = DBDatabase.findById(name);
+            DBDatabase db = DBDatabase.findByIdentifier(name);
             if (db!=null)
                 context.setPropertyResolved(true);
             // done
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 7af50c9..11aab53 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
@@ -381,6 +381,7 @@ public class FacesUtils
         return getMessage(getContext(), messageKey);
     }
 
+    /*
     public static void addInfoMessage(FacesContext fc, String clientId, String msg)
     {
         fc.addMessage(clientId, new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
@@ -410,6 +411,7 @@ public class FacesUtils
     {
         addErrorMessage(fc, null, msg);
     }
+    */
 
     /**
      * indicates whether submitted values in InputControl should be cleared or preserved.
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 afe8f40..306cdbd 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
@@ -73,12 +73,17 @@ public abstract class WebApplication
     
     private static WebApplication appInstance         = null;
     
-    public static WebApplication getInstance()
+    /**
+     * Returns the one and only instance of the WebApplication (Singleton)
+     * @return the WebApplication instance
+     */
+    @SuppressWarnings("unchecked")
+    public static <T extends WebApplication> T getInstance()
     {
         if (appInstance==null)
             log.warn("No WebApplication instance available. Please add a PostConstructApplicationEvent using WebAppStartupListener in your faces-config.xml to create the WebApplication object.");
         // return instance
-        return appInstance;
+        return (T)appInstance;
     }
 
     protected abstract void init(ServletContext servletContext);
@@ -90,7 +95,7 @@ public abstract class WebApplication
         log.info("WebApplication {} created", getClass().getName());
         // Must be a singleton
         if (appInstance!=null) {
-            throw new RuntimeException("An attempt was made to create second instance of WebApplication. WebApplication must be a singleton!");
+            throw new RuntimeException("An attempt was made to create second instance of WebApplication. WebApplication must be a Singleton!");
         }
         // set Instance
         appInstance = this;
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
index 17e77e4..1ca1da6 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
@@ -1,14 +1,20 @@
 package org.apache.empire.jsf2.app;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
 import java.sql.Connection;
 
 import javax.faces.context.FacesContext;
 
+import org.apache.empire.commons.ClassUtils;
 import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBDatabaseDriver;
 import org.apache.empire.db.context.DBContextBase;
 import org.apache.empire.db.context.DBRollbackManager;
+import org.apache.empire.exceptions.ItemNotFoundException;
 import org.apache.empire.exceptions.NotSupportedException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -21,19 +27,19 @@ import org.slf4j.LoggerFactory;
  *
  * @param <DB>
  */
-public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Deprecated* implements Serializable
+public class WebDBContext<DB extends DBDatabase> extends DBContextBase implements Serializable
 {
-    // *Deprecated* private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
     private static final Logger    log = LoggerFactory.getLogger(WebDBContext.class);
 
-    protected final WebApplication   app;       /* transient */
-    protected final DB               database;  /* transient */
-    protected final DBDatabaseDriver driver;    /* transient */
+    protected final transient WebApplication   app;
+    protected final transient DB               database;
+    protected final transient DBDatabaseDriver driver;
 
     /**
      * Custom serialization for transient fields.
-     * 
+     */ 
     private void writeObject(ObjectOutputStream strm) throws IOException 
     {   // Database
         strm.writeObject((database!=null ? database.getIdentifier() : ""));
@@ -41,13 +47,16 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Depre
         strm.defaultWriteObject();
     }
     
+    /**
+     * Custom deserialization for transient fields.
+     */ 
     private void readObject(ObjectInputStream strm) 
         throws IOException, ClassNotFoundException
     {   // WebApplication
         ClassUtils.setPrivateFieldValue(WebDBContext.class, this, "app", WebApplication.getInstance());
         // Database
         String dbid = String.valueOf(strm.readObject());
-        DBDatabase database = DBDatabase.findById(dbid);
+        DBDatabase database = DBDatabase.findByIdentifier(dbid);
         if (database==null)
             throw new ItemNotFoundException(dbid);
         ClassUtils.setPrivateFieldValue(WebDBContext.class, this, "database", database);
@@ -55,11 +64,10 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Depre
         // read the rest
         strm.defaultReadObject();
     }
-     */
     
-    public WebDBContext(WebApplication app, DB db)
+    public WebDBContext(DB db)
     {
-        this.app = app;
+        this.app    = WebApplication.getInstance();;
         this.driver = db.getDriver();
         this.database = db;
         // check driver
@@ -109,14 +117,14 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase // *Depre
     protected Connection getConnection(boolean create)
     {
         FacesContext fc = FacesContext.getCurrentInstance();
-        return this.app.getConnectionForRequest(fc, database, create);
+        return app.getConnectionForRequest(fc, database, create);
     }
 
     @Override
     protected DBRollbackManager getRollbackManager(boolean create)
     {
         FacesContext fc = FacesContext.getCurrentInstance();
-        return this.app.getRollbackManagerForRequest(fc, create);
+        return app.getRollbackManagerForRequest(fc, create);
     }
     
 }
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
index 95acf1f..33c8b20 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
@@ -33,6 +33,7 @@ import javax.faces.component.visit.VisitContext;
 import javax.faces.context.FacesContext;
 
 import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.commons.OptionEntry;
 import org.apache.empire.commons.Options;
 import org.apache.empire.commons.StringUtils;
 import org.apache.empire.data.Column;
@@ -289,8 +290,15 @@ public class SelectTag extends UIInput implements NamingContainer
             UIInput inputComponent = getInputComponent();
 
             Object value = (inputComponent==null ? "" : inputComponent.getValue());
-            if (value == null)
-                value = "";
+            if (value != null)
+            {   // get the real value
+                Options options = this.getOptionList();
+                OptionEntry entry = options.getEntry(value);
+                if (entry!=null)
+                    value = entry.getValue();
+            }
+            else value = "";
+
             setValue(value);
         }
         super.updateModel(context);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
index fc4dc33..866eef7 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
@@ -267,7 +267,8 @@ public class SelectInputControl extends InputControl
             }
             if (ObjectUtils.compareEqual(ov, oe.getValue()))
             {   // next
-                si.setItemLabel(oe.getText());
+                String label = oe.getText();
+                si.setItemLabel(textResolver.resolveText(label));
                 oe = (ioe.hasNext() ? ioe.next() : null);
                 continue;
             }
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 9b6cac9..1fb1c4a 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
@@ -18,15 +18,12 @@
  */
 package org.apache.empire.jsf2.pageelements;
 
-import javax.faces.context.FacesContext;
-
 import org.apache.empire.db.DBRecord;
 import org.apache.empire.db.DBRowSet;
 import org.apache.empire.exceptions.EmpireException;
 import org.apache.empire.exceptions.InternalException;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.ObjectNotValidException;
-import org.apache.empire.jsf2.app.FacesUtils;
 import org.apache.empire.jsf2.pages.Page;
 import org.apache.empire.jsf2.pages.PageDefinition;
 import org.apache.empire.jsf2.pages.PageElement;
@@ -211,9 +208,7 @@ public class RecordPageElement<T extends DBRecord> extends PageElement
             if (!(e instanceof EmpireException))
                 e = new InternalException(e);
             // Set error Message
-            FacesContext fc = FacesUtils.getContext();
-            String msg = FacesUtils.getTextResolver(fc).getExceptionMessage(e);
-            FacesUtils.addErrorMessage(fc, msg);
+            getPage().setErrorMessage(e);
             return false; 
         }
     }
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 9b9e269..dd04c4d 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
@@ -19,6 +19,7 @@
 package org.apache.empire.jsf2.pages;
 
 import java.lang.reflect.Method;
+import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -26,6 +27,7 @@ import java.util.Map;
 
 import javax.faces.application.FacesMessage;
 import javax.faces.application.NavigationHandler;
+import javax.faces.application.FacesMessage.Severity;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 
@@ -278,7 +280,7 @@ public abstract class Page // *Deprecated* implements Serializable
     protected void setSessionError(Throwable e)
     {
         // Set Session Message
-        String msg = getErrorMessage(e);
+        String msg = extractErrorMessage(e);
         String detail = extractErrorMessageDetail(action, e, 1);
         if (log.isDebugEnabled())
             log.debug(msg + "\r\n" + detail, e);
@@ -289,7 +291,7 @@ public abstract class Page // *Deprecated* implements Serializable
     protected boolean handleActionError(String action, Throwable e)
     {
         // Set Faces Message
-        String msg = getErrorMessage(e);
+        String msg = extractErrorMessage(e);
         String detail = extractErrorMessageDetail(action, e, 1);
         log.error(msg + "\r\n" + detail);
         FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, detail);
@@ -305,9 +307,40 @@ public abstract class Page // *Deprecated* implements Serializable
         return true;
     }
 
-    protected void setErrorMessage(Throwable e)
+    protected void addFacesMessage(Severity severity, String msg, Object... params)
     {
-        String msg = getErrorMessage(e);
+        TextResolver resolver = getTextResolver();
+        msg = resolver.resolveText(msg);
+        if (params.length>0)
+        {   // translate params
+            for (int i=0; i<params.length; i++)
+                if (params[i] instanceof String)
+                    params[i] = resolver.resolveText((String)params[i]);
+            // format
+            msg = MessageFormat.format(msg, params);
+        }
+        FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_WARN, msg, msg);
+        FacesContext.getCurrentInstance().addMessage(getPageName(), facesMsg);
+    }
+
+    public final void addInfoMessage(String msg, Object... params)
+    {
+        addFacesMessage(FacesMessage.SEVERITY_INFO, msg, params);
+    }
+
+    public final void addWarnMessage(String msg, Object... params)
+    {
+        addFacesMessage(FacesMessage.SEVERITY_WARN, msg, params);
+    }
+
+    public final void addErrorMessage(String msg, Object... params)
+    {
+        addFacesMessage(FacesMessage.SEVERITY_ERROR, msg, params);
+    }
+
+    public void setErrorMessage(Throwable e)
+    {
+        String msg = extractErrorMessage(e);
         String detail = extractErrorMessageDetail(action, e, 1);
         if (log.isDebugEnabled())
             log.debug(msg + "\r\n" + detail, e);
@@ -315,7 +348,7 @@ public abstract class Page // *Deprecated* implements Serializable
         FacesContext.getCurrentInstance().addMessage(getPageName(), facesMsg);
     }
 
-    protected String getErrorMessage(Throwable e)
+    protected String extractErrorMessage(Throwable e)
     {   // Wrap Exception
         if (!(e instanceof EmpireException))
             e = new InternalException(e);
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 1fdd4d1..8c8f01c 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -973,7 +973,7 @@ public class TagEncodingHelper implements NamingContainer
                 log.error("Invalid column expression '{}'!", name);
                 return null; // not found
             }
-            DBDatabase db = DBDatabase.findById(name.substring(0,dbix));
+            DBDatabase db = DBDatabase.findByIdentifier(name.substring(0,dbix));
             if (db==null)
             {
                 log.error("Database '{}' not found!", name.substring(0,dbix));
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
index 7cb508a..0cdc163 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBColumn.java
@@ -84,23 +84,23 @@ public abstract class DBColumn extends DBColumnExpr
      * Gets an identifier for this RowSet Object
      * @return the rowset identifier
      */
-    public String getIdent()
+    public String getIdentifier()
     {
-        return rowset.getIdent()+"."+name;
+        return rowset.getIdentifier()+"."+name;
     }
 
     /**
      * returns a rowset by its identifier
      * @param columnId the id of the column
      * @return the DBColumn object
-    public static DBColumn findById(String columnId)
+    public static DBColumn findByIdentifier(String columnId)
     {
         int i = columnId.lastIndexOf('.');
         if (i<0)
             throw new InvalidArgumentException("columnId", columnId);
         // rowset suchen
         String rsid = columnId.substring(0, i);
-        DBRowSet rset = DBRowSet.findById(rsid);
+        DBRowSet rset = DBRowSet.findByIdentifier(rsid);
         // column suchen
         String colname = columnId.substring(i+1);
         DBColumn col = rset.getColumn(colname);
@@ -126,7 +126,7 @@ public abstract class DBColumn extends DBColumnExpr
         String dbid = String.valueOf(strm.readObject());
         String rsid = String.valueOf(strm.readObject());
         // find database
-        DBDatabase dbo = DBDatabase.findById(dbid);
+        DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
         if (dbo==null)
             throw new ClassNotFoundException(dbid);
         // find rowset
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index 2a242aa..75ec274 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -97,7 +97,7 @@ public abstract class DBCommand extends DBCommandExpr
     {
         String dbid = String.valueOf(strm.readObject());
         // find database
-        DBDatabase dbo = DBDatabase.findById(dbid);
+        DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
         if (dbo==null)
             throw new ItemNotFoundException(dbid);
         // set final field
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 aa29465..63fa6a4 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
@@ -103,7 +103,7 @@ public abstract class DBDatabase extends DBObject
     /** 
      * find a database by id
      */
-    public static DBDatabase findById(String dbIdent)
+    public static DBDatabase findByIdentifier(String dbIdent)
     {
         WeakReference<DBDatabase> ref = databaseMap.get(dbIdent);
         if (ref==null)
@@ -229,7 +229,7 @@ public abstract class DBDatabase extends DBObject
         }
         invalidKeys.clear();
         // Find a unique key
-        if (findById(dbid)!=null)
+        if (findByIdentifier(dbid)!=null)
         {   int maxInstId=1;
             String instPrefix = dbid+":";
             for (String key : databaseMap.keySet())
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 aeaf459..c318106 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
@@ -18,6 +18,10 @@
  */
 package org.apache.empire.db;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
 import java.util.Collection;
@@ -25,6 +29,7 @@ import java.util.List;
 
 import org.apache.commons.beanutils.BeanUtilsBean;
 import org.apache.commons.beanutils.PropertyUtilsBean;
+import org.apache.empire.commons.ClassUtils;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.Options;
 import org.apache.empire.commons.StringUtils;
@@ -38,6 +43,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.ItemNotFoundException;
 import org.apache.empire.exceptions.NotSupportedException;
 import org.apache.empire.exceptions.ObjectNotValidException;
 import org.apache.empire.xml.XMLUtil;
@@ -52,9 +58,9 @@ import org.w3c.dom.Element;
  * This class handles one record from a database table. 
  *
  */
-public class DBRecord extends DBRecordData implements DBContextAware, Record, Cloneable
+public class DBRecord extends DBRecordData implements DBContextAware, Record, Cloneable, Serializable
 {
-    // *Deprecated* private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
     
     private static final Logger log  = LoggerFactory.getLogger(DBRecord.class);
     
@@ -203,7 +209,7 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
 
     // the context
     protected final DBContext context;
-    protected final DBRowSet  rowset; /* transient */
+    protected final transient DBRowSet rowset; /* transient for serialization */
     
     // This is the record data
     private State           state;
@@ -219,6 +225,7 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
     /**
      * Custom serialization for transient rowset.
      * 
+     */
     private void writeObject(ObjectOutputStream strm) throws IOException 
     {   // RowSet
         String dbid = rowset.getDatabase().getIdentifier(); 
@@ -229,12 +236,15 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
         strm.defaultWriteObject();
     }
     
+    /**
+     * Custom deserialization for transient rowset.
+     */
     private void readObject(ObjectInputStream strm) throws IOException, ClassNotFoundException 
     {
         String dbid = String.valueOf(strm.readObject());
         String rsid = String.valueOf(strm.readObject());
         // find database
-        DBDatabase dbo = DBDatabase.findById(dbid);
+        DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
         if (dbo==null)
             throw new ItemNotFoundException(dbid);
         // find rowset
@@ -247,8 +257,6 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
         strm.defaultReadObject();
     }
     
-     */
-    
     /**
      * Constructs a new DBRecord.<BR>
      * @param context the DBContext for this record
@@ -838,19 +846,6 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
     public void init(Object[] key, boolean insert)
     {   // Init with keys
         rowset.initRecord(this, key, insert);
-        // fill default values
-        for (int i = 0; i < fields.length; i++)
-        {   // already set ?
-            if (fields[i]!=null)
-                continue; 
-            // check default
-            DBTableColumn col = (DBTableColumn) rowset.getColumn(i);
-            Object value = col.getRecordDefaultValue(null);
-            if (value==null)
-                continue;
-            // Modify value
-            modifyValue(i, value, true);
-        }
     }
 
     /**
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 cc9d77b..ec8b6ad 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
@@ -126,7 +126,7 @@ public abstract class DBRowSet extends DBExpr
      * Gets an identifier for this RowSet Object
      * @return the rowset identifier
      */
-    public String getIdent()
+    public String getIdentifier()
     {
         return db.getIdentifier()+"."+getName();
     }
@@ -136,14 +136,14 @@ public abstract class DBRowSet extends DBExpr
      * @param rowsetId the id of the rowset
      * @return the rowset object
      * 
-    public static DBRowSet findById(String rowsetId)
+    public static DBRowSet findByIdentifier(String rowsetId)
     {
         int i = rowsetId.lastIndexOf('.');
         if (i<0)
             throw new InvalidArgumentException("rowsetId", rowsetId);
         // database suchen
         String dbid = rowsetId.substring(0, i);
-        DBDatabase db = DBDatabase.findById(dbid);
+        DBDatabase db = DBDatabase.findByIdentifier(dbid);
         if (db==null)
             throw new ItemNotFoundException(dbid);
         // rowset suchen
@@ -169,7 +169,7 @@ public abstract class DBRowSet extends DBExpr
     {   // Database
         String dbid = String.valueOf(strm.readObject());
         // find database
-        DBDatabase dbo = DBDatabase.findById(dbid);
+        DBDatabase dbo = DBDatabase.findByIdentifier(dbid);
         if (dbo==null)
             throw new ItemNotFoundException(dbid);
         // set final field
diff --git a/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java b/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java
index c74f107..bade28a 100644
--- a/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java
+++ b/empire-db/src/main/java/org/apache/empire/db/exceptions/FieldValueException.java
@@ -32,7 +32,7 @@ public abstract class FieldValueException extends EmpireException
     {
         String title = column.getTitle();
         if (StringUtils.isEmpty(title))
-            title = "!["+((column instanceof DBColumn) ? ((DBColumn)column).getIdent() : column.getName()) + "]";
+            title = "!["+((column instanceof DBColumn) ? ((DBColumn)column).getIdentifier() : column.getName()) + "]";
         return title;
     }