Guten Morgen zusammen,
ich habe hier ein wohl eher komisches Problem mit Hibernate. Vorweg, wir verwenden Hibernate über die Spring Schnittstellen - bisher ohne weitere Probleme.
Zum Problem:
Wir bekommen eine LazyInitializationException noch innerhalb des Dao's, sobald Zugriff auf eine Map, Liste oder sonst ein als Lazy definiertes Objekt erfolgt.
Die Verwaltung der Session erfolgt über das OpenSessionInView-Pattern (implementiert von Spring), d.h. ist davon auszugehen das die Session zu diesem Zeitpunkt auf jeden Fall noch vorhanden ist.
Das laden der Beans erfolgt über die get(); Methode. Testweise umgestellt auf load(); kommt die Exception sofort, auch ohne Zugriff auf die Referenzen. Komisch ist die Tatsache das wir an anderen Stellen garkeine Probleme mit Lazy haben, an anderen wiederum ebenfalls - trotz Zugriff auf das selbe Bean.
Aufgefallen ist dieser Fehler erst nach einer Umsellung des Systems. Vorher wurden sämtliche Dao's über die Transaktionssteuerung von Spring verwaltet. Zusätzlich wird die Datenbank neuerdings durch Hibernate selbst erstellt, was zuvor alles manuell geschah. Der genaue Zeitpunkt nach welcher Umstellung der Fehler auftrat lässt sich leider nicht mehr reproduzieren.
Hibernate version:
3.0.5
Datenbank:
Oracle 10i
Mapping:
<class
name="com.lp.logstarJ.modules.bk.backend.db.PaketKopfBean"
table="BK_PaketKopf">
<meta attribute="class-description">Diese Klasse verwaltet die zu kommissionierenden Pakete</meta>
<meta attribute="class-code">
<![CDATA[
/**
* Serial
*/
private static final long serialVersionUID = -7261768383838597991L;
]]>
</meta>
<id
name="paketId"
column="PaketId"
type="int">
<meta attribute="field-description">Identifier Paket-Kopf</meta>
<generator class="sequence">
<param name="sequence">BK_PaketKopf_SQ</param>
</generator>
</id>
<version
name="version"
column="version">
<meta attribute="field-description">Versions-Nummer</meta>
</version>
<many-to-one
name="firmenNr"
column="FirmenNr"
class="com.lp.logstarJ.system.shared.backend.db.FirmenBean"
lazy="proxy">
<meta attribute="field-description">Verknüpfung zur Firma</meta>
</many-to-one>
<property
name="paketNr"
column="PaketNr"
type="java.lang.String"
length="15"
update="false"
insert="true"
not-null="true">
<meta attribute="field-description">Paket-Nr. - Bei der Übernahme der Aufträge in die Kommissionierung wird das Feld mit Auftrags-Nummer belegt. Werden Pakete manuell gebildet, wird die Paket-Nr. aus einem Paket-Nr-Kreis generiert.</meta>
</property>
<property
name="prio"
column="pri"
type="java.lang.String"
length="3"
update="true"
insert="true">
<meta attribute="field-description">Priorität</meta>
</property>
<property
name="ErfassungDt"
column="ErfassungsDatum"
type="java.util.Date"
update="false"
insert="true">
<meta attribute="field-description">Erfassungsdatum</meta>
</property>
<property
name="status"
column="Sts"
type="java.lang.String"
length="2"
update="true"
insert="true">
<meta attribute="field-description">Status</meta>
</property>
<property
name="statusUnt"
column="StsUnt"
type="java.lang.String"
length="1"
update="true"
insert="true">
<meta attribute="field-description">Status Angehalten</meta>
</property>
<property
name="statusTime"
column="StsTime"
type="java.util.Date"
update="true"
insert="true">
<meta attribute="field-description">Status Timestamp</meta>
</property>
<bag
name="paketpositionen"
lazy="true">
<meta attribute="field-description">Liste der Paketpositionen</meta>
<key column="PaketId" />
<one-to-many class="com.lp.logstarJ.modules.bk.backend.db.PaketPositionBean" />
</bag>
<many-to-one
name="kommissionierer"
class="com.lp.logstarJ.modules.bk.backend.db.KommissioniererBean"
column="KomId"
cascade="all"
lazy="proxy">
<meta attribute="field-description">Enthält den zugeordneten Kommissionierer</meta>
</many-to-one>
</class>
Stack trace:
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at com.lp.logstarJ.modules.bk.backend.db.KommissioniererBean$$EnhancerByCGLIB$$dfe0c2dd.toString(<generated>)
at com.lp.logstarJ.modules.bk.backend.db.dao.PaketDaoHbImpl.getPaketkopf(PaketDaoHbImpl.java:30)
at com.lp.logstarJ.modules.bk.backend.business.ServiceImpl.getPaketKopf(ServiceImpl.java:266)
at com.lp.logstarJ.modules.bk.frontend.kom.backingBeans.Auftragsdaten.getPaketKopf(Auftragsdaten.java:142)
at com.lp.logstarJ.modules.bk.frontend.kom.backingBeans.Auftragsdaten.getAuftragKopf(Auftragsdaten.java:152)
at com.lp.logstarJ.modules.bk.frontend.kom.backingBeans.Auftragsdaten.getAnzahlAuftragKopfTexte(Auftragsdaten.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:438)
at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:82)
at com.sun.facelets.el.LegacyELContext$LegacyELResolver.getValue(LegacyELContext.java:141)
at com.sun.el.parser.AstValue.getValue(AstValue.java:96)
at com.sun.el.parser.AstGreaterThan.getValue(AstGreaterThan.java:20)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
at com.sun.facelets.tag.TagAttribute.getObject(TagAttribute.java:233)
at com.sun.facelets.tag.TagAttribute.getBoolean(TagAttribute.java:79)
at com.sun.facelets.tag.jstl.core.IfHandler.apply(IfHandler.java:49)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:165)
at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:94)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.ui.DefineHandler.apply(DefineHandler.java:58)
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:128)
at com.sun.facelets.impl.DefaultFaceletContext$1.apply(DefaultFaceletContext.java:253)
at com.sun.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:263)
at com.sun.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:63)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:136)
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:113)
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:408)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:442)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.lp.logstarJ.system.login.common.CheckValidAuthFilter.doFilter(CheckValidAuthFilter.java:92)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.lp.logstarJ.util.RequestTimeFilter.doFilter(RequestTimeFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
Hoffe hier hat jemand eine hilfreiche Idee, meine gehen mir langsam aus ;)
Grüße,
Helge
|