1 /*
   2  * Copyright (c) 2003, 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 import java.rmi.RemoteException;
  25 import java.rmi.server.UnicastRemoteObject;
  26 import java.util.logging.Logger;
  27 import java.util.logging.Level;
  28 
  29 /**
  30  * The AppleImpl class implements the behavior of the remote "apple"
  31  * objects exported by the application.
  32  */
  33 public class AppleImpl
  34     extends UnicastRemoteObject
  35     implements Apple
  36 {
  37 
  38     private static Logger logger = Logger.getLogger("reliability.apple");
  39     private String name;
  40 
  41     public AppleImpl(String name) throws RemoteException {
  42         this.name = name;
  43     }
  44 
  45     /**
  46      * Receive an array of AppleEvent objects.
  47      */
  48     public void notify(AppleEvent[] events) {
  49         try {
  50             String threadName = Thread.currentThread().getName();
  51             logger.log(Level.FINEST,
  52                 threadName + ": " + toString() + ".notify: BEGIN");
  53 
  54             for (int i = 0; i < events.length; ++ i) {
  55                 logger.log(Level.FINEST,
  56                     threadName + ": " + toString() +
  57                         ".notify(): events[" + i + "] = " +
  58                         events[i].toString());
  59             }
  60 
  61             logger.log(Level.FINEST,
  62                 threadName + ": " + toString() + ".notify(): END");
  63         } catch (RuntimeException e) {
  64             logger.log(Level.SEVERE, toString() + ".notify():", e);
  65             throw e;
  66         }
  67     }
  68 
  69     /**
  70      * Return a newly created and exported orange implementation.
  71      */
  72     public Orange newOrange(String name) throws RemoteException {
  73         try {
  74             String threadName = Thread.currentThread().getName();
  75             logger.log(Level.FINEST,
  76                 threadName + ": " + toString() +
  77                 ".newOrange(" + name + "): BEGIN");
  78 
  79             Orange orange = new OrangeImpl(name);
  80 
  81             logger.log(Level.FINEST,
  82                 threadName + ": " + toString() +
  83                 ".newOrange(" + name + "): END");
  84 
  85             return orange;
  86         } catch (RuntimeException e) {
  87             logger.log(Level.SEVERE, toString() + ".newOrange():", e);
  88             throw e;
  89         }
  90     }
  91 
  92     public String toString() {
  93         return name;
  94     }
  95 }