Ошибки прокси-сервера Cglib при использовании и данных Spring при переходе с Spring XD M5 на выпуск 1.0.0

Мы переносим ряд пакетных заданий из Spring XD M5 в версию 1.0.0.

При создании и развертывании заданий мы сталкиваемся с проблемой с функциональностью прокси-сервера cglib при автоподключении репозиториев Spring Data (в данном случае для Neo4J).

Конец трассировки стека:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'datasetRepository': Post-processing of FactoryBean's singleton object failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class
 com.sun.proxy.$Proxy112]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy112
        at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:116)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1512)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
        ... 54 more
Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.sun.proxy.$Proxy112]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final
 class class com.sun.proxy.$Proxy112
        at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:212)
        at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:494)
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:379)
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:339)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:421)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1698)
        at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:113)
        ... 61 more
Caused by: java.lang.IllegalArgumentException: Cannot subclass final class class com.sun.proxy.$Proxy112
        at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:446)
        at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33)
        at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
        at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
        at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
        at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
        at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)
        at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:202)
        ... 68 more

Интерфейс репозитория Spring Data помечен @Repository следующим образом:

@Repository
public interface DatasetRepository extends GraphRepository<Dataset> 
{
    public Dataset findOneById(String id);
    public Dataset findOneByName(String name);
}

И соответствующий атрибут autowired в нашем классе bean-компонента, который вызывает исключение:

    @Autowired
    private DatasetRepository datasetRepo;

Сам bean-компонент определен в XML-файле нашего задания XD следующим образом:

<bean id="myBean" class="com.mycompany.MyBean"/>

И конфигурационный компонент (компонент, просканированный в задании cfg XML):

@Configuration
@EnableNeo4jRepositories({ "com.mycompany.repositories" })
public class CustomNeo4jConfiguration implements InitializingBean

Версии Spring Data Neo4J, которые мы развертываем в папку XD lib, следующие:

spring-data-neo4j      : 3.2.0.RELEASE
spring-data-neo4j-rest : 3.2.0.RELEASE

Все настройки выполняются на ПК разработчика (пока) с XD, работающим в распределенном режиме:

  • сервер Redis
  • Сервер Zookeeper (1x)
  • Репозиторий заданий Oracle (пока локальный экземпляр XE)
  • 1x администратор и 1x контейнер

Будем очень признательны за любую помощь в настройке задания, репозитория Spring Data или контейнера XD.

Спасибо


person Paul McMinn    schedule 18.09.2014    source источник
comment
Обновление: попытался добавить: <aop:aspectj-autoproxy proxy-target-class="false" /> в XML задания, но наблюдалось такое же поведение.   -  person Paul McMinn    schedule 18.09.2014
comment
Можете ли вы предоставить свою конфигурацию Spring Batch? Прямо сейчас я работаю над ошибкой в ​​Spring Batch (BATCH-2266), которая имеет ту же трассировку стека, поэтому я держу пари, что это так, но я хочу подтвердить.   -  person Michael Minella    schedule 18.09.2014
comment
Я пытаюсь сократить код приложения до минимума, чтобы воспроизвести ошибку, но, к сожалению, ему присвоен более низкий приоритет из-за производственной деятельности. Пакетная конфигурация включена в выпуск Spring XD M5 здесь   -  person Paul McMinn    schedule 23.09.2014
comment
Я исправил ранее упомянутую проблему (BATCH-2266). Можете ли вы попробовать упаковать свою работу с последними снимками Spring Batch (в каталоге lib вашего модуля работы)? Сделав это, вы переопределите то, что предоставляет Spring XD. Это поможет в диагностике.   -  person Michael Minella    schedule 23.09.2014
comment
Попробую (вероятно, на следующей неделе в зависимости от приоритетов) — буду держать вас в курсе.   -  person Paul McMinn    schedule 25.09.2014


Ответы (1)


Удалите аннотацию @Repository в вашем GraphRepository, и все будет в порядке. Не забудьте включить сканирование компонентов.

person F.O.O    schedule 20.11.2015