1/*
2 * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 *
26 */
27
28package bench.rmi;
29
30import java.io.Serializable;
31import java.rmi.Remote;
32import java.rmi.RemoteException;
33
34/**
35 * The RMI benchmark server is a simple compute-engine-like server which allows
36 * client benchmarks to create/export and unexport objects off of the server,
37 * or run arbitrary tasks.
38 */
39public interface BenchServer extends Remote {
40    /**
41     * Interface used for creating server-side remote objects.
42     */
43    public interface RemoteObjectFactory extends Serializable {
44        Remote create() throws RemoteException;
45    }
46
47    /**
48     * Interface used for server-side tasks.
49     */
50    public interface Task extends Serializable {
51        Object execute() throws Exception;
52    }
53
54    /**
55     * Uses the given remote object factory to create a new remote object on
56     * the server side.
57     */
58    Remote create(RemoteObjectFactory factory) throws RemoteException;
59
60    /**
61     * Unexports the specified remote object.  Returns true if successful,
62     * false otherwise.
63     */
64    boolean unexport(Remote obj, boolean force) throws RemoteException;
65
66    /**
67     * Execute given task.
68     */
69    Object execute(Task task) throws Exception;
70
71    /**
72     * Invoke the garbage collector.
73     */
74    void gc() throws RemoteException;
75
76    /**
77     * Terminate the server.
78     */
79    void terminate(int delay) throws RemoteException;
80}
81