blob: 5a4349b8ec142fb0722305d6c73ec64251a95352 [file] [log] [blame]
/*
* 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.sessionbroker;
import org.eclipse.persistence.expressions.Expression;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.sessions.broker.SessionBroker;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.eclipse.persistence.testing.models.employee.domain.Address;
import org.eclipse.persistence.testing.models.employee.domain.Employee;
import org.eclipse.persistence.testing.models.employee.domain.PhoneNumber;
import org.eclipse.persistence.testing.models.employee.domain.SmallProject;
public class Client extends Thread {
protected Server server;
protected SessionBroker cSessionBroker;
protected Session session;
protected Object originalObject;
protected UnitOfWork unitOfWork;
protected Object objectToBeWritten;
protected Expression expression;
public Client(Server server, String employeeLastName, Session session) {
super(employeeLastName);
this.server = server;
this.session = session;
this.cSessionBroker = server.sSessionBroker.acquireClientSessionBroker();
this.expression = new ExpressionBuilder().get("lastName").equal(employeeLastName);
}
protected void changeObject() {
int num = (int)(Math.random() * 5) + 1;
Employee e = (Employee)objectToBeWritten;
if (num == 1) {
e.setSalary(e.getSalary() * 2);
}
if (num == 2) {
Address a = new org.eclipse.persistence.testing.models.employee.domain.Address();
a.setCity("Ottawa city");
e.setAddress(a);
}
if (num == 3) {
PhoneNumber p = new org.eclipse.persistence.testing.models.employee.domain.PhoneNumber();
p.setNumber("1234");
p.setType("SHOE");
e.addPhoneNumber(p);
}
if (num == 4) {
SmallProject s = new org.eclipse.persistence.testing.models.employee.domain.SmallProject();
s.setName("project for me");
e.addProject(s);
}
if (num == 5) {
e.setFirstName(e.getFirstName() + "1");
}
}
public void release() {
this.cSessionBroker.release();
}
@Override
public void run() {
try {
this.originalObject = this.cSessionBroker.readObject(Employee.class, this.expression);
this.unitOfWork = this.cSessionBroker.acquireUnitOfWork();
this.unitOfWork.readAllObjects(Employee.class); // Test read concurrency.
this.objectToBeWritten = this.unitOfWork.registerObject(this.originalObject);
changeObject();
// if (! this.session.compareObjectsDontMatch(this.originalObject, this.objectToBeWritten)) {
// throw new TestErrorException("The original object was changed through changing the clone.");
// }
this.unitOfWork.commit();
} catch (Exception exception) {
this.server.errorOccured = true;
exception.printStackTrace(System.out);
}
}
}