blob: 2ee5eaf2ed25353d95f5e8637dc673681a219947 [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:
// etang - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.jpa.sessionbean;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.rmi.PortableRemoteObject;
import org.eclipse.persistence.testing.models.jpa.fieldaccess.advanced.Employee;
import org.eclipse.persistence.testing.models.jpa.sessionbean.EmployeeService;
/**
* EJB 3 SessionBean tests using EclipseLink JPA
* These tests can only be run in Oracle High Availability environment -
* a WebLogic server configured with Multi Data Sources to connect to Oracle RAC database
* They read/write entity bean repeatly for 300 times, in the meantime, RAC database failures can be simulated,
* to ensure no exceptions would be caused the RAC database failures.
*/
public class FindAllThread implements Runnable
{
public int threadNumber;
public boolean succeeded = true;
public boolean finished = false;
public String relatedException = "";
protected EmployeeService service;
public FindAllThread()
{
super();
}
public FindAllThread(int threadNumber)
{
super();
this.threadNumber = threadNumber;
}
public EmployeeService getEmployeeService() throws Exception {
if (service == null) {
Properties properties = new Properties();
String url = System.getProperty("server.url");
if (url != null) {
properties.put("java.naming.provider.url", url);
}
Context context = new InitialContext(properties);
try {
service = (EmployeeService) PortableRemoteObject.narrow(context.lookup("EmployeeService#org.eclipse.persistence.testing.models.jpa.sessionbean.EmployeeService"), EmployeeService.class);
} catch (NameNotFoundException notFoundException) {
throw new Error("Lookup failed.", notFoundException);
}
}
return service;
}
@Override
public void run()
{
int repeatTimes = 300;
for (int i = 1; i <= repeatTimes; i++) {
String prefix = "===Thread " + threadNumber + "===FindAll iteration " + i;
try {
System.out.println(prefix);
List result = getEmployeeService().findAll();
int employCount = 0;
for (Iterator iterator = result.iterator(); iterator.hasNext(); ) {
Employee employee = (Employee)iterator.next();
employCount++;
}
if (employCount != 2) {
relatedException=prefix + "===The count is " + employCount +", Failed to find all employees";
succeeded=false;
break;
}
Thread.sleep(3000);
} catch (Exception e) {
relatedException=prefix + e.toString();
succeeded=false;
break;
}
}
System.out.println(relatedException);
finished = true;
}
}