/**
   * INTERNAL: Return the lowlevel database accessor. The database accessor is used for direct
   * database access. The right accessor for this broker will be returned.
   */
  public Accessor getAccessor(Class domainClass) {
    if (domainClass == null) {
      // CR#... this occurs if a data query is used without a session-name, needs to throw an error
      throw QueryException.unnamedQueryOnSessionBroker(null);
    }

    // session may be a broker too.  Eventually a non session broker wil be found
    return getSessionForClass(domainClass).getAccessor(domainClass);
  }
  /** INTERNAL: Answers the session to be used for the given query. */
  protected AbstractSession getSessionForQuery(DatabaseQuery query) {
    if (query.hasSessionName()) {
      return getSessionForName(query.getSessionName());
    }

    Class queryClass;
    if (query.getDescriptor() != null) {
      queryClass = query.getDescriptor().getJavaClass();
    } else {
      queryClass = query.getReferenceClass();
      if (queryClass == null) {
        throw QueryException.unnamedQueryOnSessionBroker(query);
      }
    }
    return getSessionForClass(queryClass);
  }