Hallo zusammen,
ich hoffe hier kann mir jemand helfen.
Ich nutze Spring mit Hibernate sowie Struts in einer Webapplikation. Um lazy initialize von Hibernate nutzen zu können, habe ich den OpenSessionInViewFilter vom Springframework in die web.xml eingebunden. Läuft auch alles tadellos.
Die Konfiguration von Hibernate erfolgt ebenfalls in applicationContext.xml wobei die Datenbankparameter mittels eines PropertyPlaceholderConfigurer von einer externen conf Datei geliefert werden.
Nun möchte ich jedoch zur Laufzeit die Daten in der externen conf Datei ändern und den ApplicationContext neu laden.
Damit soll ein kompletter Datenbankschwenk möglich sein.
Der Context wird auch neu geladen aber im Anschluss bekomme ich folgendes:
Das Problem liegt darin, dass die HibernateSession geschlossen ist, wenn das System versucht mittels lazy initialize auf die collections zuzugreifen. Ich hab auch den OpenSessionInViewFilter debugged. Er liefert definitiv eine geöffnete HibernateSession.
Ich komm da gerade nicht weiter und hoffe auf eure Hilfe ...
ich hoffe hier kann mir jemand helfen.
Ich nutze Spring mit Hibernate sowie Struts in einer Webapplikation. Um lazy initialize von Hibernate nutzen zu können, habe ich den OpenSessionInViewFilter vom Springframework in die web.xml eingebunden. Läuft auch alles tadellos.
Die Konfiguration von Hibernate erfolgt ebenfalls in applicationContext.xml wobei die Datenbankparameter mittels eines PropertyPlaceholderConfigurer von einer externen conf Datei geliefert werden.
Code:
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>....hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${dialect}</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
...
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
Nun möchte ich jedoch zur Laufzeit die Daten in der externen conf Datei ändern und den ApplicationContext neu laden.
Code:
XmlWebApplicationContext ctx = (XmlWebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(getServlet().getServletContext());
ctx.refresh();
Damit soll ein kompletter Datenbankschwenk möglich sein.
Der Context wird auch neu geladen aber im Anschluss bekomme ich folgendes:
Code:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of ..., no session or session was closed
Ich komm da gerade nicht weiter und hoffe auf eure Hilfe ...