#spring
Вопрос:
Вот мой класс HibernateConfigurationAS400
@Configuration
@EnableTransactionManagement
public class HibernateConfigurationAS400 {
private static final Logger logger = Logger.getLogger(HibernateConfigurationAS400.class);
@Bean
public DataSource dataSourceAS400() {
JndiObjectFactoryBean dataSourceAS400 = new JndiObjectFactoryBean();
dataSourceAS400.setJndiName("java:comp/env/jdbc/DBAS400");
dataSourceAS400.setResourceRef(true);
logger.info("dataSourceAS400()");
return (DataSource) dataSourceAS400.getObject();
}
@Bean
public SessionFactory sessionFactoryAS400() {
LocalSessionFactoryBean sessionFactoryAS400 = new LocalSessionFactoryBean();
sessionFactoryAS400.setDataSource(dataSourceAS400());
sessionFactoryAS400.setPackagesToScan(new String[] { "com.kable.web.hub.model.orderpower" });
sessionFactoryAS400.setHibernateProperties(hibernateProperties());
logger.info("sessionFactoryAS400()");
return sessionFactoryAS400.getObject();
}
@Bean
public HibernateTransactionManager transactionManagerAS400() {
logger.info("transactionManagerAS400()");
return new HibernateTransactionManager(sessionFactoryAS400());
}
@Bean
public SchemaMultiTenantConnectionProvider schemaMultiTenantConnectionProvider() {
SchemaMultiTenantConnectionProvider schemaMultiTenantConnectionProvider = new SchemaMultiTenantConnectionProvider();
schemaMultiTenantConnectionProvider.setDataSource(dataSourceAS400());
logger.info("schemaMultiTenantConnectionProvider()");
return schemaMultiTenantConnectionProvider;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.DB2400Dialect");
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.format_sql", "true");
properties.put("hibernate.use_sql_comments", "true");
properties.put("hibernate.multiTenancy", "SCHEMA");
properties.put("hibernate.tenant_identifier_resolver", "com.kable.web.hub.tenancy.CurrentTenantIdentifierResolverImpl");
properties.put("hibernate.multi_tenant_connection_provider", schemaMultiTenantConnectionProvider());
logger.info("hibernateProperties()");
return properties;
}
}
Когда запускается Tomcat, выдает ли он следующее исключение
Sep 23, 2021 2:32:20 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerAS400' defined in com.kable.web.hub.hibernate.HibernateConfigurationAS400: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.hibernate4.HibernateTransactionManager]: Factory method 'transactionManagerAS400' threw exception; nested exception is java.lang.IllegalArgumentException: Property 'sessionFactory' is required
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.hibernate4.HibernateTransactionManager]: Factory method 'transactionManagerAS400' threw exception; nested exception is java.lang.IllegalArgumentException: Property 'sessionFactory' is required
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 23 more
Caused by: java.lang.IllegalArgumentException: Property 'sessionFactory' is required
at org.springframework.orm.hibernate4.HibernateTransactionManager.afterPropertiesSet(HibernateTransactionManager.java:348)
at org.springframework.orm.hibernate4.HibernateTransactionManager.<init>(HibernateTransactionManager.java:148)
at com.kable.web.hub.hibernate.HibernateConfigurationAS400.transactionManagerAS400(HibernateConfigurationAS400.java:49)
at com.kable.web.hub.hibernate.HibernateConfigurationAS400$EnhancerBySpringCGLIB$ba6e9cca.CGLIB$transactionManagerAS400$2(<generated>)
at com.kable.web.hub.hibernate.HibernateConfigurationAS400$EnhancerBySpringCGLIB$ba6e9cca$FastClassBySpringCGLIB$9fb0e56.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356)
at com.kable.web.hub.hibernate.HibernateConfigurationAS400$EnhancerBySpringCGLIB$ba6e9cca.transactionManagerAS400(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 24 more
Но в журналах есть следующее
14:32:16 INFO [localhost-startStop-1]:hub.hibernate.HibernateConfigurationAS400.dataSourceAS400()31 - dataSourceAS400()
14:32:16 INFO [localhost-startStop-1]:hub.hibernate.HibernateConfigurationAS400.schemaMultiTenantConnectionProvider()57 - schemaMultiTenantConnectionProvider()
14:32:16 INFO [localhost-startStop-1]:hub.hibernate.HibernateConfigurationAS400.hibernateProperties()71 - hibernateProperties()
14:32:16 INFO [localhost-startStop-1]:hub.hibernate.HibernateConfigurationAS400.sessionFactoryAS400()42 - sessionFactoryAS400()
14:32:20 INFO [localhost-startStop-1]:hub.hibernate.HibernateConfigurationAS400.transactionManagerAS400()48 - transactionManagerAS400()
Вы можете видеть, что sessionFactoryAS400() вызывается и помещается в TransactionManager. Я в недоумении относительно того, почему Tomcat создает исключение.
Комментарии:
1. он жалуется на отсутствующее свойство, а не на отсутствующий компонент типа