/* * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.logging.Logger; import java.util.logging.Level; /** * The OrangeImpl class implements the behavior of the remote "orange" * objects exported by the appplication. */ public class OrangeImpl extends UnicastRemoteObject implements Orange { private static Logger logger = Logger.getLogger("reliability.orange"); private String name; public OrangeImpl(String name) throws RemoteException { this.name = name; } /** * Return inverted message data, call through supplied OrangeEcho * object if not at recursion level zero. */ public int[] recurse(OrangeEcho echo, int[] message, int level) throws RemoteException { try { String threadName = Thread.currentThread().getName(); logger.log(Level.FINEST, threadName + ": " + toString() + ".recurse(message[" + message.length + "], " + level + "): BEGIN"); int[] response; if (level > 0) response = echo.recurse(this, message, level); else { for (int i = 0; i < message.length; ++ i) message[i] = ~message[i]; response = message; } logger.log(Level.FINEST, threadName + ": " + toString() + ".recurse(message[" + message.length + "], " + level + "): END"); return response; } catch (RuntimeException e) { logger.log(Level.SEVERE, toString() + ".recurse():", e); throw e; } } public String toString() { return name; } }