Почему App Engine не нравится SpringPathScanningCandidateComponentProvider в Spring? - PullRequest
0 голосов
/ 22 января 2012

Почему App Engine задыхается от этого кода Spring?

    ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
    Set<BeanDefinition> components = provider.findCandidateComponents("com/freshlyorc/datamodelbeans");
    for (BeanDefinition component : components){
        Class cls = Class.forName(component.getBeanClassName());
        results.add(cls);
    }

Каждый раз, когда я запускаю этот код в App Engine, он говорит что-то вроде:

org.springframework.web.context.ContextLoader initWebApplicationContext: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'chapstick' defined in file [/base/data/home/apps/s~freshlyorc/1.00/WEB-INF/classes/com/freshlyorc/datamodelbeans/Chapstick.class]: Post-processing failed of bean type [class com.freshlyorc.datamodelbeans.Chapstick] failed; nested exception is com.google.apphosting.api.DeadlineExceededException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:835)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:493)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

Is ClassPathScanningCandidateComponentProvider слишком ресурсоемкий?Есть ли более эффективная альтернатива?

Ответы [ 2 ]

0 голосов
/ 09 июня 2012

Google App Engine в настоящее время не позволяет обрабатывать запросы более 60 секунд. Выдается исключение DeadlineExceededException, чтобы сообщить вам, что ваше время истекло. Можно поймать исключение, чтобы выиграть время, чтобы очистить все свободные концы, но казнь скоро будет убита.

Сканирование и отражение пути к классам, выполняемое Spring, действительно медленный процесс. Если вы не добавляете путь к классам во время выполнения, вы должны хорошо выполнить эту работу один раз как часть построения приложения, сохранив результат в файл, который вы можете загрузить позже.

0 голосов
/ 26 марта 2012

AppEngine допускает только библиотеки из белого списка.Эта часть библиотеки Spring теперь может быть в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...