code: @SuppressWarnings("unchecked")
      public static <S extends Storable> Class<? extends S>
          getAbstractClass(Class<S> type, boolean isMaster)
          throws SupportException, IllegalArgumentException
      {
          synchronized (cCache) {
              Class<? extends S> abstractClass;
  
              Flavors<S> flavors = (Flavors<S>) cCache.get(type);
  
              if (flavors == null) {
                  flavors = new Flavors<S>();
                  cCache.put(type, flavors);
              } else if ((abstractClass = flavors.getClass(isMaster)) != null) {
                  return abstractClass;
              }
  
              abstractClass = generateAbstractClass(type, isMaster);
              flavors.setClass(abstractClass, isMaster);
  
              return abstractClass;
          }
      }
docs: Returns an abstract implementation of the given Storable type, which is
  fully thread-safe. The Storable type itself may be an interface or a
  class. If it is a class, then it must not be final, and it must have a
  public, no-arg constructor. Three constructors are defined for the
  abstract implementation:
  
  <pre>
  public &lt;init&gt;(RawSupport);
  
  public &lt;init&gt;(RawSupport, byte[] key);
  
  public &lt;init&gt;(RawSupport, byte[] key, byte[] value);
  </pre>
  
  <p>Subclasses must implement the following abstract protected methods,
  whose exact names are defined by constants in this class:
  
  <pre>
  // Encode the primary key of this storable.
  protected abstract byte[] encodeKey();
  
  // Encode all properties of this storable excluding the primary key.
  protected abstract byte[] encodeData();
  
  // Decode the primary key into properties of this storable.
  // Note: this method is also invoked by the three argument constructor.
  protected abstract void decodeKey(byte[]);
  
  // Decode the data into properties of this storable.
  // Note: this method is also invoked by the three argument constructor.
  protected abstract void decodeData(byte[]);
  </pre>
  
  @param isMaster when true, version properties, sequences, and triggers are managed
  @throws IllegalArgumentException if type is null