Siemacie
Mam pewien problem, pisze mały projekt oparty na Spring REST 4 + Hibernate 4 jako backend i osobny frontend(ale nie o nim będzie mowa). Może zaczne od tego, że zrobiłem malutki projekt Springa, zrobilem 1 kontroler, serwis i to zwracalo mi jsona, wszystko bylo ok. Osobny projekt (tylko dlatego zeby sprawdzic jak to dziala) zrobilem dla Hibernate(w którym jestem dość świeży). Okazało się, że śmiga, to zamknąłem i wróciłem do projektu Springa, dodałem pare Entities, dodałem DAO itp itp oraz co ważne dodałem do pliku dispatcherServlet-servlet.xml (tam gdzie tworze sobie beany z poziomu xml) 2 ziarna: 1) dataSource (klasy: org.apache.commons.dbcp.BasicDataSource lub org.springframework.jdbc.datasource.DriverManagerDataSource) - który zawiera dane do logowania do bazy, sterownik itd. i 2) sessionFactory (klasa: org.springframework.orm.hibernate4.LocalSessionFactoryBean) - która konfiguruje polaczenie z Hibernate (niżej kod).
I teraz pojawił się problem: osobno sam spring i sam hibernate dzialaja, jednak połączone juz nie. Generalnie błąd goni błąd, jesli jakimś cudem uda sie naprawić jeden, pojawia sie drugi i tak aż stacktrace wynosi pare kartek w microsoft word'zie.
Ale od podstaw: pobralem wersje projektu, która jeszcze była wporządku(sam spring bez hibernate) i zaraz po "połączeniu" (czyli dodaniu do springa konfiguracji hibernate, entities itd. - pojawia się następująca treść:
maj 16, 2014 4:17:25 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags is already defined
maj 16, 2014 4:17:25 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags/form is already defined
maj 16, 2014 4:17:25 PM org.springframework.web.servlet.DispatcherServlet initServletBean
INFO: FrameworkServlet 'dispatcherServlet': initialization started
maj 16, 2014 4:17:25 PM org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
INFO: Refreshing WebApplicationContext for namespace 'dispatcherServlet-servlet': startup date [Fri May 16 16:17:25 CEST 2014]; root of context hierarchy
maj 16, 2014 4:17:25 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/dispatcherServlet-servlet.xml]
maj 16, 2014 4:17:25 PM org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping registerHandlerMethod
INFO: Mapped "{[/rooms],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public com.maciej.dto.Room com.maciej.controllers.RoomsController.getRoomsList()
maj 16, 2014 4:17:25 PM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 5.1.1.Final
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
maj 16, 2014 4:17:26 PM org.springframework.web.servlet.DispatcherServlet initServletBean
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/dispatcherServlet-servlet.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:684)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1189)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1103)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:223)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:120)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:269)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:255)
at org.hibernate.cfg.annotations.reflection.XMLContext.<init>(XMLContext.java:47)
at org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(JPAMetadataProvider.java:29)
at org.hibernate.cfg.Configuration.createReflectionManager(Configuration.java:2543)
at org.hibernate.cfg.Configuration.reset(Configuration.java:298)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:289)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:293)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.<init>(LocalSessionFactoryBuilder.java:137)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:324)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
... 26 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
... 42 more
[2014-05-16 04:17:26,602] Artifact Startup:war exploded: Artifact is deployed successfully
[2014-05-16 04:17:26,603] Artifact Startup:war exploded: Deploy took 3 289 milliseconds
maj 16, 2014 4:17:32 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory manager
Jeśli chodzi o dispatcherServlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="com.maciej"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="username" value="postgres"/>
<property name="password" value="haslo"/>
<property name="url" value="jdbc:postgresql://localhost:5432/test"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
</beans>
Może ktoś z was ma pojęcie o co tu może chodzić? Przeszukałem już całe google, ponad 2 dni to naprawiam i każde rozwiązanie jak mówiłem wczesniej generowało kolejny, większy błąd.
W pom.xml mam dependencies do springa (chyba każde potrzebne: context, core, web, web-mvc, orm), api servletowe, jpa, jacksona, hibernate(core, entity-manager, validator, annotation), sterownik do bazy danych i 2 dodatkowe dependencies które są potrzebne wg tego co wyczytałem: commons-dbcp i commons pool.
Jeśli chcecie jaki kolwiek wycinek kodu, z którego kolwiek miejsca piszcie będe wrzucał. Całości nie wklejam bo sie zrobi post troche za długi :)
Liczę, że ktoś mi pomoże rozwikłać tę zagadkę, pozdrawiam ;)
#edit
może to ważne może nie - ale naprawiając kolejne błędy zauważyłem, że jest pewna zależność: często było wlasnie ClassNotFoundException dla klasy która tak na prawde była w dołączona w projekcie, było tak min z DispatcherServlet, ze sterownikiem z common-dbcp, z jakimiś filtrami hibernate i tak dalej i dalej