Merge branch 'master' of ssh://git.eclipse.org/gitroot/eclipselink/examples
diff --git a/jpa-moxy/round-trip/.gitignore b/jpa-moxy/round-trip/.gitignore
new file mode 100644
index 0000000..5e56e04
--- /dev/null
+++ b/jpa-moxy/round-trip/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/jpa-moxy/round-trip/.project b/jpa-moxy/round-trip/.project
new file mode 100644
index 0000000..15966b8
--- /dev/null
+++ b/jpa-moxy/round-trip/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>round-trip</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/jpa/employee/employee.model/.project b/jpa/employee/employee.model/.project
index aa0e7e6..5a922d3 100644
--- a/jpa/employee/employee.model/.project
+++ b/jpa/employee/employee.model/.project
@@ -6,6 +6,11 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.wst.common.project.facet.core.builder</name>
 			<arguments>
 			</arguments>
@@ -32,5 +37,6 @@
 		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.python.pydev.pythonNature</nature>
 	</natures>
 </projectDescription>
diff --git a/jpa/employee/employee.model/.pydevproject b/jpa/employee/employee.model/.pydevproject
new file mode 100644
index 0000000..40e9f40
--- /dev/null
+++ b/jpa/employee/employee.model/.pydevproject
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?><pydev_project>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
+</pydev_project>
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs b/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
index c015bf3..42133d9 100644
--- a/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
+++ b/jpa/employee/employee.model/.settings/org.eclipse.core.resources.prefs
@@ -1,7 +1,7 @@
 eclipse.preferences.version=1
 encoding//src/main/java=UTF-8
-encoding//src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java=UTF-8
-encoding//src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java=UTF-8
+encoding//src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java=UTF-8
+encoding//src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java=UTF-8
 encoding//src/main/resources=UTF-8
 encoding//src/test/java=UTF-8
 encoding/<project>=UTF-8
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs b/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs
index 03921bf..f225875 100644
--- a/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs
+++ b/jpa/employee/employee.model/.settings/org.eclipse.jpt.core.prefs
@@ -1,6 +1,7 @@
 eclipse.preferences.version=1
 org.eclipse.jpt.core.platform=eclipselink2_4
 org.eclipse.jpt.jpa.core.discoverAnnotatedClasses=false
+org.eclipse.jpt.jpa.core.metamodelSourceFolderName=src/main/java
 problem.PROJECT_INACTIVE_CONNECTION=info
 problem.PROJECT_NO_CONNECTION=info
 workspace_preferences_overriden=true
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.wst.validation.prefs b/jpa/employee/employee.model/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..f6a7fbd
--- /dev/null
+++ b/jpa/employee/employee.model/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,8 @@
+DELEGATES_PREFERENCE=delegateValidatorList
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
+USER_PREFERENCE=overrideGlobalPreferencesfalse
+eclipse.preferences.version=1
+override=false
+suspend=false
+vf.version=3
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.wst.xml.core.prefs b/jpa/employee/employee.model/.settings/org.eclipse.wst.xml.core.prefs
new file mode 100644
index 0000000..b663641
--- /dev/null
+++ b/jpa/employee/employee.model/.settings/org.eclipse.wst.xml.core.prefs
@@ -0,0 +1,18 @@
+attributeHasNoValue=2
+eclipse.preferences.version=1
+endTagWithAttributes=2
+honourAllSchemaLocations=false
+indicateNoGrammar=-1
+indiciateNoDocumentElement=-1
+markupValidation=false
+missingClosingBracket=2
+missingClosingQuote=2
+missingEndTag=2
+missingQuotes=2
+missingStartTag=2
+missingTagName=2
+namespaceInPITarget=2
+use-project-settings=true
+whitespaceAtStart=2
+whitespaceBeforeTagName=2
+xinclude=false
diff --git a/jpa/employee/employee.model/.settings/org.eclipse.wst.xsl.core.prefs b/jpa/employee/employee.model/.settings/org.eclipse.wst.xsl.core.prefs
new file mode 100644
index 0000000..e28962c
--- /dev/null
+++ b/jpa/employee/employee.model/.settings/org.eclipse.wst.xsl.core.prefs
@@ -0,0 +1,11 @@
+CHECK_CALL_TEMPLATES=2
+CHECK_XPATHS=2
+CIRCULAR_REF=2
+DUPLICATE_PARAMETER=2
+EMPTY_PARAM=1
+MISSING_INCLUDE=2
+MISSING_PARAM=1
+NAME_ATTRIBUTE_EMPTY=2
+NAME_ATTRIBUTE_MISSING=2
+TEMPLATE_CONFLICT=2
+eclipse.preferences.version=1
diff --git a/jpa/employee/employee.model/README.md b/jpa/employee/employee.model/README.md
index 3b165aa..2a1ffd3 100644
--- a/jpa/employee/employee.model/README.md
+++ b/jpa/employee/employee.model/README.md
@@ -3,4 +3,7 @@
 
 Employee example model project illustrating an annotation mapped model. This project is leveraged by the employee.web and employee.web-js projects.
 
-http://wiki.eclipse.org/EclipseLink/Examples/JPA/Employee
\ No newline at end of file
+[EclipseLink Wiki: Employee JPA Example][1]
+  
+  
+[1]: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Employee
\ No newline at end of file
diff --git a/jpa/employee/employee.model/pom.xml b/jpa/employee/employee.model/pom.xml
index 4ded44d..50b6df4 100644
--- a/jpa/employee/employee.model/pom.xml
+++ b/jpa/employee/employee.model/pom.xml
@@ -42,9 +42,9 @@
 		</dependency>
 		
 		<dependency>
-			<groupId>javax</groupId>
-			<artifactId>javaee-api</artifactId>
-			<version>6.0</version>
+			<groupId>org.glassfish</groupId>
+			<artifactId>javax.ejb</artifactId>
+			<version>3.1.1</version>
 			<scope>provided</scope>
 		</dependency>
 	</dependencies>
diff --git a/jpa/employee/employee.model/src/PessimisticLockTest.launch b/jpa/employee/employee.model/src/eclipse/AdminBeanTest.launch
similarity index 86%
rename from jpa/employee/employee.model/src/PessimisticLockTest.launch
rename to jpa/employee/employee.model/src/eclipse/AdminBeanTest.launch
index 4231fbb..d1ba8ed 100644
--- a/jpa/employee/employee.model/src/PessimisticLockTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/AdminBeanTest.launch
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/employee.model/src/test/java/test/PessimisticLockTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -11,7 +11,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="test.PessimisticLockTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.AdminBeanTest"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
diff --git a/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch b/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch
index edfa2c0..97480c0 100644
--- a/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/DiagnosticsTest.launch
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +12,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.DiagnosticsTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch b/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch
index 93e0f59..9d6a4f2 100644
--- a/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/EditEmployeeTest.launch
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +12,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.EditEmployeeTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/PageEmployeesTest.launch b/jpa/employee/employee.model/src/eclipse/PageEmployeesTest.launch
similarity index 85%
rename from jpa/employee/employee.model/src/PageEmployeesTest.launch
rename to jpa/employee/employee.model/src/eclipse/PageEmployeesTest.launch
index a5992eb..d591873 100644
--- a/jpa/employee/employee.model/src/PageEmployeesTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/PageEmployeesTest.launch
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/employee.model/src/eclips"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +13,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.PageEmployeesTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/PageIdsInEmployeesTest.launch b/jpa/employee/employee.model/src/eclipse/PageIdsInEmployeesTest.launch
similarity index 85%
rename from jpa/employee/employee.model/src/PageIdsInEmployeesTest.launch
rename to jpa/employee/employee.model/src/eclipse/PageIdsInEmployeesTest.launch
index 64f1985..d2e961d 100644
--- a/jpa/employee/employee.model/src/PageIdsInEmployeesTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/PageIdsInEmployeesTest.launch
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/employee.model/src/eclips"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +13,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.PageIdsInEmployeesTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/StreamEmployeesTest.launch b/jpa/employee/employee.model/src/eclipse/StreamEmployeesTest.launch
similarity index 85%
rename from jpa/employee/employee.model/src/StreamEmployeesTest.launch
rename to jpa/employee/employee.model/src/eclipse/StreamEmployeesTest.launch
index a0668ae..c708c0d 100644
--- a/jpa/employee/employee.model/src/StreamEmployeesTest.launch
+++ b/jpa/employee/employee.model/src/eclipse/StreamEmployeesTest.launch
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/employee.model/src/eclips"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/Employee Example - model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java"/>
+<listEntry value="/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
@@ -12,7 +13,7 @@
 <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="eclipselink.example.jpa.employee.test.services.StreamEmployeesTest"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Employee Example - model"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="employee.model"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/eclipse/persistence/eclipselink/2.4.2-SNAPSHOT/eclipselink-2.4.2-SNAPSHOT.jar"/>
 </launchConfiguration>
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java
index 2dc8e93..173f440 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address_.java
@@ -4,7 +4,7 @@
 import javax.persistence.metamodel.SingularAttribute;
 import javax.persistence.metamodel.StaticMetamodel;
 
-@Generated(value="Dali", date="2013-02-14T13:15:29.490-0500")
+@Generated(value="Dali", date="2013-05-08T15:16:26.628-0400")
 @StaticMetamodel(Address.class)
 public class Address_ {
 	public static volatile SingularAttribute<Address, Integer> id;
@@ -13,4 +13,5 @@
 	public static volatile SingularAttribute<Address, String> province;
 	public static volatile SingularAttribute<Address, String> postalCode;
 	public static volatile SingularAttribute<Address, String> street;
+	public static volatile SingularAttribute<Address, Long> version;
 }
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java
index a641b6f..3ae747d 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee.java
@@ -95,10 +95,6 @@
     @Version
     private Long version;
     
-    @ManyToMany
-    @JoinTable(joinColumns = @JoinColumn(name = "EMP_ID"), inverseJoinColumns = @JoinColumn(name = "PROJ_ID"), name = "PROJ_EMP")
-    private List<Project> projects = new ArrayList<Project>();
-
     @ManyToOne(fetch = LAZY)
     @JoinColumn(name = "MANAGER_ID")
     private Employee manager;
@@ -171,24 +167,6 @@
         this.version = version;
     }
 
-    public List<Project> getProjects() {
-        return projects;
-    }
-
-    public void setProjects(List<Project> projectList) {
-        this.projects = projectList;
-    }
-
-    public Project addProject(Project project) {
-        getProjects().add(project);
-        return project;
-    }
-
-    public Project removeProject(Project project) {
-        getProjects().remove(project);
-        return project;
-    }
-
     public Employee getManager() {
         return manager;
     }
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java
index f5d5af9..bbde128 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Employee_.java
@@ -5,7 +5,7 @@
 import javax.persistence.metamodel.SingularAttribute;
 import javax.persistence.metamodel.StaticMetamodel;
 
-@Generated(value="Dali", date="2013-02-14T13:15:29.493-0500")
+@Generated(value="Dali", date="2013-05-08T15:16:26.635-0400")
 @StaticMetamodel(Employee.class)
 public class Employee_ {
 	public static volatile SingularAttribute<Employee, Integer> id;
@@ -14,7 +14,6 @@
 	public static volatile SingularAttribute<Employee, String> lastName;
 	public static volatile SingularAttribute<Employee, Double> salary;
 	public static volatile SingularAttribute<Employee, Long> version;
-	public static volatile ListAttribute<Employee, Project> projects;
 	public static volatile SingularAttribute<Employee, Employee> manager;
 	public static volatile ListAttribute<Employee, Employee> managedEmployees;
 	public static volatile ListAttribute<Employee, PhoneNumber> phoneNumbers;
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject.java
deleted file mode 100644
index 5b3af9b..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2011 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *              dclarke - initial JPA Employee example using XML (bug 217884)
- *              mbraeuer - annotated version
- ******************************************************************************/
-package eclipselink.example.jpa.employee.model;
-
-import static javax.persistence.TemporalType.TIMESTAMP;
-
-import java.util.Calendar;
-
-import javax.persistence.*;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 1.0
- */
-@Entity
-@Table(name = "LPROJECT")
-@DiscriminatorValue("L")
-public class LargeProject extends Project {
-	@Basic
-	private double budget;
-	@Basic
-	@Temporal(TIMESTAMP)
-	private Calendar milestone = Calendar.getInstance();
-
-	public LargeProject() {
-		super();
-	}
-
-	public double getBudget() {
-		return this.budget;
-	}
-
-	public void setBudget(double budget) {
-		this.budget = budget;
-	}
-
-	public Calendar getMilestone() {
-		return milestone;
-	}
-
-	public void setMilestone(Calendar milestone) {
-		this.milestone = milestone;
-	}
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject_.java
deleted file mode 100644
index 02b9c7f..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/LargeProject_.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package eclipselink.example.jpa.employee.model;
-
-import java.util.Calendar;
-import javax.annotation.Generated;
-import javax.persistence.metamodel.SingularAttribute;
-import javax.persistence.metamodel.StaticMetamodel;
-
-@Generated(value="Dali", date="2013-02-14T13:15:29.495-0500")
-@StaticMetamodel(LargeProject.class)
-public class LargeProject_ extends Project_ {
-	public static volatile SingularAttribute<LargeProject, Double> budget;
-	public static volatile SingularAttribute<LargeProject, Calendar> milestone;
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project.java
deleted file mode 100644
index 0790d83..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2011 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *              dclarke - initial JPA Employee example using XML (bug 217884)
- *              mbraeuer - annotated version
- ******************************************************************************/
-package eclipselink.example.jpa.employee.model;
-
-import static javax.persistence.FetchType.LAZY;
-import static javax.persistence.InheritanceType.JOINED;
-
-import javax.persistence.*;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 1.0
- */
-@Entity 
-@Inheritance(strategy = JOINED)
-@DiscriminatorColumn(name = "PROJ_TYPE")
-public abstract class Project {
-    
-    @Id
-    @Column(name = "PROJ_ID")
-    @GeneratedValue
-    private int id;
-    
-    @Basic
-    @Column(name = "PROJ_NAME")
-    private String name;
-    
-    @Basic
-    @Column(name = "DESCRIP")
-    private String description;
-    
-    @Version
-    private Long version;
-    
-    @ManyToOne(fetch = LAZY)
-    @JoinColumn(name = "LEADER_ID")
-    private Employee teamLeader;
-
-    public Project() {
-    }
-
-    public String getDescription() {
-        return this.description;
-    }
-
-    public void setDescription(String descrip) {
-        this.description = descrip;
-    }
-
-    public int getId() {
-        return this.id;
-    }
-
-    public void setId(int projId) {
-        this.id = projId;
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public void setName(String projName) {
-        this.name = projName;
-    }
-
-    public Long getVersion() {
-        return version;
-    }
-
-    public void setVersion(Long version) {
-        this.version = version;
-    }
-
-    public Employee getTeamLeader() {
-        return this.teamLeader;
-    }
-
-    public void setTeamLeader(Employee employee) {
-        this.teamLeader = employee;
-    }
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project_.java
deleted file mode 100644
index 14144ca..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Project_.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package eclipselink.example.jpa.employee.model;
-
-import javax.annotation.Generated;
-import javax.persistence.metamodel.SingularAttribute;
-import javax.persistence.metamodel.StaticMetamodel;
-
-@Generated(value="Dali", date="2013-02-14T13:15:29.499-0500")
-@StaticMetamodel(Project.class)
-public class Project_ {
-	public static volatile SingularAttribute<Project, Integer> id;
-	public static volatile SingularAttribute<Project, String> name;
-	public static volatile SingularAttribute<Project, String> description;
-	public static volatile SingularAttribute<Project, Long> version;
-	public static volatile SingularAttribute<Project, Employee> teamLeader;
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java
index 66a982f..8bfda6a 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SamplePopulation.java
@@ -27,13 +27,13 @@
  */
 public class SamplePopulation {
 
+    /**
+     * Create the specified number of random sample employees.  
+     */
     public void createNewEmployees(EntityManager em, int quantity) {
-        em.getTransaction().begin();
-
         for (int index = 0; index < quantity; index++) {
             em.persist(createRandomEmployee());
         }
-        em.getTransaction().commit();
     }
 
     private static final String[] MALE_FIRST_NAMES = { "Jacob", "Ethan", "Michael", "Alexander", "William", "Joshua", "Daniel", "Jayden", "Noah", "Anthony" };
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject.java
deleted file mode 100644
index ad345f8..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 2011 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *              dclarke - initial JPA Employee example using XML (bug 217884)
- *              mbraeuer - annotated version
- ******************************************************************************/
-package eclipselink.example.jpa.employee.model;
-
-import javax.persistence.*;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 1.0
- */
-@Entity
-@Table(name = "PROJECT")
-@DiscriminatorValue("S")
-public class SmallProject extends Project {
-
-	private SmallProject() {
-		super();
-	}
-
-	public SmallProject(String name, String description) {
-		this();
-		setName(name);
-		setDescription(description);
-	}
-
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject_.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject_.java
deleted file mode 100644
index d909260..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/SmallProject_.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package eclipselink.example.jpa.employee.model;
-
-import javax.annotation.Generated;
-import javax.persistence.metamodel.StaticMetamodel;
-
-@Generated(value="Dali", date="2013-02-14T13:15:29.500-0500")
-@StaticMetamodel(SmallProject.class)
-public class SmallProject_ extends Project_ {
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java
new file mode 100644
index 0000000..4a4b948
--- /dev/null
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/AdminBean.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2013 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
+ * which accompanies this distribution. 
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at 
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
+ ******************************************************************************/
+package eclipselink.example.jpa.employee.services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+import javax.persistence.metamodel.EntityType;
+
+import org.eclipse.persistence.descriptors.ClassDescriptor;
+import org.eclipse.persistence.internal.sessions.IdentityMapAccessor;
+import org.eclipse.persistence.sessions.server.Server;
+import org.eclipse.persistence.tools.schemaframework.SchemaManager;
+
+import eclipselink.example.jpa.employee.model.Employee;
+import eclipselink.example.jpa.employee.model.SamplePopulation;
+
+/**
+ * Edit service for an {@link Employee} instance.
+ * 
+ * @author dclarke
+ * @since EclipseLink 2.4.2
+ */
+@Stateless
+@LocalBean
+public class AdminBean {
+
+    private EntityManagerFactory emf;
+
+    public EntityManagerFactory getEmf() {
+        return emf;
+    }
+
+    @PersistenceUnit(unitName = "employee")
+    public void setEmf(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
+
+    public String resetDatabase() {
+        EntityManager em = getEmf().createEntityManager();
+
+        try {
+            SchemaManager sm = new SchemaManager(em.unwrap(Server.class));
+            sm.replaceDefaultTables();
+            sm.replaceSequences();
+
+            em.unwrap(Server.class).getIdentityMapAccessor().initializeAllIdentityMaps();
+        } finally {
+            em.close();
+        }
+        return null;
+    }
+
+    public String populateDatabase(int quantity) {
+        EntityManager em = getEmf().createEntityManager();
+
+        try {
+            em.getTransaction().begin();
+            new SamplePopulation().createNewEmployees(em, quantity);
+            em.getTransaction().commit();
+        } finally {
+            em.close();
+        }
+        return null;
+    }
+
+    public int getCacheSize(String typeName) {
+        EntityManager em = getEmf().createEntityManager();
+        Server session = em.unwrap(Server.class);
+        ClassDescriptor descriptor = session.getDescriptorForAlias(typeName);
+        if (descriptor != null) {
+            return ((IdentityMapAccessor) session.getIdentityMapAccessor()).getIdentityMap(descriptor.getJavaClass()).getSize();
+        } else {
+            return -1;
+        }
+    }
+
+    public int getDatabaseCount(String type) {
+        EntityManager em = getEmf().createEntityManager();
+
+        try {
+            return em.createQuery("SELECT COUNT(o) FROM " + type + " o", Number.class).getSingleResult().intValue();
+        } finally {
+            em.close();
+        }
+    }
+
+    /**
+     * Construct a list of valid type names based on the JAP metamodel. Only
+     * include types that are inheritance roots (no super type).
+     */
+    public List<String> getTypes() {
+        List<String> typeNames = new ArrayList<String>();
+        for (EntityType<?> type : getEmf().getMetamodel().getEntities()) {
+            if (type.getSupertype() == null) {
+                typeNames.add(type.getName());
+            }
+        }
+        return typeNames;
+    }
+
+}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java
index 3652b3b..dfcffd4 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/Diagnostics.java
@@ -27,7 +27,9 @@
 import org.eclipse.persistence.sessions.server.Server;
 
 /**
- * TODO
+ * SessionLog proxy {@link InvocationHandler} used to intercept SQL logging
+ * messages so this sample application can display the SQL executed by the most
+ * recent operations.
  * 
  * @author dclarke
  * @since EclipseLink 2.4.2
@@ -46,20 +48,25 @@
     private SessionLog log;
 
     /**
-     * TODO
-     * 
-     * @param emf
-     * @return
+     * Lookup the Diagnostics instance and registered as the SessionLog (proxy).
+     * If one does not exist then create one.
      */
     public static Diagnostics getInstance(EntityManagerFactory emf) {
         EntityManager em = emf.createEntityManager();
+        try {
+            return getInstance(em);
+        } finally {
+            em.close();
+        }
+    }
+
+    public static Diagnostics getInstance(EntityManager em) {
         Server session = em.unwrap(Server.class);
-        em.close();
 
         Diagnostics diagnostics = (Diagnostics) session.getProperty(DIAGNOSTICS);
 
         if (diagnostics == null) {
-            synchronized (emf) {
+            synchronized (em.unwrap(Server.class)) {
                 diagnostics = (Diagnostics) session.getProperty(DIAGNOSTICS);
                 if (diagnostics == null) {
                     diagnostics = new Diagnostics(session);
@@ -108,7 +115,9 @@
 
         if (trace != null && "log".equals(method.getName()) && args.length == 1) {
             SessionLogEntry entry = (SessionLogEntry) args[0];
-            trace.add(entry);
+            if (SessionLog.SQL.equals(entry.getNameSpace())) {
+                trace.add(entry.getMessage());
+            }
         }
 
         return method.invoke(getLog(), args);
@@ -117,15 +126,13 @@
 
     public static class SQLTrace {
 
-        private List<SessionLogEntry> entries = new ArrayList<SessionLogEntry>();
+        private List<String> entries = new ArrayList<String>();
 
-        protected void add(SessionLogEntry entry) {
-            if (SessionLog.SQL.equals(entry.getNameSpace())) {
-                this.entries.add(entry);
-            }
+        protected void add(String entry) {
+            this.entries.add(entry);
         }
 
-        public List<SessionLogEntry> getEntries() {
+        public List<String> getEntries() {
             return entries;
         }
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java
deleted file mode 100644
index ccac3c8..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployee.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package eclipselink.example.jpa.employee.services;
-
-import javax.ejb.Local;
-
-import eclipselink.example.jpa.employee.model.Employee;
-import eclipselink.example.jpa.employee.model.PhoneNumber;
-
-/**
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-@Local
-public interface EditEmployee {
-
-    public abstract Employee getEmployee();
-
-    public abstract void setEmployee(Employee employee);
-
-    public abstract boolean isNew();
-
-    /**
-     * 
-     * @return
-     */
-    public abstract void save();
-
-    public abstract void delete();
-
-    public abstract void refresh();
-
-    /**
-     * Force the optimistic version field to be updated so that the save
-     * operations will fail.
-     */
-    public abstract int updateVersion();
-
-    public abstract String removeAddress();
-
-    public abstract String addAddress();
-
-    public abstract PhoneNumber addPhone(String type);
-
-    public abstract void remove(PhoneNumber phone);
-
-    public abstract void close();
-
-}
\ No newline at end of file
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java
deleted file mode 100644
index 4b7399d..0000000
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EditEmployeeBean.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2013 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
- ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
-
-import javax.ejb.Local;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.LockModeType;
-
-import eclipselink.example.jpa.employee.model.Address;
-import eclipselink.example.jpa.employee.model.Employee;
-import eclipselink.example.jpa.employee.model.PhoneNumber;
-
-/**
- * Edit service for an {@link Employee} instance.
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-@Stateless
-@Local(EditEmployee.class)
-public class EditEmployeeBean implements EditEmployee {
-
-    private EntityManager entityManager;
-
-    private Employee employee;
-
-    public EditEmployeeBean() {
-        super();
-    }
-
-    public EditEmployeeBean(EntityManagerFactory emf, Integer id) {
-        this.entityManager = emf.createEntityManager();
-        if (id != null) {
-            setEmployee(getEntityManager().find(Employee.class, id));
-        } else {
-            this.employee = new Employee();
-        }
-    }
-
-    protected EntityManager getEntityManager() {
-        return this.entityManager;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#getEmployee()
-     */
-    @Override
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#setEmployee(
-     * eclipselink.example.jpa.employee.model.Employee)
-     */
-    @Override
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-        if (employee != null) {
-            employee.getAddress();
-            employee.getPhoneNumbers().size();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#isNew()
-     */
-    @Override
-    public boolean isNew() {
-        return getEmployee().getId() <= 0;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#save()
-     */
-    @Override
-    public void save() {
-        getEntityManager().getTransaction().begin();
-
-        // Ensure the Employee's lock value is incremented
-        getEntityManager().lock(getEmployee(), LockModeType.OPTIMISTIC_FORCE_INCREMENT);
-
-        getEntityManager().getTransaction().commit();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#delete()
-     */
-    @Override
-    public void delete() {
-        try {
-            getEntityManager().getTransaction().begin();
-            getEntityManager().remove(getEmployee());
-            getEntityManager().getTransaction().commit();
-        } finally {
-            setEmployee(null);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#refresh()
-     */
-    @Override
-    public void refresh() {
-        if (!getEntityManager().contains(getEmployee())) {
-            setEmployee(getEntityManager().merge(getEmployee()));
-        }
-        getEntityManager().refresh(getEmployee());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#updateVersion()
-     */
-    @Override
-    public int updateVersion() {
-        getEntityManager().detach(getEmployee());
-        getEntityManager().getTransaction().begin();
-        getEntityManager().createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + getEmployee().getId()).executeUpdate();
-        getEntityManager().getTransaction().commit();
-        setEmployee(getEntityManager().merge(getEmployee()));
-        Number result = (Number) getEntityManager().createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + getEmployee().getId()).getSingleResult();
-        return result.intValue();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#removeAddress()
-     */
-    @Override
-    public String removeAddress() {
-        getEmployee().setAddress(null);
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#addAddress()
-     */
-    @Override
-    public String addAddress() {
-        getEmployee().setAddress(new Address());
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#addPhone(java.
-     * lang.String)
-     */
-    @Override
-    public PhoneNumber addPhone(String type) {
-        if (type != null && !type.isEmpty()) {
-            return getEmployee().addPhoneNumber(type, "", "");
-        }
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * eclipselink.example.jpa.employee.services.EditEmployee#remove(eclipselink
-     * .example.jpa.employee.model.PhoneNumber)
-     */
-    @Override
-    public void remove(PhoneNumber phone) {
-        getEmployee().removePhoneNumber(phone);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see eclipselink.example.jpa.employee.services.EditEmployee#close()
-     */
-    @Override
-    public void close() {
-        getEntityManager().close();
-    }
-
-}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java
index 4982cdb..b70602c 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeCriteria.java
@@ -12,6 +12,7 @@
  ******************************************************************************/
 package eclipselink.example.jpa.employee.services;
 
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -20,7 +21,11 @@
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.Employee_;
-import eclipselink.example.jpa.employee.services.EntityPaging.Type;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging.Type;
+import eclipselink.example.jpa.employee.services.paging.FirstMaxPaging;
+import eclipselink.example.jpa.employee.services.paging.IdInPaging;
+import eclipselink.example.jpa.employee.services.paging.StreamPaging;
 
 /**
  * TODO
@@ -79,6 +84,14 @@
     }
 
     @SuppressWarnings("unchecked")
+    public CriteriaQuery<Employee> createQuery(EntityManager em) {
+        CriteriaBuilder cb = em.getCriteriaBuilder();
+        CriteriaQuery<Employee> query = cb.createQuery(Employee.class);
+        Root<Employee> employee = query.from(Employee.class);
+        return (CriteriaQuery<Employee>) addWhereOrder(cb, query, employee, true);
+    }
+
+    @SuppressWarnings("unchecked")
     public CriteriaQuery<Number> createIdQuery(EntityManagerFactory emf) {
         CriteriaBuilder cb = emf.getCriteriaBuilder();
         CriteriaQuery<Number> query = cb.createQuery(Number.class);
@@ -116,7 +129,7 @@
         return query;
     }
 
-    public EntityPaging<Employee> getPaging(EntityManagerFactory emf) {
+    protected EntityPaging<Employee> getPaging(EntityManagerFactory emf) {
         if (getPagingType() != null) {
             Type type = EntityPaging.Type.valueOf(getPagingType());
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java
new file mode 100644
index 0000000..6aca440
--- /dev/null
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EmployeeRepository.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2013 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
+ * which accompanies this distribution. 
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at 
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *  dclarke - EclipseLink 2.3 - MySports Demo Bug 344608
+ ******************************************************************************/
+package eclipselink.example.jpa.employee.services;
+
+import java.util.List;
+
+import javax.ejb.LocalBean;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+import javax.persistence.PersistenceContext;
+import javax.persistence.criteria.CriteriaQuery;
+
+import eclipselink.example.jpa.employee.model.Address;
+import eclipselink.example.jpa.employee.model.Employee;
+import eclipselink.example.jpa.employee.model.PhoneNumber;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
+
+/**
+ * Edit service for an {@link Employee} instance.
+ * 
+ * @author dclarke
+ * @since EclipseLink 2.4.2
+ */
+@Stateless
+@LocalBean
+public class EmployeeRepository {
+
+    private EntityManager entityManager;
+
+    private Diagnostics diagnostics;
+
+    public EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    @PersistenceContext(unitName = "employee")
+    public void setEntityManager(EntityManager entityManager) {
+        this.entityManager = entityManager;
+        this.diagnostics = Diagnostics.getInstance(entityManager);
+    }
+
+    public Diagnostics getDiagnostics() {
+        return diagnostics;
+    }
+
+    public Employee find(int id) {
+        return getEntityManager().find(Employee.class, id);
+    }
+
+    public Employee save(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+
+        // Ensure the Employee's lock value is incremented
+        getEntityManager().lock(emp, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
+        getEntityManager().flush();
+        return emp;
+    }
+
+    public void delete(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        getEntityManager().remove(emp);
+    }
+
+    public Employee refresh(Employee employee) {
+        Employee emp = employee;
+        if (!getEntityManager().contains(employee)) {
+            emp = getEntityManager().merge(employee);
+        }
+        getEntityManager().refresh(emp);
+        return emp;
+    }
+
+    public int updateVersion(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        getEntityManager().createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + emp.getId()).executeUpdate();
+        Number result = (Number) getEntityManager().createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + emp.getId()).getSingleResult();
+        return result.intValue();
+    }
+
+    public void removeAddress(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        emp.setAddress(null);
+    }
+
+    public Address addAddress(Employee employee) {
+        Employee emp = getEntityManager().merge(employee);
+        emp.setAddress(new Address());
+        return emp.getAddress();
+    }
+
+    public PhoneNumber addPhone(Employee employee, String type) {
+        if (type != null && !type.isEmpty()) {
+            Employee emp = getEntityManager().merge(employee);
+            return emp.addPhoneNumber(type, "", "");
+        }
+        return null;
+    }
+
+    public void remove(Employee employee, PhoneNumber phone) {
+        Employee emp = getEntityManager().merge(employee);
+        PhoneNumber p = getEntityManager().merge(phone);
+        emp.removePhoneNumber(p);
+    }
+
+    public EntityPaging<Employee> getPaging(EmployeeCriteria criteria) {
+        return criteria.getPaging(getEntityManager().getEntityManagerFactory());
+    }
+
+    public List<Employee> getEmployees(EmployeeCriteria criteria) {
+        CriteriaQuery<Employee> cq = criteria.createQuery(getEntityManager());
+        return getEntityManager().createQuery(cq).getResultList();
+    }
+}
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EntityPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/EntityPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EntityPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/EntityPaging.java
index e1737c2..3cd6609 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/EntityPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/EntityPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.List;
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/FirstMaxPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/FirstMaxPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/FirstMaxPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/FirstMaxPaging.java
index 2aac129..db8eae0 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/FirstMaxPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/FirstMaxPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.List;
 
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/IdInPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/IdInPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/IdInPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/IdInPaging.java
index 16df376..31490e6 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/IdInPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/IdInPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/StreamPaging.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/StreamPaging.java
similarity index 97%
rename from jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/StreamPaging.java
rename to jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/StreamPaging.java
index aa0e2de..06accf9 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/StreamPaging.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/services/paging/StreamPaging.java
@@ -10,7 +10,7 @@
  * Contributors:
  *      dclarke - initial 
  ******************************************************************************/
-package eclipselink.example.jpa.employee.services;
+package eclipselink.example.jpa.employee.services.paging;
 
 import java.util.List;
 
diff --git a/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml b/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml
index 2d93a10..8046947 100644
--- a/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml
+++ b/jpa/employee/employee.model/src/main/resources/META-INF/persistence.xml
@@ -1,14 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
-	<persistence-unit name="employee" transaction-type="RESOURCE_LOCAL">
-		<non-jta-data-source>java:global/employeeDS</non-jta-data-source>
-		<class>eclipselink.example.jpa.employee.model.Project</class>
+	<persistence-unit name="employee" transaction-type="JTA">
+		<jta-data-source>java:global/employeeDS</jta-data-source>
 		<class>eclipselink.example.jpa.employee.model.Address</class>
 		<class>eclipselink.example.jpa.employee.model.Employee</class>
 		<class>eclipselink.example.jpa.employee.model.PhoneNumber</class>
 		<class>eclipselink.example.jpa.employee.model.EmploymentPeriod</class>
-		<class>eclipselink.example.jpa.employee.model.LargeProject</class>
-		<class>eclipselink.example.jpa.employee.model.SmallProject</class>
 		<properties>
 			<property name="eclipselink.logging.level" value="FINE"/>
 			<property name="eclipselink.logging.timestamp" value="false"/>
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java
index 303eded..c74b7ae 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/PersistenceTesting.java
@@ -36,7 +36,8 @@
         // SE testing
         props.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, "");
         props.put(PersistenceUnitProperties.JTA_DATASOURCE, "");
-
+        props.put(PersistenceUnitProperties.TRANSACTION_TYPE, "RESOURCE_LOCAL");
+        
         // Configure the use of embedded derby for the tests allowing system
         // properties of the same name to override
         setProperty(props, PersistenceUnitProperties.JDBC_DRIVER, "org.apache.derby.jdbc.EmbeddedDriver");
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java
new file mode 100644
index 0000000..78501f2
--- /dev/null
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/AdminBeanTest.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2013 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
+ * which accompanies this distribution. 
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at 
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *  dclarke - initial
+ ******************************************************************************/
+package eclipselink.example.jpa.employee.test.services;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eclipselink.example.jpa.employee.model.SamplePopulation;
+import eclipselink.example.jpa.employee.services.Diagnostics;
+import eclipselink.example.jpa.employee.services.AdminBean;
+import eclipselink.example.jpa.employee.test.PersistenceTesting;
+
+public class AdminBeanTest {
+
+    private AdminBean admin;
+
+    public AdminBean getAdmin() {
+        return admin;
+    }
+
+    @Test
+    public void verifyReset() {
+        for (String type : getAdmin().getTypes()) {
+            Assert.assertEquals(0, admin.getCacheSize(type));
+            Assert.assertEquals(0, admin.getDatabaseCount(type));
+        }
+    }
+
+    @Test
+    public void popuate() {
+        verifyReset();
+
+        getAdmin().populateDatabase(20);
+
+        Assert.assertEquals(20, admin.getCacheSize("Employee"));
+        Assert.assertEquals(20, admin.getDatabaseCount("Employee"));
+
+        Assert.assertEquals(20, admin.getCacheSize("Address"));
+        Assert.assertEquals(20, admin.getDatabaseCount("Address"));
+
+        Assert.assertEquals(40, admin.getCacheSize("PhoneNumber"));
+        Assert.assertEquals(40, admin.getDatabaseCount("PhoneNumber"));
+    }
+
+    @Test
+    public void verifyTypeNames() {
+        List<String> types = getAdmin().getTypes();
+
+        Assert.assertNotNull(types);
+        Assert.assertEquals(3, types.size());
+
+        Assert.assertTrue(types.contains("Employee"));
+        Assert.assertTrue(types.contains("Address"));
+        Assert.assertTrue(types.contains("PhoneNumber"));
+    }
+
+    private static EntityManagerFactory emf;
+
+    public static EntityManagerFactory getEmf() {
+        return emf;
+    }
+
+    @Before
+    public void resetDatabase() {
+        this.admin = new AdminBean();
+        this.admin.setEmf(getEmf());
+        this.admin.resetDatabase();
+    }
+
+    @BeforeClass
+    public static void createEMF() {
+        emf = PersistenceTesting.createEMF(true);
+
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
+        em.close();
+
+        Diagnostics.getInstance(emf);
+        emf.getCache().evictAll();
+    }
+
+    @AfterClass
+    public static void closeEMF() {
+        if (emf != null && emf.isOpen()) {
+            emf.close();
+        }
+        emf = null;
+    }
+
+}
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java
index 1e01073..351897f 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/DiagnosticsTest.java
@@ -75,7 +75,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
         em.close();
 
         Diagnostics.getInstance(emf);
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java
index 22f9265..62899bd 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/EditEmployeeTest.java
@@ -17,15 +17,16 @@
 import javax.persistence.OptimisticLockException;
 import javax.persistence.RollbackException;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
-import eclipselink.example.jpa.employee.services.EditEmployee;
-import eclipselink.example.jpa.employee.services.EditEmployeeBean;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -38,42 +39,34 @@
 
     @Test
     public void saveWithoutChanges() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        try {
-            edit.save();
-        } finally {
-            edit.close();
-        }
+        Assert.assertNotNull(emp);
+
+        repository.save(emp);
     }
 
     @Test
     public void incrementSalary() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        try {
-            edit.getEmployee().setSalary(edit.getEmployee().getSalary() + 1);
-            edit.save();
-        } finally {
-            edit.close();
-        }
+        emp.setSalary(emp.getSalary() + 1);
+
+        repository.save(emp);
     }
 
     @Test
     public void optimisticLockFailure() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
         try {
-            edit.updateVersion();
-            edit.getEmployee().setSalary(edit.getEmployee().getSalary() + 1);
-            edit.save();
-        } catch (RollbackException e) {
-            if (e.getCause() instanceof OptimisticLockException) {
-                return;
-            }
-            throw e;
-        } finally {
-            edit.close();
+            repository.updateVersion(emp);
+            emp.setSalary(emp.getSalary() + 1);
+            repository.save(emp);
+
+        } catch (OptimisticLockException e) {
+            getRepository().getEntityManager().getTransaction().rollback();
+            return;
         }
 
         Assert.fail("OptimisticLockException not thrown");
@@ -81,16 +74,33 @@
 
     @Test
     public void refreshUpdateAddress() {
-        EditEmployee edit = new EditEmployeeBean(getEmf(), sampleId);
+        Employee emp = this.repository.find(sampleId);
 
-        try {
-            edit.refresh();
-            edit.getEmployee().getAddress().setCity("Ottawa");
-            edit.save();
-        } finally {
-            edit.close();
+        emp = repository.refresh(emp);
+        emp.getAddress().setCity("Ottawa");
+        repository.save(emp);
+
+    }
+
+    private EmployeeRepository repository;
+
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+
+    @After
+    public void close() {
+        if (this.repository.getEntityManager().getTransaction().isActive()) {
+            this.repository.getEntityManager().getTransaction().commit();
         }
+        this.repository.getEntityManager().close();
+    }
 
+    public EmployeeRepository getRepository() {
+        return repository;
     }
 
     private static EntityManagerFactory emf;
@@ -111,7 +121,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 1);
+        em.getTransaction().commit();
 
         sampleId = em.createQuery("SELECT e.id FROM Employee e", Integer.class).getSingleResult();
         em.close();
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java
index d308860..a1becc9 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageEmployeesTest.java
@@ -17,17 +17,20 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
 import eclipselink.example.jpa.employee.services.Diagnostics;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -40,10 +43,8 @@
 
     @Test
     public void page5ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -51,11 +52,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
         
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -73,15 +75,12 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page5ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -89,11 +88,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -111,15 +111,12 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -127,11 +124,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -150,15 +148,12 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -166,11 +161,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -189,7 +185,6 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     private static EntityManagerFactory emf;
@@ -203,7 +198,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
         em.close();
 
         emf.getCache().evictAll();
@@ -217,4 +214,27 @@
         emf = null;
     }
 
+    private EmployeeRepository repository;
+    
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+    
+    @After
+    public void close() {
+        this.repository.getEntityManager().getTransaction().commit();
+        this.repository.getEntityManager().close();
+    }
+
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+    
+    public Diagnostics getDiagnostics() {
+        return getRepository().getDiagnostics();
+    }
+
 }
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java
index 5f7a6a5..5d3c448 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/PageIdsInEmployeesTest.java
@@ -17,8 +17,10 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -27,7 +29,8 @@
 import eclipselink.example.jpa.employee.services.Diagnostics;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -40,10 +43,8 @@
 
     @Test
     public void page5ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
 
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -51,11 +52,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -73,15 +75,11 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page5ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -89,11 +87,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -111,15 +109,11 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByIndex() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -127,11 +121,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -150,15 +145,11 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     @Test
     public void page10ByNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -166,11 +157,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.PAGE_IN.name());
-        EntityPaging<Employee> paging = criteria.getPaging(getEmf());
+        EntityPaging<Employee> paging = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, paging.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -189,7 +180,6 @@
 
         Assert.assertFalse(paging.hasNext());
 
-        em.close();
     }
 
     private static EntityManagerFactory emf;
@@ -203,7 +193,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
+        em.getTransaction().commit();
         em.close();
 
         emf.getCache().evictAll();
@@ -217,4 +209,27 @@
         emf = null;
     }
 
+    private EmployeeRepository repository;
+
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+
+    @After
+    public void close() {
+        this.repository.getEntityManager().getTransaction().commit();
+        this.repository.getEntityManager().close();
+    }
+
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    public Diagnostics getDiagnostics() {
+        return getRepository().getDiagnostics();
+    }
+
 }
diff --git a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java
index 51ad195..0b36c6e 100644
--- a/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java
+++ b/jpa/employee/employee.model/src/test/java/eclipselink/example/jpa/employee/test/services/StreamEmployeesTest.java
@@ -18,8 +18,10 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -28,7 +30,8 @@
 import eclipselink.example.jpa.employee.services.Diagnostics;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -41,10 +44,7 @@
 
     @Test
     public void streamAllNext() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -52,11 +52,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -87,19 +87,14 @@
             stream.next();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on next()");
     }
 
     @Test
     public void streamAllNext10() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -107,11 +102,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(10);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -146,19 +141,14 @@
             stream.next();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on next()");
     }
 
     @Test
     public void streamAllPrevious() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -166,11 +156,11 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -224,19 +214,14 @@
             stream.previous();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on previous()");
     }
 
     @Test
     public void streamAllPreviousGet() {
-        EntityManager em = getEmf().createEntityManager();
-        Diagnostics diagnostics = Diagnostics.getInstance(getEmf());
-
-        SQLTrace start = diagnostics.start();
+        SQLTrace start = getDiagnostics().start();
         Assert.assertTrue(start.getEntries().isEmpty());
 
         EmployeeCriteria criteria = new EmployeeCriteria();
@@ -244,11 +229,12 @@
         criteria.setLastName(null);
         criteria.setPageSize(5);
         criteria.setPagingType(EntityPaging.Type.CURSOR.name());
-        EntityPaging<Employee> stream = criteria.getPaging(getEmf());
+        
+        EntityPaging<Employee> stream = getRepository().getPaging(criteria);
 
         Assert.assertEquals(25, stream.size());
 
-        SQLTrace end = diagnostics.stop();
+        SQLTrace end = getDiagnostics().stop();
 
         Assert.assertNotNull(end);
         Assert.assertSame(start, end);
@@ -302,9 +288,7 @@
             stream.previous();
         } catch (IllegalStateException e) {
             return;
-        } finally {
-            em.close();
-        }
+        } 
 
         Assert.fail("IllegalStateException not thrown on previous()");
     }
@@ -320,11 +304,9 @@
         emf = PersistenceTesting.createEMF(true);
 
         EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
         new SamplePopulation().createNewEmployees(em, 25);
-
-        Number count = em.createNamedQuery("Employee.count", Number.class).getSingleResult();
-        Assert.assertEquals(25, count.intValue());
-
+        em.getTransaction().commit();
         em.close();
 
         emf.getCache().evictAll();
@@ -338,4 +320,27 @@
         emf = null;
     }
 
+    private EmployeeRepository repository;
+    
+    @Before
+    public void setup() {
+        this.repository = new EmployeeRepository();
+        this.repository.setEntityManager(getEmf().createEntityManager());
+        this.repository.getEntityManager().getTransaction().begin();
+    }
+    
+    @After
+    public void close() {
+        this.repository.getEntityManager().getTransaction().commit();
+        this.repository.getEntityManager().close();
+    }
+
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+    
+    public Diagnostics getDiagnostics() {
+        return getRepository().getDiagnostics();
+    }
+
 }
diff --git a/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java b/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java
index b715358..dca4972 100644
--- a/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java
+++ b/jpa/employee/employee.model/src/test/java/example/JavaSEExample.java
@@ -20,8 +20,6 @@
 
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.SamplePopulation;
-import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
 import eclipselink.example.jpa.employee.test.PersistenceTesting;
 
 /**
@@ -42,7 +40,9 @@
         try {
             EntityManager em = emf.createEntityManager();
 
+            em.getTransaction().begin();
             new SamplePopulation().createNewEmployees(em, 10);
+            em.getTransaction().commit();
             em.clear();
 
             example.queryAllEmployees(em);
@@ -57,8 +57,6 @@
             example.deleteEmployee(em, 1);
             em.clear();
 
-            example.pagingIdIn(emf);
-
             em.close();
 
         } finally {
@@ -112,16 +110,4 @@
 
     }
 
-    public void pagingIdIn(EntityManagerFactory emf) {
-        EmployeeCriteria criteria = new EmployeeCriteria();
-        criteria.setFirstName(null);
-        criteria.setLastName(null);
-        criteria.setPagingType(EntityPaging.Type.PAGE.name());
-
-        EntityPaging<Employee> paging = criteria.getPaging(emf);
-
-        paging.get(1);
-        paging.get(2);
-    }
-
 }
diff --git a/jpa/employee/employee.web/README.md b/jpa/employee/employee.web/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/jpa/employee/employee.web/README.md
diff --git a/jpa/employee/employee.web/pom.xml b/jpa/employee/employee.web/pom.xml
index 74c1cba..8dab3e2 100644
--- a/jpa/employee/employee.web/pom.xml
+++ b/jpa/employee/employee.web/pom.xml
@@ -14,26 +14,8 @@
 	<name>Employee Web App</name>
 
 	<dependencies>
-		<dependency>
-			<groupId>${eclipselink.groupid}</groupId>
-			<artifactId>${eclipselink.artifactid}</artifactId>
-			<version>${eclipselink.version}</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>commonj.sdo</artifactId>
-					<groupId>commonj.sdo</groupId>
-				</exclusion>
-			</exclusions>
-			<scope>provided</scope>
-		</dependency>
 
 		<!-- EclipseLink JPA-RS Web Fragment -->
-		<dependency>
-			<groupId>${eclipselink.groupid}</groupId>
-			<artifactId>org.eclipse.persistence.jpars</artifactId>
-			<version>${eclipselink.version}</version>
-			<scope>provided</scope>
-		</dependency>
 
 		<dependency>
 			<groupId>junit</groupId>
@@ -42,12 +24,6 @@
 			<scope>test</scope>
 		</dependency>
 
-		<dependency>
-			<groupId>org.apache.derby</groupId>
-			<artifactId>derby</artifactId>
-			<version>10.9.1.0</version>
-			<scope>test</scope>
-		</dependency>
 
 		<dependency>
 			<groupId>eclipselink.example.jpa</groupId>
@@ -55,12 +31,6 @@
 			<version>2.4.2-SNAPSHOT</version>
 		</dependency>
 
-		<dependency>
-			<groupId>javax</groupId>
-			<artifactId>javaee-api</artifactId>
-			<version>6.0</version>
-			<scope>provided</scope>
-		</dependency>
 <!-- 
 		<dependency>
 			<groupId>com.sun.jersey.jersey-test-framework</groupId>
@@ -69,6 +39,24 @@
 			<scope>test</scope>
 		</dependency>
  -->
+		<dependency>
+			<groupId>javax.faces</groupId>
+			<artifactId>javax.faces-api</artifactId>
+			<version>2.1</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.glassfish</groupId>
+			<artifactId>javax.ejb</artifactId>
+			<version>3.1.1</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>javax.persistence</artifactId>
+			<version>2.0.0</version>
+			<scope>provided</scope>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java
index 413d449..6267a30 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Admin.java
@@ -12,16 +12,13 @@
  ******************************************************************************/
 package eclipselink.example.jpa.employee.web;
 
+import java.util.List;
+
+import javax.ejb.EJB;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
 
-import org.eclipse.persistence.sessions.server.Server;
-import org.eclipse.persistence.tools.schemaframework.SchemaManager;
-
-import eclipselink.example.jpa.employee.model.SamplePopulation;
+import eclipselink.example.jpa.employee.services.AdminBean;
 
 /**
  * TODO
@@ -33,41 +30,58 @@
 @RequestScoped
 public class Admin {
 
-    private EntityManagerFactory emf;
+    private AdminBean adminBean;
 
-    public EntityManagerFactory getEmf() {
-        return emf;
+    private List<String> typeNames;
+
+    private boolean displaySql = false;
+
+    public AdminBean getAdminBean() {
+        return adminBean;
     }
 
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
+    @EJB
+    public void setAdminBean(AdminBean adminBean) {
+        this.adminBean = adminBean;
     }
 
     public String resetDatabase() {
-        EntityManager em = getEmf().createEntityManager();
-
-        try {
-            SchemaManager sm = new SchemaManager(em.unwrap(Server.class));
-            sm.replaceDefaultTables();
-            sm.replaceSequences();
-
-            em.unwrap(Server.class).getIdentityMapAccessor().initializeAllIdentityMaps();
-        } finally {
-            em.close();
-        }
-        return null;
+        return getAdminBean().resetDatabase();
     }
 
     public String populateDatabase() {
-        EntityManager em = getEmf().createEntityManager();
+        return getAdminBean().populateDatabase(25);
+    }
 
-        try {
-            new SamplePopulation().createNewEmployees(em, 25);
-        } finally {
-            em.close();
+    public List<String> getTypeNames() {
+        if (this.typeNames == null) {
+            this.typeNames = getAdminBean().getTypes();
         }
-        return null;
+        return typeNames;
+    }
+
+    public boolean isDisplaySql() {
+        return displaySql;
+    }
+
+    public void setDisplaySql(boolean displaySql) {
+        this.displaySql = displaySql;
+    }
+
+    public void toggleSqlDisplay() {
+        this.displaySql = !this.displaySql;
+    }
+
+    public String getToggleSqlDisplayButton() {
+        return isDisplaySql() ? "Disable SQL Display" : "Enable SQL Display";
+    }
+
+    public String getCacheSize(String typeName) {
+        int size = getAdminBean().getCacheSize(typeName);
+        if (size < 0) {
+            return "Error";
+        }
+        return Integer.toString(size);
     }
 
 }
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/BaseBean.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/BaseBean.java
deleted file mode 100644
index c94032f..0000000
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/BaseBean.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2013 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - initial
- ******************************************************************************/
-package eclipselink.example.jpa.employee.web;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.eclipse.persistence.logging.SessionLogEntry;
-
-import eclipselink.example.jpa.employee.services.Diagnostics;
-import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
-
-/**
- * Return list of available Leagues from JAX-RS call to MySports Admin app.
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-public abstract class BaseBean {
-
-    private EntityManagerFactory emf;
-
-    private Diagnostics diagnostics;
-    
-    public EntityManagerFactory getEmf() {
-        return emf;
-    }
-
-    protected void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-        this.diagnostics = Diagnostics.getInstance(emf);
-    }
-    
-    protected EntityManager createEntityManager() {
-        EntityManager em = getEmf().createEntityManager();
-        startSqlCapture();
-        return em;
-    }
-    
-    protected void close(EntityManager em) {
-        if (em.getTransaction().isActive()) {
-            em.getTransaction().rollback();
-        }
-        em.close();
-        stopSqlCapture();
-    }
-
-    protected void startSqlCapture() {
-        this.diagnostics.start();
-    }
-
-    protected void stopSqlCapture() {
-        addMessages(this.diagnostics.stop());
-    }
-
-    /**
-     * Add each SQL string to the messages TODO: Allow this to be
-     * enabled/disabled
-     */
-    private void addMessages(SQLTrace sqlTrace) {
-        for (SessionLogEntry entry : sqlTrace.getEntries()) {
-            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry.getMessage()));
-        }
-    }
-
-}
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Config.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Config.java
deleted file mode 100644
index b5b230a..0000000
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/Config.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010-2013 Oracle. All rights reserved.
- * This program and the accompanying materials are made available under the 
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
- * which accompanies this distribution. 
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at 
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *  dclarke - initial
- ******************************************************************************/
-package eclipselink.example.jpa.employee.web;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
-
-import org.eclipse.persistence.descriptors.ClassDescriptor;
-import org.eclipse.persistence.internal.sessions.IdentityMapAccessor;
-import org.eclipse.persistence.sessions.server.Server;
-
-/**
- * TODO
- * 
- * @author dclarke
- * @since EclipseLink 2.4.2
- */
-@ManagedBean
-@SessionScoped
-public class Config {
-
-    private List<String> typeNames;
-
-    private boolean displaySql = false;
-
-    public Config() {
-        this.typeNames = new ArrayList<String>();
-        this.typeNames.add("Employee");
-        this.typeNames.add("Address");
-        this.typeNames.add("PhoneNumber");
-        this.typeNames.add("Project");
-    }
-
-    private EntityManagerFactory emf;
-
-    public EntityManagerFactory getEmf() {
-        return emf;
-    }
-
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-    }
-
-    public List<String> getTypeNames() {
-        return typeNames;
-    }
-
-    public boolean isDisplaySql() {
-        return displaySql;
-    }
-
-    public void setDisplaySql(boolean displaySql) {
-        this.displaySql = displaySql;
-    }
-
-    public void toggleSqlDisplay() {
-        this.displaySql = !this.displaySql;
-    }
-
-    public String getToggleSqlDisplayButton() {
-        return isDisplaySql() ? "Disable SQL Display" : "Enable SQL Display";
-    }
-
-    public String getCacheSize(String typeName) {
-        System.out.println("Config.getCacheSize('" + typeName + "')");
-        EntityManager em = getEmf().createEntityManager();
-        Server session = em.unwrap(Server.class);
-        ClassDescriptor descriptor = session.getDescriptorForAlias(typeName);
-        if (descriptor != null) {
-            int size = ((IdentityMapAccessor) session.getIdentityMapAccessor()).getIdentityMap(descriptor.getJavaClass()).getSize();
-            return Integer.toString(size);
-        } else {
-            return "N/A";
-        }
-    }
-}
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java
index 9976fb0..fdb6ba3 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployee.java
@@ -13,21 +13,20 @@
 package eclipselink.example.jpa.employee.web;
 
 import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
 import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.LockModeType;
 import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceUnit;
 import javax.persistence.RollbackException;
 
 import eclipselink.example.jpa.employee.model.Address;
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.PhoneNumber;
+import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 
 /**
  * Backing bean to edit or create an {@link Employee}.
@@ -37,20 +36,28 @@
  */
 @ManagedBean
 @ViewScoped
-public class EditEmployee extends BaseBean {
+public class EditEmployee {
 
     private Employee employee;
 
-    /**
-     * TODO
-     */
     private String type;
 
     boolean create = false;
 
+    private EmployeeRepository repository;
+
     protected static final String PAGE = "/employee/edit";
     protected static final String PAGE_REDIRECT = "/employee/edit?faces-redirect=true";
 
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    @EJB
+    public void setRepository(EmployeeRepository repository) {
+        this.repository = repository;
+    }
+
     @PostConstruct
     private void init() {
         Flash flashScope = FacesContext.getCurrentInstance().getExternalContext().getFlash();
@@ -65,7 +72,7 @@
     }
 
     public Employee getEmployee() {
-        return employee;
+        return this.employee;
     }
 
     public String getEmployeeId() {
@@ -87,72 +94,31 @@
         return  getEmployee() != null && getEmployee().getId() <= 0;
     }
 
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        super.setEmf(emf);
-    }
-
     /**
      * 
      * @return
      */
     public String save() {
-        EntityManager em = createEntityManager();
-
         try {
-            em.getTransaction().begin();
-            if (getEmployee().getAddress() != null) {
-               // em.merge(getEmployee().getAddress());
-            }
-            this.employee = em.merge(getEmployee());
-            // Ensure the Employee's lock value is incremented
-            em.lock(this.employee, LockModeType.OPTIMISTIC_FORCE_INCREMENT);
-            
-            em.getTransaction().commit();
-            if (isCreate()) {
-                em.refresh(getEmployee());
-            }
+            this.employee = getRepository().save(getEmployee());
         } catch (RollbackException e) {
             if (e.getCause() instanceof OptimisticLockException) {
                 FacesContext.getCurrentInstance().addMessage("OptimisticLockException", new FacesMessage("Commit Failed: Optimistic Lock Exception."));
             } else {
                 throw e;
             }
-        } finally {
-            close(em);
         }
         return null;
     }
     
     public String delete() {
-        EntityManager em = createEntityManager();
-        try {
-            this.employee = em.find(Employee.class, getEmployee().getId());
-            // TODO: Handle find failure
-            em.getTransaction().begin();
-            em.remove(getEmployee());
-            em.getTransaction().commit();
-
-        } finally {
-            close(em);
-            this.employee = null;
-        }
-        return cancel();
+        getRepository().delete(getEmployee());
+        return null;
     }
 
 
     public String refresh() {
-        EntityManager em = createEntityManager();
-
-        try {
-            this.employee = em.find(Employee.class, getEmployee().getId());
-            em.refresh(getEmployee());
-            getEmployee().getAddress();
-            getEmployee().getPhoneNumbers().size();
-            em.detach(employee);
-        } finally {
-            close(em);
-        }
+        this.employee = getRepository().refresh(getEmployee());
         return null;
     }
 
@@ -165,19 +131,7 @@
      * operations will fail.
      */
     public String updateVersion() {
-        EntityManager em = createEntityManager();
-        int newVersion = -1;
-
-        try {
-            em.getTransaction().begin();
-            em.createNativeQuery("UPDATE EMPLOYEE SET VERSION = VERSION + 1 WHERE EMP_ID = " + getEmployee().getId()).executeUpdate();
-            em.getTransaction().commit();
-
-            Number result = (Number) em.createNativeQuery("SELECT VERSION FROM EMPLOYEE WHERE EMP_ID = " + getEmployee().getId()).getSingleResult();
-            newVersion = result.intValue();
-        } finally {
-            close(em);
-        }
+       int newVersion = getRepository().updateVersion(getEmployee());
 
         FacesContext.getCurrentInstance().addMessage("Update version", new FacesMessage("DATABASE EMPLOYEE ID: " + getEmployee().getId() + " VERSION= " + newVersion));
 
@@ -208,5 +162,20 @@
         getEmployee().removePhoneNumber(phone);
         return null;
     }
+    
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
+    }
+
+    /**
+     * Add each SQL string to the messages TODO: Allow this to be
+     * enabled/disabled
+     */
+    private void addMessages(SQLTrace sqlTrace) {
+        for (String entry : sqlTrace.getEntries()) {
+            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry));
+        }
+    }
+
 
 }
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java
index a41e814..ea47358 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EditEmployeeView.java
@@ -13,26 +13,20 @@
 package eclipselink.example.jpa.employee.web;
 
 import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
+import javax.ejb.EJB;
 import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
-import javax.persistence.EntityManagerFactory;
 import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceUnit;
-import javax.persistence.RollbackException;
-
-import org.eclipse.persistence.logging.SessionLogEntry;
 
 import eclipselink.example.jpa.employee.model.Address;
 import eclipselink.example.jpa.employee.model.Employee;
 import eclipselink.example.jpa.employee.model.PhoneNumber;
 import eclipselink.example.jpa.employee.services.Diagnostics;
 import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
-import eclipselink.example.jpa.employee.services.EditEmployee;
-import eclipselink.example.jpa.employee.services.EditEmployeeBean;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
 
 /**
  * Backing bean to edit or create an {@link Employee}.
@@ -44,17 +38,15 @@
 @ViewScoped
 public class EditEmployeeView {
 
-    private EditEmployee edit;
+    private EmployeeRepository repository;
+
+    private Employee employee;
 
     /**
      * Value used to create new unique {@link PhoneNumber}
      */
     private String type;
 
-    private EntityManagerFactory emf;
-
-    private Diagnostics diagnostics;
-
     protected static final String PAGE = "/employee/edit";
     protected static final String PAGE_REDIRECT = "/employee/edit?faces-redirect=true";
 
@@ -65,18 +57,23 @@
         setEmployee(id);
     }
 
-    public EditEmployee getEdit() {
-        return edit;
+    @EJB
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    public void setRepository(EmployeeRepository repository) {
+        this.repository = repository;
     }
 
     public Employee getEmployee() {
-        return getEdit().getEmployee();
+        return this.employee;
     }
 
     public void setEmployee(int id) {
         getDiagnostics().start();
-        this.edit = new EditEmployeeBean(getEmf(), id);
-        addMessages(getDiagnostics().stop());
+        this.employee = getRepository().find(id);
+
     }
 
     public String getEmployeeId() {
@@ -95,21 +92,11 @@
     }
 
     public boolean isCreate() {
-        return getEdit().isNew();
-    }
-
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        this.emf = emf;
-        this.diagnostics = Diagnostics.getInstance(emf);
-    }
-
-    public EntityManagerFactory getEmf() {
-        return emf;
+        return getEmployee() != null && getEmployee().getId() <= 0;
     }
 
     public Diagnostics getDiagnostics() {
-        return diagnostics;
+        return getRepository().getDiagnostics();
     }
 
     /**
@@ -119,30 +106,26 @@
     public String save() {
         try {
             getDiagnostics().start();
-            getEdit().save();
-        } catch (RollbackException e) {
-            if (e.getCause() instanceof OptimisticLockException) {
-                FacesContext.getCurrentInstance().addMessage("EclipseLink", new FacesMessage("OptimisticLockException: Could not save changes"));
-            } else {
-                throw e;
-            }
+            getRepository().save(getEmployee());
+        } catch (OptimisticLockException e) {
+            FacesContext.getCurrentInstance().addMessage("EclipseLink", new FacesMessage("OptimisticLockException: Could not save changes"));
         } finally {
-            addMessages(getDiagnostics().stop());
+            stopSqlCapture();
         }
         return null;
     }
 
     public String delete() {
         getDiagnostics().start();
-        getEdit().delete();
-        addMessages(getDiagnostics().stop());
+        getRepository().delete(getEmployee());
+        stopSqlCapture();
         return cancel();
     }
 
     public String refresh() {
         getDiagnostics().start();
-        getEdit().refresh();
-        addMessages(getDiagnostics().stop());
+        this.employee = getRepository().refresh(getEmployee());
+        stopSqlCapture();
         return null;
     }
 
@@ -156,8 +139,8 @@
      */
     public String updateVersion() {
         getDiagnostics().start();
-        getEdit().updateVersion();
-        addMessages(getDiagnostics().stop());
+        getRepository().updateVersion(getEmployee());
+        stopSqlCapture();
         return null;
     }
 
@@ -176,7 +159,7 @@
     }
 
     public String addPhone() {
-        PhoneNumber newPhone = getEdit().addPhone(getType());
+        PhoneNumber newPhone = getRepository().addPhone(getEmployee(), getType());
         if (newPhone == null) {
             FacesContext.getCurrentInstance().addMessage("input", new FacesMessage("Invalid type. Phone number could not be added"));
         }
@@ -189,18 +172,13 @@
         return null;
     }
 
-    @PreDestroy
-    public void destroy() {
-        getEdit().close();
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
     }
 
-    /**
-     * Add each SQL string to the messages TODO: Allow this to be
-     * enabled/disabled
-     */
     private void addMessages(SQLTrace sqlTrace) {
-        for (SessionLogEntry entry : sqlTrace.getEntries()) {
-            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry.getMessage()));
+        for (String entry : sqlTrace.getEntries()) {
+            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry));
         }
     }
 
diff --git a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java
index b614d2b..ccd39c4 100644
--- a/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java
+++ b/jpa/employee/employee.web/src/main/java/eclipselink/example/jpa/employee/web/EmployeeResults.java
@@ -15,18 +15,18 @@
 import java.util.List;
 
 import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
+import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 import javax.faces.context.Flash;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceUnit;
-import javax.persistence.criteria.CriteriaQuery;
 
 import eclipselink.example.jpa.employee.model.Employee;
+import eclipselink.example.jpa.employee.services.Diagnostics.SQLTrace;
 import eclipselink.example.jpa.employee.services.EmployeeCriteria;
-import eclipselink.example.jpa.employee.services.EntityPaging;
+import eclipselink.example.jpa.employee.services.EmployeeRepository;
+import eclipselink.example.jpa.employee.services.paging.EntityPaging;
 
 /**
  * Backing bean to manage search results for an Employee query. The results can
@@ -37,10 +37,12 @@
  */
 @ManagedBean
 @ViewScoped
-public class EmployeeResults extends BaseBean {
+public class EmployeeResults {
 
     protected static final String PAGE = "/employee/results?faces-redirect=true";
 
+    private EmployeeRepository repository;
+
     /**
      * Current employees being shown
      */
@@ -50,9 +52,13 @@
 
     private int currentPage = 1;
 
-    @PersistenceUnit(unitName = "employee")
-    public void setEmf(EntityManagerFactory emf) {
-        super.setEmf(emf);
+    public EmployeeRepository getRepository() {
+        return repository;
+    }
+
+    @EJB
+    public void setRepository(EmployeeRepository repository) {
+        this.repository = repository;
     }
 
     public EntityPaging<Employee> getPaging() {
@@ -67,25 +73,19 @@
         this.currentPage = 1;
         this.employees = null;
 
-        this.paging = criteria.getPaging(getEmf());
+        this.paging = getRepository().getPaging(criteria);
 
         if (!hasPaging()) {
-            EntityManager em = createEntityManager();
-            try {
-                startSqlCapture();
-                CriteriaQuery<Employee> cq = criteria.createQuery(getEmf());
-                this.employees = em.createQuery(cq).getResultList();
-            } finally {
-                close(em);
-            }
+            getRepository().getDiagnostics().start();
+            this.employees = getRepository().getEmployees(criteria);
         }
     }
 
     public List<Employee> getEmployees() {
         if (this.employees == null && hasPaging()) {
-            startSqlCapture();
+            getRepository().getDiagnostics().start();
             this.employees = getPaging().get(this.currentPage);
-            this.stopSqlCapture();
+            stopSqlCapture();
         }
         return this.employees;
     }
@@ -142,5 +142,20 @@
 
         return EditEmployee.PAGE;
     }
+    
+    protected void stopSqlCapture() {
+        addMessages(getRepository().getDiagnostics().stop());
+    }
+
+    /**
+     * Add each SQL string to the messages TODO: Allow this to be
+     * enabled/disabled
+     */
+    private void addMessages(SQLTrace sqlTrace) {
+        for (String entry : sqlTrace.getEntries()) {
+            FacesContext.getCurrentInstance().addMessage("SQL", new FacesMessage(entry));
+        }
+    }
+
 
 }
diff --git a/jpa/employee/employee.web/src/main/webapp/WEB-INF/lib/org.eclipse.persistence.jpars-2.4.2-SNAPSHOT.jar b/jpa/employee/employee.web/src/main/webapp/WEB-INF/lib/org.eclipse.persistence.jpars-2.4.2-SNAPSHOT.jar
deleted file mode 100644
index 66a062d..0000000
--- a/jpa/employee/employee.web/src/main/webapp/WEB-INF/lib/org.eclipse.persistence.jpars-2.4.2-SNAPSHOT.jar
+++ /dev/null
Binary files differ
diff --git a/jpa/employee/employee.web/src/main/webapp/admin.xhtml b/jpa/employee/employee.web/src/main/webapp/admin.xhtml
index aff04c9..d4b226a 100644
--- a/jpa/employee/employee.web/src/main/webapp/admin.xhtml
+++ b/jpa/employee/employee.web/src/main/webapp/admin.xhtml
@@ -21,15 +21,15 @@
 					action="#{admin.populateDatabase}" class="menu-button"
 					style="width: 400" />
 				<p />
-				<h:commandButton value="#{config.toggleSqlDisplayButton}"
-					action="#{config.toggleSqlDisplay}" class="menu-button"
+				<h:commandButton value="#{admin.toggleSqlDisplayButton}"
+					action="#{admin.toggleSqlDisplay}" class="menu-button"
 					style="width: 400" />
 				<p />
 			</div>
 		</h:form>
 		<h2>Entity Status</h2>
 		<h:form>
-			<h:dataTable var="type" value="#{config.typeNames}"
+			<h:dataTable var="type" value="#{admin.typeNames}"
 				class="table-design" width="500">
 				<h:column>
 					<f:facet name="header">Type</f:facet>
@@ -40,7 +40,7 @@
 						<div align="center">Cache Size</div>
 					</f:facet>
 					<div align="center">
-						<h:outputLabel value="#{config.getCacheSize(type)}" />
+						<h:outputLabel value="#{admin.getCacheSize(type)}" />
 					</div>
 				</h:column>
 			</h:dataTable>
diff --git a/jpa/employee/employee.web/src/test/java/tests/MainTest.java b/jpa/employee/employee.web/src/test/java/tests/MainTest.java
deleted file mode 100644
index cf6540d..0000000
--- a/jpa/employee/employee.web/src/test/java/tests/MainTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package tests;
-import org.junit.Test;
-
-public class MainTest  {
-
-    public MainTest()throws Exception {
-        //super("org.eclipse.persistence.jpa.rs.service");
-    }
-
-    @Test
-    public void testHelloWorld() {
-        /**
-        WebResource webResource = resource();
-        String responseMsg = webResource.path("persistence").get(String.class);
-        assertEquals("Hello World", responseMsg);
-        */
-    }
-
-}
\ No newline at end of file
diff --git a/jpa/employee/pom.xml b/jpa/employee/pom.xml
index 1580b6d..557f286 100644
--- a/jpa/employee/pom.xml
+++ b/jpa/employee/pom.xml
@@ -49,15 +49,11 @@
 	</properties>
 
 	<repositories>
-		<repository>
-			<id>Java.Net</id>
-			<url>http://download.java.net/maven/2/</url>
-		</repository>
-		<repository>
-			<id>EclipseLink</id>
-			<url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
-		</repository>
-	</repositories>
+        <repository>
+            <id>oss.sonatype.org</id>
+            <name>OSS Sonatype Staging</name>
+            <url>https://oss.sonatype.org/content/groups/staging</url>
+        </repository>	</repositories>
 	
 	<modules>
         <module>employee.model</module>