2015-03-10 1 views
-1

Существует компонент конфигурации java со службой статистики Hibernate JMX и LocalSessionFactoryBean конфигурациями. Я не вижу никакой возможности получить SessionFactory через уже созданный экземпляр LocalSessionFactoryBean. Цель состоит в том, чтобы включить поддержку JMX, чтобы JConsole мог получить доступ к статистике Hibernates. Если я создам новый SessionFactory, он будет дублироваться. Как продолжить эту конфигурацию?Настройка поддержки JMX с использованием LocalSessionFactoryBean

@Bean 
    public LocalSessionFactoryBean sessionFactory(){ 
     LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); 
     sessionFactoryBean.setDataSource(dataSource()); 
     sessionFactoryBean.setPackagesToScan(env.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN)); 
     sessionFactoryBean.setHibernateProperties(hibProperties()); 
     // JMX statistics 
     SessionFactory sf = ...; // ??? 
     StatisticsService statsMBean = new StatisticsService(); 
     statsMBean.setSessionFactory(sessionFactoryBean.); 
     statsMBean.setStatisticsEnabled(true); 

     MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); 
     mBeanServer.registerMBean(statsMBean, new ObjectName("Hibernate:application=Statistics")); 

     return sessionFactoryBean; 
    } 

JConsole

+0

Ваше изменение не связано с вашим исходным вопросом. Не делай этого. Если у вас есть новый вопрос о проблемах с classpath, задайте новый вопрос. –

ответ

1

Написать новый метод @Bean подвергать StatisticsService

@Autowired 
@Bean 
public StatisticsService service(SessionFactory sessionFactory) { 
    StatisticsService statsMBean = new StatisticsService(); 
    statsMBean.setSessionFactory(sessionFactory); 
    statsMBean.setStatisticsEnabled(true); 

    MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); 
    mBeanServer.registerMBean(statsMBean, new ObjectName("Hibernate:application=Statistics")); 
    return statsMBean; 
} 

В качестве альтернативы, вы можете вызвать afterPropertiesSet и getObject на sessionFactoryBean, чтобы получить экземпляр SessionFactory. Обратите внимание, что вам нужно будет проверить, возвращает ли getObject тот же объект в будущих вызовах. Вы не хотите, чтобы он возвращал один экземпляр для использования с вашим MBean и другим экземпляром для остальной части вашего приложения.

+0

На самом деле 'sessionFactory' метод имеет еще одну аннотацию:' @DependsOn ("flyway") '. Будет ли это вмешиваться в компонент 'StatisticsService'? Какой тип будет работать для 'ObjectName'. Я попробовал: 'javax.mamagement.ObjectName' и' org.hibernate.metamodelrelational.ObjectName', но IDE отказывается работать с ними. –

+0

@RCola Нет, '@ DependsOn' не будет иметь никакого эффекта здесь. Он просто заставит bean bean bean be be be be be be be be be be be be be beans beans как и 'StatisticsService', так и' LocalSessionFactoryBean' (и 'SessionFactory'). –

+0

Для 'ObjectName', я бы предположил версию' javax', но вам нужны соответствующие библиотеки. –

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