sisc.util
Class InternedValue
java.lang.Object
  
sisc.util.InternedValue
- All Implemented Interfaces: 
 - java.io.Externalizable, java.io.Serializable
 
public class InternedValue
- extends java.lang.Object
- implements java.io.Externalizable
  
This class serves two purposes. Firstly, it contains static members
 that maintain a bijective map between symbols and values. Secondly,
 instances of this class are used in Java serialisation as wrappers
 for interned values.
 Since the bijective map is static it is shared between app contexts
 and hence interned values can leak between apps. This is an
 unavoidable consequence of wanting to fit in with standard Java
 serialisation in, e.g., J2EE containers, which may happen in
 threads with no associated app context. In practice this shouldn't
 cause much of a problem. Firstly, many J2EE containers have
 separate class loaders for separate web apps etc. Secondly, the
 main purpose of interned values is to store globally unique types,
 for which there is little harm in sharing between apps.
 Access to the bijective map is thread-safe.
 The map is *not* weak - symbols and values of map entries will not
 be garbage collected. It would be desirable for map entries to be
 removed when they are no longer referenced. However, it is
 impossible to do so reliably, so the current set up is the only
 safe solution.
- See Also:
 - Serialized Form
 
 
 
| Methods inherited from class java.lang.Object | 
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
 
InternedValue
public InternedValue()
getName
public Symbol getName()
 
 
getValue
public Value getValue()
 
 
lookupByName
public static InternedValue lookupByName(Symbol name)
 
 
lookupByValue
public static InternedValue lookupByValue(Value value)
 
 
intern
public static InternedValue intern(Symbol name,
                                   Value value)
 
 
writeExternal
public void writeExternal(java.io.ObjectOutput out)
                   throws java.io.IOException
- Specified by:
 writeExternal in interface java.io.Externalizable
 
- Throws:
 java.io.IOException
 
deserResolve
public static Value deserResolve(Symbol name,
                                 java.lang.Class clazz)
                          throws java.io.IOException
 
- Throws:
 java.io.IOException
 
readExternal
public void readExternal(java.io.ObjectInput in)
                  throws java.io.IOException
- Specified by:
 readExternal in interface java.io.Externalizable
 
- Throws:
 java.io.IOException
 
readResolve
public java.lang.Object readResolve()
                             throws java.io.ObjectStreamException
 
- Throws:
 java.io.ObjectStreamException