blob: 1ec6b66af0228b80dad2a8286fb22988cb8a2499 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.test.dunit;
import java.util.HashMap;
import java.util.Map;
/**
* <code>Invoke</code> provides static utility methods that allow a <code>DistributedTest</code> to
* invoke a <code>SerializableRunnable</code> or <code>SerializableCallable</code> in a remote test
* <code>VM</code>.
*
* These methods can be used directly: <code>Invoke.invokeInEveryVM(...)</code>, however, they are
* intended to be referenced through static import:
*
* <pre>
* import static org.apache.geode.test.dunit.Invoke.*;
* ...
* invokeInEveryVM(...);
* </pre>
*
* Extracted from DistributedTestCase.
*/
public class Invoke {
protected Invoke() {}
/**
* Invokes a <code>SerializableRunnable</code> in every VM that DUnit knows about.
* <p>
* Note: this does NOT include the controller VM or locator VM.
*
* @see VM#invoke(SerializableRunnableIF)
*/
public static void invokeInEveryVM(final SerializableRunnableIF runnable) {
invokeInEveryVM(null, runnable);
}
public static void invokeInEveryVM(String name, final SerializableRunnableIF runnable) {
for (int hostIndex = 0; hostIndex < Host.getHostCount(); hostIndex++) {
Host host = Host.getHost(hostIndex);
for (VM vm : host.getAllVMs()) {
if (name != null)
vm.invoke(name, runnable);
else
vm.invoke(runnable);
}
}
}
/**
* Invokes a method in every remote VM that DUnit knows about.
*
* @see VM#invoke(Class, String)
* @deprecated Please use {@link #invokeInEveryVM(SerializableRunnableIF)} or another
* non-deprecated method in <code>Invoke</code> instead.
*/
@Deprecated
public static void invokeInEveryVM(final Class<?> targetClass, final String targetMethod) {
for (int hostIndex = 0; hostIndex < Host.getHostCount(); hostIndex++) {
Host host = Host.getHost(hostIndex);
for (VM vm : host.getAllVMs()) {
vm.invoke(targetClass, targetMethod);
}
}
}
/**
* Invokes a method in every remote VM that DUnit knows about.
*
* @see VM#invoke(Class, String)
* @deprecated Please use {@link #invokeInEveryVM(SerializableRunnableIF)} or another
* non-deprecated method in <code>Invoke</code> instead.
*/
public static void invokeInEveryVM(final Class<?> targetClass, final String targetMethod,
final Object[] methodArgs) {
for (int hostIndex = 0; hostIndex < Host.getHostCount(); hostIndex++) {
Host host = Host.getHost(hostIndex);
for (VM vm : host.getAllVMs()) {
vm.invoke(targetClass, targetMethod, methodArgs);
}
}
}
/**
* Invokes a <code>SerializableCallable</code> in every VM that DUnit knows about.
*
* @return a Map of results, where the key is the VM and the value is the result for that VM
* @see VM#invoke(SerializableCallableIF)
*/
public static <T> Map<VM, T> invokeInEveryVM(final SerializableCallableIF<T> callable) {
return invokeInEveryVM(null, callable);
}
public static <T> Map<VM, T> invokeInEveryVM(String name,
final SerializableCallableIF<T> callable) {
Map<VM, T> ret = new HashMap<VM, T>();
for (int h = 0; h < Host.getHostCount(); h++) {
Host host = Host.getHost(h);
for (VM vm : host.getAllVMs()) {
if (name != null)
ret.put(vm, vm.invoke(name, callable));
else
ret.put(vm, vm.invoke(callable));
}
}
return ret;
}
public static void invokeInLocator(final SerializableRunnableIF runnable) {
VM locator = Host.getLocator();
if (locator != null) {
locator.invoke(runnable);
}
}
}