util-ref/src/main/java/com/hpe/caf/util/ref/ReferencedObject.java
public synchronized T acquire(final DataSource source)
        throws DataSourceException
    {
        if (object == null) {
            if (getReference() == null) {
                throw new IllegalStateException("No reference or object present");
            } else {
                object = source.getObject(getReference(), objectClass);
            }
        }
        return object;
    }
public synchronized T acquire(final DataSource source)
        throws DataSourceException
    {
        if (object == null) {
            if (getReference() == null) {
                throw new IllegalStateException("No reference or object present");
            } else {
                object = source.getObject(getReference(), objectClass);
            }
        }
        return object;
    }
Return the referenced object, potentially performing a remote DataStore lookup and deserialisation. If the object is already
present or has been previously acquired, it is immediately returned.

@param source the implementation that provides object instances given the provided references
@return the object that this container is wrapping
@throws DataSourceException if the object cannot be acquired
@throws IllegalStateException if there is no object or reference present