/******************************************************************************* * Copyright (c) 1998, 2015 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: * 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; } 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.currentThread().sleep(3000); } catch (Exception e) { relatedException=prefix + e.toString(); succeeded=false; break; } } System.out.println(relatedException); finished = true; } }