Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Hi,

ben op het moment bezig met een project dat gebruikt maakt van de Google Web toolkit, Spring en Hibernate.

Nu ben ik al vrij ver met het bouwen van de applicatie en staat er een mooi basis, maar ik krijg nu in het begin van het laden van de applicatie een nullpointer exception.
SEVERE: Exception while dispatching incoming RPC call
java.lang.RuntimeException: com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List com.******.fca.******.client.advancedtable.TableService.applyDataFilters(java.lang.String[],java.lang.String,com.******.fca.******.client.advancedtable.TableColumn[],boolean)' threw an unexpected exception: java.lang.NullPointerException
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:150)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:85)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:168)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List com.******.fca.******.client.advancedtable.TableService.applyDataFilters(java.lang.String[],java.lang.String,com.******.fca.******.client.advancedtable.TableColumn[],boolean)' threw an unexpected exception: java.lang.NullPointerException
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:360)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:319)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:143)
... 21 more
Caused by: java.lang.NullPointerException
at org.hibernate.engine.StatefulPersistenceContext.clear(StatefulPersistenceContext.java:188)
at org.hibernate.impl.SessionImpl.cleanup(SessionImpl.java:445)
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:306)
at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:86)
at org.springframework.orm.jpa.JpaTransactionManager.doCleanupAfterCompletion(JpaTransactionManager.java:518)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:919)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:712)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:319)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy22.getByStatus(Unknown Source)
at com.******.fca.******.server.DriverGWTServiceImpl.getdriversByState(DriverGWTServiceImpl.java:107)
at com.******.fca.******.server.DriverGWTServiceImpl.applyDataFilters(DriverGWTServiceImpl.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:127)
... 21 more
Het betreft een web applicatie die bij het laden van de eerste pagina een tabel met gegevens laad. Het rare is dat het laden wel lukt. Ik krijg gegevens op het scherm. Wat ook raar is, is dat het alleen gebeurt bij het starten van de applicatie.

Ik heb zelf niet echt een idee. En ben niet een expert in hibernate helaas:( :)

Iemand een idee?

Groet,

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
Tja, met alleen een stacktrace kunnen we ook niet veel.
Wat heb je eigenlijk zelf al geprobeerd om de oorzaak van het probleem te achterhalen ?

Ben je zeker dat het gaat over een probleem dat door Hibernate veroorzaakt wordt ?
Wat doe je precies op het moment dat die exceptie voorbij komt ?
etc...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Vraag maar wat je nog meer moet hebben? :)

Ik heb zelf eigenlijk geen idee hoe het probleem veroorzaakt wordt. Ik denk dat het door hibernate komt en dan voornamelijk bij het afronden van de call. De call gaat immers goed....alleen krijg ik wel een nullpointer exception. Verder staat er bij de exception woorden als, clean close en clear...

Het rare is dat de calls later wel goed gaan. De data staat in een tabel.
Wanneer ik de tabel de 1e keer laad -> exception
Ga ik sorteren of refreshen of wat dan ook -> geen exception

Verder is de error niet schadelijk voor het verloop van de applicatie. Ik laat nu alle exceptions in een popup verschijnen, als ik dit bij deze error uitzet merk/zie ik de fout niet meer. Alleen is dat natuurlijk niet de bedoeling.

Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 11-09 08:52
Een gok: gaat het hier misschien om gerelateerde gegevens die geladen worden?
Misschien dat je Hibernate sessie de eerste keer enkel functioneert voor je hoofdobject, maar niet wanneer je een Set wil uitlezen op je template.(Lazy fetch)
Als je de volgende keren dit doet dan is je sessie waarschijnlijk wel in orde en dan heb je de error niet meer.

Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Mmmm, ik laadde gerelateerde gegevens, alleen waren de gegevens altijd leeg want er bestonden nog geen gegevens van.Ik heb de relatie weggehaald maar nu heb ik in plaats van de nullpointer exceptie een andere namelijk de volgende: (tevens nog steeds onder dezelfde omstandigheden)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:127)
... 21 more
Caused by: javax.persistence.RollbackException: Error while commiting the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:438)
... 37 more
Caused by: java.lang.NullPointerException
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:119)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
... 38 more

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
Tja, nogmaals: met deze informatie kunnen we je niet helpen.
Probeer zelf eens te debuggen: wat gebeurd er dat deze exceptie veroorzaakt, wat zegt deze exceptie precies, wat is de InnerException , etc...
Je ontwikkelomgeving zal toch wel genoeg tools voorzien waarmee je dit allemaal kunt achterhalen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Wat wil je precies weten dan? Zie vorige post...

Ik heb geprobeerd te debuggen, maar ik kwam er niet veel verder mee. Ben niet erg bekend met het debuggen, maar ik kom wel redelijk ver..

Waar zie jij een inner Exception?

Ik werk met Eclipse, Tomcat 6, Spring en Maven

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
jesselyn schreef op woensdag 06 augustus 2008 @ 11:08:
Wat wil je precies weten dan? Zie vorige post...
Dat heeft whoami al 2 keer gezegd. Wat doe je op het moment dat die exception voorbij komt?

Zonder meer achtergrond informatie kunnen wij alleen maar gokken naar wat de oorzaak zou kunnen zijn. Wat is het totaal proces waar deze method call deel uit maakt? Wat moet deze methode doen in dat proces? Zonder context vraag je hetzelfde als: "Mijn computer doet t niet, weet jij wat er mee is?"

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
jesselyn schreef op woensdag 06 augustus 2008 @ 11:08:
Wat wil je precies weten dan? Zie vorige post...

Ik heb geprobeerd te debuggen, maar ik kwam er niet veel verder mee. Ben niet erg bekend met het debuggen, maar ik kom wel redelijk ver..
Als je programmeert , is kunnen debuggen één van de dingen die tot je essentiële skillset moeten behoren. Debuggen is niet moelijk; je IDE biedt je de nodige tools (breakpoints, step over, step into, watches).
Verder: wat Deathraven al zegt ...
Waar zie jij een inner Exception?
Sorry, een innerException is iets '.NET's', maar ik vermoed dat Java wel een gelijkaardig mechanisme kent (een Exception die gewrapped is rond een andere exceptie; die gewrapte exceptie (als er één is), bevat meestal meer info over de echte oorzaak van het probleem.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Debuggen: Volgens de stacktrace zit de nullpointer exception vrij diep..Heeft debuggen dan veel zin? Ik heb mijn eigen code gedebugt, maar daar kloppen alle waardes gewoon...\

Ik zal proberen een uitgebreidere post te maken. De exceptie is inmiddels weer de oude:? Dat is dus de volgende:
SEVERE: Exception while dispatching incoming RPC call
java.lang.RuntimeException: com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List com.****.fca.****.client.advancedtable.TableService.applyDataFilters(java.lang.String[],java.lang.String,com.****.fca.****.client.advancedtable.TableColumn[],boolean)' threw an unexpected exception: org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while commiting the transaction
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:150)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:85)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.handleRequest(GWTRPCServiceExporter.java:168)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List com.****.fca.****.client.advancedtable.TableService.applyDataFilters(java.lang.String[],java.lang.String,com.****.fca.****.client.advancedtable.TableColumn[],boolean)' threw an unexpected exception: org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while commiting the transaction
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:360)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:319)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:143)
... 21 more
Caused by: org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while commiting the transaction
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:447)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:319)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy21.getByStatus(Unknown Source)
at com.****.fca.****.server.DriverGWTServiceImpl.getdriversByState(DriverGWTServiceImpl.java:107)
at com.****.fca.****.server.DriverGWTServiceImpl.applyDataFilters(DriverGWTServiceImpl.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.gwtwidgets.server.spring.GWTRPCServiceExporter.processCall(GWTRPCServiceExporter.java:127)
... 21 more
Caused by: javax.persistence.RollbackException: Error while commiting the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:438)
... 37 more
Caused by: java.lang.NullPointerException
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:119)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
... 38 more
Ik heb een applicatie met 3 lagen en een domein laag.

De web laag is gebouwd met GWT die AJAX calls gebruikt om data te laden
De data access laag is gebouwd met Hibernate.

Wanneer ik de applicatie deploy en de web applicatie in mijn browser laad, moet de applicatie personen met de status ACTIVE laden. Dit is terug te zien in de stacktrace met de regel "DriverGWTServiceImpl.getdriversbyState" Deze GWT service is nog de web laag.

De GWT Web laag heeft een object naar de service laag die met behulp van Spring aan elkaar worden gewired.

Deze service laag voert de call verder uit. Zie regel "$Proxy21.getByStatus(Unknown Source)" (Is dit wel juist hoort deze call zo te gaan?).

De service laag heeft weer een link naar de data access laag die de methode getByCriteria uitvoert. (Waarom is dit niet terug te zien in de stacktrace?)

De data access doet vervolgens de call naar een MySQL database.

Bij een AJAX call met GWT kun je 2 methodes definieren. Wanneer de call goed gaat (onSuccess) en wanneer de call fout gaat (onFailure). Bij onFailure laat ik de error in een popup op het scherm komen. Onsuccess zet de verkregen data in een tabel. Beide worden uitgevoerd. ....

Genoeg informatie? :)

[ Voor 1% gewijzigd door jesselyn op 06-08-2008 12:07 . Reden: Extra info over debuggen ]


Acties:
  • 0 Henk 'm!

Verwijderd

whoami schreef op woensdag 06 augustus 2008 @ 12:04:
Sorry, een innerException is iets '.NET's', maar ik vermoed dat Java wel een gelijkaardig mechanisme kent ...
'Nested Exception'

Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Niemand? :) Of is de info nog niet goed genoeg?

Ik zit een beetje in tijdnood op het moment namelijk. Morgen moet ik een overdrachtsversie opleveren en het liefst een bugvrije applicatie. (vandaar deze kick)

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Bijvoorbeeld je aanroepende code, hibernate cfg, spring cfg.

Hoe zijn je entities gemapped? Wat voor datasource/transactie settings heb je?

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Hier is mijn spring.xml
<bean id="gwtUrlMapping" class="org.gwtwidgets.server.spring.GWTHandler">
<!-- zero comes before one -->
<property name="mappings">
<map>
<!-- GWT remote services that will be exposed as GWT RPC services -->
<entry key="/driverService.rpc" value-ref="driverRpcService"/>
</map>

</property>
</bean>

<bean id="driverRpcService" class="com.***.fca.***.server.DriverGWTServiceImpl">
<constructor-arg index="0" ref="driverService"/>
</bean>
Service-config.xml
<bean id="driverService" class="com.***.fca.***.services.impl.DriverServiceImpl" lazy-init="false">
<constructor-arg ref="driverDAO"/>
</bean>


<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="obtain*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="serviceOperation"
expression="execution(* com.*****.fca.***.services.*Service.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
</aop:config>
Data access-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframewor...ns/spring-beans-2.5.xsd">

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:database.properties"/>
</bean>

<bean id="driverDAO" class="com.***.fca.***.dataaccess.impl.DriverDAOImpl"/>


<!-- infrastructure beans -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="fca-persistence"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="${hibernate.sql.dialect}"/>
<property name="generateDdl" value="${hibernate.sql.generateddl}"/>
<property name="showSql" value="${hibernate.sql.show}"/>
</bean>
</property>
<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverclass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

</beans>
Aanroepende code op web laag.
List<Driver> drivers = this.baseService.getByStatus(driver
.getDriverStatus());
code op service laag:
public List<Driver> getByStatus(DriverStatus driverStatus) {
return baseDAO.getDriversByCriteria(Restrictions.eq("driverStatus",
driverStatus));
}
Call op data access laag. Neem aan dat de wrapper goed gaat aangezien de call gewoon lukt.
Kan het liggen aan de session?
@SuppressWarnings("unchecked")
public List<Driver> getDriversByCriteria(Criterion... criterions) {
session = ((HibernateEntityManager) entityManager).getSession();
CriterianWrapper criterianWrapper = new CriterianWrapper(session,
Driver.class);
return (List<Driver>) criterianWrapper.executeCriteria(criterions);
}
Het mappen van de entities gebeurt via annotations...

[ Voor 9% gewijzigd door jesselyn op 08-08-2008 10:57 ]


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Niemand? :'(

Laatste kick... anders moet ik maar een applicatie met bug opleveren

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 10-09 16:03
8 dagen verder en je hebt het zelf nog niet opgelost? Wat heb je zelf al geprobeerd? Met alleen code hier neer pleuren kunnen wij ook niet veel natuurlijk

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Wat er gebeurt, is dat Hibernate de sessie flushed op een aantal standaard momenten. Eén van die momenten is voor een leesactie (je Criteria query dus).

Hierbij worden associaties mee persisted, afhankelijk van je cascade settings.

Download gewoon eens de sources. Dan kun je iig door je code steppen (breakpoint zetten in org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:119)) en ff kijken bij welke entity het misgaat. Dan kun je wat gerichter zoeken naar eventuele fouten in je mapping files/annotations.

Maar dan nog, een nullpointer uit zo'n core klasse van het framework is niet goed. Ik zou een Hibernate bug posten als ik jou was.

Wat ook kan, is een concurrency probleem. Dat is wel vaker het probleem bij onverklaarbare nullpointers.

Fat Pizza's pizza, they are big and they are cheezy


  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
@Groov....
8 dagen verder idd.. Ik heb ook nog ander werk naast die applicatie. Enig idee wat ik zelf kan proberen? Sorry hoor, maar ik heb genoeg moeite gedaan om er achter te komen wat nu precies de fout was, waar precies, en daaruit conclusies getrokken. Als je alleen kan zeggen dat ik dingen die ik geprobeerd heb moet posten kun je ook wel noemen wat ik bijvoorbeeld al had kunnen proberen.

@JKVA
Ik heb op dit moment maar 1 entity, maar ik ga iig het proberen. Verder zal ik een hibernate bug posten en kijken wat daaruit komt.

Kun je wat meer vertellen over zo'n concurrency probleem?

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Hmm, er valt heel veel te vertellen over concurrency, maar weinig zinnigs zonder de hele context te kennen.

Bij nader inzien denk ik ook niet dat dat het probleem is.

Wat ik in eerste instantie met concurrency problemen bedoel, is dat een nullpointer diep in de core van zo'n veelgebruikt framework vreemd is. Die code is namelijk al miljoenen keren getest. Het probleem van concurrency is dat het vrijwel niet te testen is, maar als het bij jou steeds fout gaat, is een concurrency probleem vrij onwaarschijnlijk. Ik doelde hierbij op Java concurrency.

Ik neem aan dat het altijd fout gaat tenminste? Of af en toe?

Wat namelijk ook kan, is dat je de Hibernate session onjuist gebruikt. Bijvoorbeeld omdat je hem niet altijd goed afsluit, waardoor je entities in de session cache 'blijven hangen'. Het valt me namelijk op dat Hibernate dingen wil flushen terwijl jij één of andere zoekfunctie aanroept. Je pointcut expression lijkt me op het eerste gezicht ok, maar kan de fout ook zitten.

Sorry, veel concreter dan dit kan ik het niet maken...

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Nee, de applicatie crasht alleen even in het begin. Dus bij de eerste keer aanroepen van de methode. Daarna gaat het tot nu toe altijd goed. Maakt dit het misschien wat duidelijker?

Verder krijg ik wel gewoon gegevens terug van mijn aanroep. Feit is wel dat er een nullpointer geregistreerd wordt in de logs van mijn tomcat server.

Het probleem is daardoor niet 'heel erg' maar wel not-done als je iets oplevert...

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

In dat geval, doe je database mutaties (feitelijk objectmodel mutaties) tijdens het opstarten van je app?

Die flush gaat niet voor niks af. Er moet iets te flushen zijn.

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • jesselyn
  • Registratie: Januari 2007
  • Laatst online: 10-09 22:20
Inderdaad! Wanneer ik de applicatie start (web applicatie) moet hij alle actieve personen laden. Er zijn dus geen mutaties in de zin van het createn, updaten of deleten van objecten.

Nu heb ik even goed opgezegd wat flushen betekent, maar ik krijg het niet helemaal duidelijk voor mezelf.

"From time to time the Session will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory"

Hij synchroniseert dus de status van de objecten in het geheugen met de staat van de JDBC connectie :??

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Kort door de bocht, hij voert voor elk object dat bij hem bekend is als nieuw (en dus nog niet in de DB staat), voor elk object dat gemarkeerd is als dirty (ofwel gewijzigd is, maar die wijzigingen staan nog niet in de DB) en voor elk object dat verwijderd is (en nog geen delete query heeft plaatsgevonden) een resp. insert, update of delete query uit.

Als er niets te muteren valt, hoeft er ook niet geflushed te worden.

Maar goed, aan de foutmelding te zien doe je toch mutaties op die personen, voordat de query afgaat. Of misschien vlak erna. Stack traces zijn niet altijd betrouwbaar qua volgorde... :(

Fat Pizza's pizza, they are big and they are cheezy

Pagina: 1