/** * Creates a new descriptor. */ protected ClassDescriptor createDescriptor(String entityName) { // scan the factory chain until some factory returns a non-null // descriptor; // scanning is done in reverse order so that the factories added last // take higher // precedence... ListIterator<ClassDescriptorFactory> it = factories.listIterator(factories.size()); while (it.hasPrevious()) { ClassDescriptorFactory factory = it.previous(); ClassDescriptor descriptor = factory.getDescriptor(entityName); if (descriptor != null) { return descriptor; } } throw new CayenneRuntimeException("Failed to create descriptor for entity: %s", entityName); } }