Catching Rollback Exceptions in TopLink Essentials 
This post follows up:
 
Toplink JPA outside EJB3 Container in TomCat 5.5
 
We just do exactly what  advised in OTN Toplink Essentials JPA Reference.
******************************************************************
Modify WEB-INF/classes/DataBean.java and replace methods:
******************************************************************
public void empSelected(ActionEvent actionEvent) {
this.departId =
((Integer)((UIParameter)actionEvent.getComponent().getFacet("extraParameter")).getValue()).intValue();
setEmpModificationResult("        ");
}
// Handling rollback when delete.
public void empRemove(ActionEvent actionEvent){
 Integer  empId = ((Integer)((UIParameter)actionEvent.getComponent().getFacet("extraParameter")).getValue()).intValue();
try {
 requestEmpRemove(empId);
 this.empModificationResult = "Success";
 }catch (OptimisticLockException ex){
 this.empModificationResult = "Failed to " + this.empEntryOperation.toLowerCase() + "Employee status has changed since last viewed";
 }catch (Exception ex){
   this.empModificationResult = "Failed to " + this.empEntryOperation.toLowerCase() + "An unexpected Error ocurred: " +ex.toString();
 }
}
//Handling rollback wnen insert or update.
public void completeEmpUpdate(ActionEvent actionEvent) {
 try {
                SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
                java.util.Date parsedDate = formatter.parse(hrString);
                this.currentEmp.setHiredate(new java.sql.Date(parsedDate.getTime()));
      }
      catch (Exception err) {  }
 
 try{
  if (this.empEntryOperation == this.UPDATE_OPERATION){
 updateEmployee(this.currentEmp.getEmpno(),this.currentEmp.getEname(),this.currentEmp.getMgr(),this.currentEmp.getSal(), this.currentEmp.getHiredate());
   
 } else {
      createNewEmp(this.currentEmp);
  }
 this.empModificationResult = SUCCESS;
 }catch (RollbackException ex){
 if (ex.getCause() instanceof OptimisticLockException){
 this.empModificationResult = "Failed to " + this.empEntryOperation.toLowerCase() + "Employee status has changed since last viewed";
 } else {
 this.empModificationResult = "Failed to " + this.empEntryOperation.toLowerCase() + " An unexpected Error ocurred: " +ex.toString();
 }
  } catch (Exception ex) {
 this.empModificationResult = "Failed to " + this.empEntryOperation.toLowerCase() + "  An unexpected Error ocurred: " +ex.toString();
  }
}
public void setEmpModificationResult(String empModificationResult) {
        this.empModificationResult = empModificationResult;
    }
public String getEmpModificationResult() {
        return empModificationResult;
    }
 
***************************************
Add to the bottom of  employee.jsp:-
***************************************
 <f:verbatim>
            <hr/>
</f:verbatim>
  <h:outputText value="#{dataBean.empModificationResult}"/>
 
Now attempt to violate primary key "empno" when inserting record
into table scott.emp won't crash apps and will display message:-

In  case of success we get message:
