I have a problem implementinmg OSIV right.
I am using GenericDAO with OSIV, and a SessionFactory.
Everytime getSession in a DAO is called during the same request, a different Session Object is used and I dont know why. Normally the SessionFactory should prevent this, right? (Every operation within the DAO's calls get Session e.g. to create criteria).
This is what my getSession() Method in the DAO looks like:
The logged hashcode from the SessionFactory is always the same, but different for every Session.Code:protected Session getSession() { if (session == null || !session.isOpen()){ logger.info("Session not set or closed"); try{ this.session = sessionFactory.getCurrentSession(); logger.info("SessionFactory: "+sessionFactory.hashCode()); logger.info("CurrentSession: "+session.hashCode()); } catch (NullPointerException e) { logger.error("SessionFactory nicht gesetz!"); throw new IllegalStateException("Session has not been set on DAO before usage"); } } return session; }
ApplicationContext (some parts are stripped):
Here is the definition of the OSIV-Filter in web.xml:Code:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.c3p0.max_size">${hibernate.c3p0.max_size}</prop> <prop key="hibernate.c3p0.max_size">${hibernate.c3p0.max_size}</prop> <prop key="hibernate.c3p0.min_size">${hibernate.c3p0.min_size}</prop> <prop key="hibernate.c3p0.timeout">${hibernate.c3p0.timeout}</prop> <prop key="hibernate.c3p0.max_statements">${hibernate.c3p0.max_statements}</prop> <prop key="hibernate.c3p0.idle_test_period">${hibernate.c3p0.idle_test_period}</prop> <prop key="hibernate.c3p0.acquire_increment">${hibernate.c3p0.acquire_increment}</prop> <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> <prop key="hibernate.cache.use_query_cache">false</prop> <prop key="hibernate.max_fetch_depth">10</prop> <prop key="hibernate.jdbc.batch_versioned_data">true</prop> <prop key="hibernate.jdbc.use_streams_for_binary">true</prop> </props> </property> <property name="mappingResources"> <list> <value>de/itservices/kp/common/persistence/mapping/Ansprechpartner.hbm.xml</value> <value>de/itservices/kp/common/persistence/mapping/Geschaeftspartner.hbm.xml</value> <value>de/itservices/kp/common/persistence/mapping/Standort.hbm.xml</value> <value>de/itservices/kp/common/persistence/mapping/Anschrift.hbm.xml</value> <value>de/itservices/kp/common/persistence/mapping/GeschaeftspartnerAnschrift.hbm.xml</value> <value>de/itservices/kp/common/persistence/mapping/Bankverbindung.hbm.xml</value> <value>de/itservices/kp/common/persistence/mapping/Ereignis.hbm.xml</value> </list> </property> </bean> <bean id="geschaeftspartnerDAO" class="app.dao.impl.GeschaeftspartnerDAOHibernate" scope="singleton" > <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="standortAdministration" class="app.administration.StandortAdministration" scope="singleton"> <property name="standortDAO" ref="standortDAO" /> </bean>
There are no exceptions during startup of Tomcat, so I excpect everything to be configured correct, at least syntactically.Code:... <filter> <description> Implementierung des OpenSessionInView-Pattern. Funktioniert, warum auch immer, nur mit Mapping auf die Request-URL. Mapping auf das FacesServlet führt scheinbar dazu, dass der Filter nicht aufgerufen wird. </description> <filter-name>HibernateSessionFilter</filter-name> <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> <init-param> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>HibernateSessionFilter</filter-name> <servlet-name>Persistent Faces Servlet</servlet-name> </filter-mapping> <!-- ICEFaces Servlets --> <servlet> <servlet-name>Persistent Faces Servlet</servlet-name> <servlet-class> com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> ...
Is there any fault in wiring-up the components?
Environment:
Tomcat 6.x
ICEfaces 1.7, MyFaces 1.2
Spring 2.5.5
Hibernate 3.x
Thx in advance.


Reply With Quote