code: public final void zooActivateRead() {
  		if (DBTracer.TRACE) DBTracer.logCall(this);
  		switch (getStatus()) {
  		case DETACHED_CLEAN:
  			//nothing to do
  			return;
  		case HOLLOW_PERSISTENT_NONTRANSACTIONAL:
  			try {
  				Session session = context.getSession();
  				session.lock();
  				if (session.isClosed()) {
  					throw DBLogger.newUser("The PersistenceManager of this object is not open.");
  				}
  				if (!session.isActive() && !session.getConfig().getNonTransactionalRead()) {
  					throw DBLogger.newUser("The PersistenceManager of this object is not active " +
  							"(-> use begin()).");
  				}
  				jdoZooGetNode().refreshObject(this);
  			} finally {
  				context.getSession().unlock();
  			}
  			return;
  		case PERSISTENT_DELETED:
  		case PERSISTENT_NEW_DELETED:
  			throw DBLogger.newUser("The object has been deleted.");
  		case PERSISTENT_NEW:
  		case PERSISTENT_CLEAN:
  		case PERSISTENT_DIRTY:
  			//nothing to do
  			return;
  		case TRANSIENT:
  		case TRANSIENT_CLEAN:
  		case TRANSIENT_DIRTY:
  			//not persistent yet
  			return;
  
  		default:
  			throw new IllegalStateException("" + getStatus());
  		}
  	}
docs: This method ensures that the specified object is in the cache.
  
  It should be called in the beginning of every method that reads persistent fields.
  
  For generated calls, we should not forget private method, because they can be called
  from other instances.