Пробовал деплоить war-файл своего Spring-приложеньица на Tomcat 7.041 и на Glassfish 4 - везде эта ошибка. И ЧСХ, в IDE все работает на "ура" - и в Netbeans и в Eclipse. В инете нашел, что это может быть из-за конфликта библиотек, но тогда не работало бы и в IDE? Для приложения использую библиотеки Spring и Hibernate, встроенные в Netbeans 7.4. В приложении не используются xml-конфиги, только java-классы. Делал его в учебно-воспитательных целях, чтобы понять, "как это работает". Вот конфигурационные классы: | Код | package study.spring.init;
import javax.servlet.Filter; import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{DBConfig.class}; }
@Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{WebAppConfig.class}; }
@Override protected String[] getServletMappings() { return new String[]{"*.html"}; } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter(); encodingFilter.setEncoding("UTF-8"); encodingFilter.setForceEncoding(true); return new Filter[]{encodingFilter}; } }
|
| Код | package study.spring.init;
import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.util.StringUtils; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.i18n.SessionLocaleResolver; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView;
@Configuration @EnableWebMvc @ComponentScan(basePackages = {"study.spring.controllers", "study.spring.form", "study.spring.entity", "study.spring.DAO"}) public class WebAppConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); localeChangeInterceptor.setParamName("lang"); registry.addInterceptor(localeChangeInterceptor); }
@Bean public LocaleResolver localeResolver() { SessionLocaleResolver localeResolver = new SessionLocaleResolver(); localeResolver.setDefaultLocale(StringUtils.parseLocaleString("ru")); return localeResolver; }
@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); return resolver; }
@Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource(); source.setBasename("/WEB-INF/properties/messages"); source.setUseCodeAsDefaultMessage(true); source.setDefaultEncoding("UTF-8"); return source; }
@Bean public SimpleMappingExceptionResolver simpleMappingExceptionResolver() { SimpleMappingExceptionResolver ex = new SimpleMappingExceptionResolver(); ex.setDefaultErrorView("/exception/defaultException"); return ex; } }
|
| Код | package study.spring.init;
import java.util.Properties; import javax.sql.DataSource; import org.hibernate.SessionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;
@Configuration public class DBConfig { @Bean public DataSource dataSource() { final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); DataSource dataSource = dsLookup.getDataSource("java:comp/env/dbusers"); return dataSource; }
@Bean public SessionFactory sessionFactory() { AnnotationSessionFactoryBean factoryBean = null; try { factoryBean = new AnnotationSessionFactoryBean(); factoryBean.setDataSource(dataSource()); factoryBean.setPackagesToScan(new String[]{"study.spring.entity"}); Properties pp = new Properties(); pp.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); pp.setProperty("hibernate.show_sql", "true"); factoryBean.setHibernateProperties(pp); factoryBean.afterPropertiesSet(); } catch (Exception e) { e.printStackTrace(); } return factoryBean.getObject(); } @Bean public HibernateTemplate hibernateTemplate() { return new HibernateTemplate(sessionFactory()); } }
|
Вот стек ошибки на сервере: | Код | Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in class study.spring.init.DBConfig: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.orm.hibernate3.HibernateTemplate study.spring.init.DBConfig.hibernateTemplate()] threw exception; nested exception is java.lang.IllegalArgumentException: Property 'sessionFactory' is required.
|
--------------------
В действительности всё совсем не так, как на самом деле
|