Home » openjdk-7 » java » io » [javadoc | source]

    1     /*
    2      * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
    3      * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
    4      */
    5   
    6   package java.io;
    7   
    8     /**
    9      * Context during upcalls from object stream to class-defined
   10      * readObject/writeObject methods.
   11      * Holds object currently being deserialized and descriptor for current class.
   12      *
   13      * This context keeps track of the thread it was constructed on, and allows
   14      * only a single call of defaultReadObject, readFields, defaultWriteObject
   15      * or writeFields which must be invoked on the same thread before the class's
   16      * readObject/writeObject method has returned.
   17      * If not set to the current thread, the getObj method throws NotActiveException.
   18      */
   19     final class SerialCallbackContext {
   20         private final Object obj;
   21         private final ObjectStreamClass desc;
   22         /**
   23          * Thread this context is in use by.
   24          * As this only works in one thread, we do not need to worry about thread-safety.
   25          */
   26         private Thread thread;
   27   
   28         public SerialCallbackContext(Object obj, ObjectStreamClass desc) {
   29             this.obj = obj;
   30             this.desc = desc;
   31             this.thread = Thread.currentThread();
   32         }
   33   
   34         public Object getObj() throws NotActiveException {
   35             checkAndSetUsed();
   36             return obj;
   37         }
   38   
   39         public ObjectStreamClass getDesc() {
   40             return desc;
   41         }
   42   
   43         private void checkAndSetUsed() throws NotActiveException {
   44             if (thread != Thread.currentThread()) {
   45                  throw new NotActiveException(
   46                   "not in readObject invocation or fields already read");
   47             }
   48             thread = null;
   49         }
   50   
   51         public void setUsed() {
   52             thread = null;
   53         }
   54     }

Home » openjdk-7 » java » io » [javadoc | source]