| /* |
| * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation from Oracle TopLink |
| package org.eclipse.persistence.testing.tests.performance.writing; |
| |
| import org.eclipse.persistence.expressions.*; |
| import org.eclipse.persistence.sessions.*; |
| import org.eclipse.persistence.testing.models.performance.toplink.*; |
| import org.eclipse.persistence.testing.tests.performance.PerformanceTest; |
| |
| /** |
| * This tests the performance of unit of work updates. |
| * Its purpose is to compare the test result with previous release/label results. |
| * It also provides a useful test for profiling performance. |
| */ |
| public class ComplexUpdateEmployeeUnitOfWorkTest extends PerformanceTest { |
| protected Employee employee; |
| protected Employee manager; |
| protected PhoneNumber phone; |
| protected boolean promotion = true; |
| |
| public ComplexUpdateEmployeeUnitOfWorkTest() { |
| setDescription("This tests the performance of unit of work updates."); |
| } |
| |
| /** |
| * Find an employee with a manager. |
| */ |
| @Override |
| public void setup() { |
| super.setup(); |
| allObjects = getSession().readAllObjects(Employee.class); |
| Expression expression = new ExpressionBuilder().get("firstName").equal("Bob"); |
| employee = (Employee)getSession().readObject(Employee.class, expression); |
| manager = (Employee)employee.getManager(); |
| promotion = true; |
| } |
| |
| /** |
| * Read employee and clear the cache, test database read. |
| * Tries to keep the test data the same by cycling the employee manager relationship. |
| */ |
| @Override |
| public void test() throws Exception { |
| super.test(); |
| UnitOfWork uow = getSession().acquireUnitOfWork(); |
| Employee employee = (Employee)uow.readObject(this.employee); |
| if (promotion) { |
| Employee manager = (Employee)employee.getManager(); |
| employee.setManager(manager.getManager()); |
| employee.addManagedEmployee(manager); |
| employee.getAddress().setCity("Toronto"); |
| this.phone = new PhoneNumber(); |
| phone.setType("Cellphone"); |
| phone.setAreaCode("416"); |
| phone.setNumber("7921771"); |
| employee.addPhoneNumber(phone); |
| employee.setSalary(employee.getSalary() + 100); |
| } else { |
| Employee manager = (Employee)uow.readObject(this.manager); |
| employee.removeManagedEmployee(manager); |
| employee.setManager(manager); |
| employee.getAddress().setCity("Ottawa"); |
| PhoneNumber phone = (PhoneNumber)uow.readObject(this.phone); |
| employee.removePhoneNumber(phone); |
| employee.setSalary(employee.getSalary() - 100); |
| } |
| uow.commit(); |
| promotion = !promotion; |
| } |
| |
| /** |
| * Ensure that the employee is reset to original state. |
| */ |
| @Override |
| public void reset() { |
| UnitOfWork uow = getSession().acquireUnitOfWork(); |
| Employee employee = (Employee)uow.readObject(this.employee); |
| if (!promotion) { |
| Employee manager = (Employee)uow.readObject(this.manager); |
| employee.removeManagedEmployee(manager); |
| employee.setManager(manager); |
| employee.getAddress().setCity("Ottawa"); |
| PhoneNumber phone = (PhoneNumber)uow.readObject(this.phone); |
| employee.removePhoneNumber(phone); |
| employee.setSalary(employee.getSalary() - 100); |
| } |
| uow.commit(); |
| promotion = true; |
| } |
| } |