Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/StorableObject.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/StorableObject.java?rev=1468119&r1=1468118&r2=1468119&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/StorableObject.java 
(original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/com/sun/jini/mahalo/StorableObject.java 
Mon Apr 15 15:26:44 2013
@@ -1,117 +1,133 @@
-/*
- * 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 com.sun.jini.mahalo;
-
-import java.io.IOException;
-import java.rmi.MarshalledObject;
-import java.rmi.RemoteException;
-
-
-/**
- * This class holds a <code>MarshalledObject</code> that can be stored
- * persistently.  When you invoke <code>get</code>, the object is
- * deserialized, its value cached in this object, and then returned.
- * Subsequent calls to <code>get</code> return that value.  This lets
- * you store the object and hold it around, waiting until it is
- * actually deserializable, since it may not be at any given time due
- * to various factors, such as the codebase being unavailable.
- *
- * @author Sun Microsystems, Inc.
- *
- */
-public class StorableObject implements java.io.Serializable {
-    /**
-     * @serial
-     */
-    private MarshalledObject   bytes;  // the serialized bytes
-    private transient Object   obj;    // the cached object reference
-
-    private static final boolean DEBUG = false;
-    private static final long serialVersionUID = -3793675220968988873L;
-
-    /**
-     * Create a <code>StorableObject</code> that will hold <code>obj</code>
-     * in a <code>MarshalledObject</code>.
-     */
-    public StorableObject(Object obj) throws RemoteException {
-       try {
-           bytes = new MarshalledObject(obj);
-           this.obj = obj;
-       } catch (RemoteException e) {
-           throw e;
-       } catch (IOException e) {
-           fatalError("can't encode object", e);
-       }
-    }
-
-    /**
-     * Return the <code>hashCode</code> of the <code>MarshalledObject</code>.
-     */
-    public int hashCode() {
-       return bytes.hashCode(); // value of obj.hashCode()
-    }
-
-    public boolean equals(Object that) {
-       try {
-           if (that instanceof StorableObject)
-               return get().equals(((StorableObject) that).get());
-           else
-               return get().equals(that);
-       } catch (RemoteException e) {
-           return false;       //!! or should I just die?
-       }
-    }
-
-    /**
-     * Return the Remote reference.  Deserialize the object if we don't
-     * already have an actual reference in hand.
-     *
-     * @exception java.rmi.RemoteException
-     *         Problems re-establishing connection with remote object
-     */
-    public Object get() throws RemoteException {
-       try {
-           if (obj == null)
-               obj = bytes.get();
-           return obj;
-       } catch (RemoteException e) {
-           if (DEBUG)
-               System.out.println("*****StorableObject:get:" + e.getMessage());
-           throw e;
-       } catch (IOException e) {
-           fatalError("can't decode object", e);
-       } catch (ClassNotFoundException e) {
-           fatalError("can't decode object", e);
-       }
-       fatalError("how did we get here?", null);
-       return null;    // not reached, but compiler doesn't know
-    }
-
-    /**
-     * Unrecoverable error happened -- show it and give up the ghost.
-     */
-    private static void fatalError(String msg, Throwable e)
-       throws RemoteException
-    {
-       System.err.println(msg);
-       if (e != null)
-           e.printStackTrace(System.err);
-       throw new RemoteException(msg, e);
-    }
-}
+/*
+ * 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 com.sun.jini.mahalo;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.rmi.MarshalledObject;
+import java.rmi.RemoteException;
+
+
+/**
+ * This class holds a <code>MarshalledObject</code> that can be stored
+ * persistently.  When you invoke <code>get</code>, the object is
+ * deserialized, its value cached in this object, and then returned.
+ * Subsequent calls to <code>get</code> return that value.  This lets
+ * you store the object and hold it around, waiting until it is
+ * actually deserializable, since it may not be at any given time due
+ * to various factors, such as the codebase being unavailable.
+ *
+ * @author Sun Microsystems, Inc.
+ *
+ */
+public class StorableObject implements java.io.Serializable {
+    /**
+     * @serial
+     */
+    private final MarshalledObject     bytes;  // the serialized bytes
+    private volatile transient Object  obj;    // the cached object reference
+
+    private static final boolean DEBUG = false;
+    private static final long serialVersionUID = -3793675220968988873L;
+
+    /**
+     * Create a <code>StorableObject</code> that will hold <code>obj</code>
+     * in a <code>MarshalledObject</code>.
+     */
+    public StorableObject(Object obj) throws RemoteException {
+       this(obj, toMO(obj));
+    }
+    
+    private static MarshalledObject toMO(Object obj) throws RemoteException{
+       try {
+            return new MarshalledObject(obj);
+        } catch (RemoteException e){
+           throw e;
+        } catch (IOException e){
+           fatalError("can't encode object", e);
+       }
+        return null; //Unreachable.
+    }
+
+    private StorableObject (Object obj, MarshalledObject mo){
+        bytes = mo;
+        this.obj = obj;
+    }
+    
+    /**
+     * Return the <code>hashCode</code> of the <code>MarshalledObject</code>.
+     */
+    public int hashCode() {
+       return bytes.hashCode(); // value of obj.hashCode()
+    }
+
+    public boolean equals(Object that) {
+       try {
+           if (that instanceof StorableObject)
+               return get().equals(((StorableObject) that).get());
+           else
+               return get().equals(that);
+       } catch (RemoteException e) {
+           return false;       //!! or should I just die?
+       }
+    }
+
+    /**
+     * Return the Remote reference.  Deserialize the object if we don't
+     * already have an actual reference in hand.
+     *
+     * @exception java.rmi.RemoteException
+     *         Problems re-establishing connection with remote object
+     */
+    public Object get() throws RemoteException {
+       try {
+           if (obj == null)
+               obj = bytes.get();
+           return obj;
+       } catch (RemoteException e) {
+           if (DEBUG)
+               System.out.println("*****StorableObject:get:" + e.getMessage());
+           throw e;
+       } catch (IOException e) {
+           fatalError("can't decode object", e);
+       } catch (ClassNotFoundException e) {
+           fatalError("can't decode object", e);
+       }
+       fatalError("how did we get here?", null);
+       return null;    // not reached, but compiler doesn't know
+    }
+
+    private void readObject(ObjectInputStream s)
+                                   throws IOException, ClassNotFoundException
+        {
+            s.defaultReadObject(); // Just in case we change serial form later.
+        }
+
+    /**
+     * Unrecoverable error happened -- show it and give up the ghost.
+     */
+    private static void fatalError(String msg, Throwable e)
+       throws RemoteException
+    {
+       System.err.println(msg);
+       if (e != null)
+           e.printStackTrace(System.err);
+       throw new RemoteException(msg, e);
+    }
+}


Reply via email to