2015-10-14 2 views
2

В моем приложении мы используем несколько источников данных, поэтому у нас есть несколько конфигураций баз данных (сеансовые заводы). Все отлично работает на нашем локальном (whindows машине), но при развертывании войны файл приложения Unix Сбой за исключением следующего:Странная пружина «неразрешимая круговая справочная проблема»

org.springframework.beans.factory.BeanCreationException: Ошибка создании компонента с именем «cpnRepository» : Завершение автозапуска ; вложенное исключение - org.springframework.beans.factory.BeanCreationException: не может поле autowire: private org.hibernate.SessionFactory org.npcc.ccms.dao.GenericDB1Dao.sessionFactory; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создание bean-компонента с именем «DB1Config»: в результате отказа от автоспуска ; вложенное исключение - org.springframework.beans.factory.BeanCreationException: не может поле autowire: private org.hibernate.SessionFactory org.npcc.ccms.config.db.DB1Config.sessionFactory; вложенное исключение - org.springframework.beans.factory.BeanCurrentlyInCreationException: Ошибка при создании компонента с именем «DB1SessionFactory»: запрошенный bean is в настоящее время находится в создании: существует ли неразрешимая циркулярная ссылка?

Вот реализация дао:

@Repository("cpnRepository") 
public class ProgramNodeDaoImpl extends GenericDB1Dao<Integer, CustomProgramNode> implements CPNRepositoryDao { 
    @Override 
    public List<CustomProgramNode> findAllNodes() { 
     Criteria criteria = createEntityCriteria(); 
     return (List<CustomProgramNode>) criteria.list(); 
    } 

    @Override 
    public List<CustomProgramNode> findByStatus(String status) { 
     Query query = getSession().createQuery("from CustomProgramNode where status = :status"); 
     query.setParameter("status", status); 
     List<CustomProgramNode> list = query.list(); 
     return list;   

    } 

} 

Generic DAO из DB1:

public abstract class GenericDB1Dao<PK extends Serializable, T> { 

    private final Class<T> persistentClass; 

    @SuppressWarnings("unchecked") 
    public GenericAgrgtrDao(){ 
     this.persistentClass =(Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1]; 
    } 

    @Autowired 
    @Qualifier("DB1SessionFactory") 
    private SessionFactory sessionFactory; 

    protected Session getSession(){ 
     return sessionFactory.getCurrentSession(); 
    } 

    @SuppressWarnings("unchecked") 
    public T getByKey(PK key) { 
     return (T) getSession().get(persistentClass, key); 
    } 

    public void persist(T entity) { 
     getSession().persist(entity); 
    } 

    public void delete(T entity) { 
     getSession().delete(entity); 
    } 

    protected Criteria createEntityCriteria(){ 
     return getSession().createCriteria(persistentClass); 
    } 
} 

Конфигурация Database1:

@Configuration 
public class DB1Config { 
    final static Logger logger = LogManager.getLogger(DB1Config.class); 

    @Autowired 
    private Environment environment; 

    @Autowired 
    @Qualifier("DB1SessionFactory") 
    private SessionFactory sessionFactory; 

    @Bean(name="DB1SessionFactory") 
    public LocalSessionFactoryBean db1SessionFactory() { 
     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource()); 
     sessionFactory.setPackagesToScan(new String[] { "org.npcc.ccms.model.db1" }); 
     sessionFactory.setHibernateProperties(hibernateProperties()); 
     return sessionFactory; 
    } 

    @Bean(destroyMethod="") 
    public DataSource dataSource() { 
     JndiTemplate jndi = new JndiTemplate(); 
     DataSource dataSource = null; 
     try { 
      dataSource = (DataSource) jndi.lookup(environment.getRequiredProperty("datasource.db1")); 
     } catch (NamingException e) { 
     } 
     return dataSource; 
    } 

    private Properties hibernateProperties() { 
     Properties properties = new Properties(); 
     properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); 
     properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); 
     properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); 
     return properties;   
    } 
    @Primary 
    @Bean(name="DB1TransactionManager") 
    public HibernateTransactionManager db1TransactionManager() { 
     HibernateTransactionManager txManager = new HibernateTransactionManager(); 
     txManager.setSessionFactory(this.sessionFactory); 
     txManager.setDataSource(dataSource()); 
     return txManager; 
    } 
} 

Каким образом зависимостей Spring решительность фасоли? Почему порядок между двумя OS-es не соответствует порядку? Заранее спасибо.

+0

Ваш журнал ошибок не имеет большого смысла. Пожалуйста, опубликуйте ** полную ** трассировку стека. –

+0

Вместо вызова метода источника данных, почему вы не используете компонент? –

ответ

2

Я думаю, ваша проблема исходит из того, что вы создаете LocalSessionFactoryBean и в то же время, пытаясь autowire SessionFactory ...

Вам не нужен этот класс член sessionFactory в своем классе DB1Config, попробовать что-то например:

@Bean(name="DB1SessionFactory") 
public LocalSessionFactoryBean db1SessionFactory() { 
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
    sessionFactory.setDataSource(dataSource()); 
    sessionFactory.setPackagesToScan(new String[] { "org.npcc.ccms.model.db1" }); 
    sessionFactory.setHibernateProperties(hibernateProperties()); 
    return sessionFactory; 
} 

@Bean 
public SessionFactory sessionFactory() { 
    return db1SessionFactory().getObject(); 
} 
+0

Это сработало, но почему оно работает в Windows, но не в Unix? – Ramu

+0

вопрос: «Почему он работал в окнах?» ... он не должен был работать в первую очередь ... я действительно не знаю ответа, но каким-то образом весной удалось инициализировать этот 'LocalSessionFactoryBean' перед автозагрузкой' sessionFactory' в окнах .... в любом случае, в один прекрасный день или другой вы столкнулись бы с проблемой даже в окнах, я уверен ... – Pras

Смежные вопросы