/******************************************************************************* | |
* Copyright (c) 1998, 2013 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 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: | |
* 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(); | |
} | |
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); | |
} | |
} | |
} |