SALVE HO UN ECCEZIONE DA RISOLVERE

di il
24 risposte

SALVE HO UN ECCEZIONE DA RISOLVERE

Salve chiedo aiuto per un eccezione che non riesco proprio a risolvere sto creando una web application seguendo un corso utilizzando spring/hibernate/postgresql/ l'eccezione e' questa e si presenta solo nelle operazioni crud di create,update,delete che usano il metodo getHibernateTemplate() della library di HibernateDaoSupport, mentre le operazioni retrieve con il metodo getSession() createCriteria.list() funzionano. non capisco perché questa eccezione, a cosa e' dovuta?

com.azienda.progettiCorso.exception.CorsoException
at com.azienda.progettiCorso.transaction.TransactionSupportImpl.execute(TransactionSupportImpl.java:21)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy31.execute(Unknown Source)
at com.azienda.progettiCorso.dao.DaoSpring.create(DaoSpring.java:39)
at com.azienda.progettiCorso.userInterface.struts.action.MateriaDispatchAction.create(MateriaDispatchAction.java:38)
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.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
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 com.azienda.progettiCorso.transaction.TransactionSupportImpl.execute(TransactionSupportImpl.java:17)
... 50 more
Caused by: java.lang.NoSuchMethodError: org.hibernate.Session.getFlushMode()Lorg/hibernate/FlushMode;
at org.springframework.orm.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1125)
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:619)
at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:616)
at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:341)
at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309)
at org.springframework.orm.hibernate5.HibernateTemplate.save(HibernateTemplate.java:616)
at com.azienda.progettiCorso.dao.DaoSpring.createInTransaction(DaoSpring.java:53)
... 55 more


non vi posto tutto perché le dipendenze sono parecchie e nn voglio creare confusione magari chiedetemi cio' che vi serve

24 Risposte

  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    L'eccezione interessante e' la 'NoSuchMethodError' che leggi in fondo al log, subito sotto a '...50 more': il metodo che non esiste dovrebbe essere il 'getFlushMode'.

    Questo capita quando si usano funzionalita' della versione Y di una libreria, ma in produzione si usa la versione X (una versione precedente).

    La compatibilita' di metodi e funzionalita' e' sempre verso le versioni piu' vecchie, NON PUOI avere una compatibilita' verso le versioni piu' nuove/future!
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    @blade44i: chiarisci quale versione esatta di Spring e di Hibernate stai usando.
    Perché (quasi) sicuramente il punto-problema è quello.
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Sto usando hibernate 5.0 e spring 4.2.2 di spring le librerie sono
    Spring aop
    Spring beans
    Spring context
    Spring context support
    Spring core
    Spring espression
    Spring jdbc
    Spring orm
    Spring tx
    Spring web
    Spring webmvc
    Aopalliance
    Aspectjrt
    Aspectjwewer
    Commons beanutils
    Commons dbcp
    Commons digester
    Commons validator
    Commons logging
    Commons pool
    Commons fileupload
    Dom4j
    Ehchache
    Geronimo
    Hibernate Commons annotazion 5.0
    Hibernate core 5.0
    Hibernate jpa
    Jakarta oro
    Jandex 2.0
    Javassist 3.0
    Javax.servlet.jsp.jstl
    Jboss logging
    Jstl
    Postgresql 9.4 jdbc 42.1212
    Xml api
    Struts.Jar
    Classmate
    Antlr
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Devo provare con Spring 3? Il problema è che funziona tutto anche la init () della servlet Springreader che setta l application context nel singleton viene settata all avvio di tomcat e si avvia normalmente quindi nelle classi di implementazioni della dao uso il gethibernatetemplate() con il transactionsupport per gestire le transazioni con Spring solo per i metodi create.update.delete e sono proprio quelli che non funzionano inoltre ho creato una classe mia CorsoException che estende DataAccessException che come vedete viene evocata dopo la create o un update o una delete. La retrieve con getsession () funziona benissimo. Bhoooo
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    blade44i ha scritto:


    Sto usando hibernate 5.0 e spring 4.2.2 di spring le librerie sono
    Spring aop
    Spring beans
    Spring context
    [ ... ]
    Domanda: tutte queste dipendenze sono gestite con Maven? (o tool similare) O sono state prese un po' così come capita da internet senza prestare troppa attenzione o magari ti sono state fornite da qualcuno (docente, collega, amico, ecc..) ?

    Ho verificato adesso sul Maven Central Repository: l'artifact spring-orm : 4.2.2.RELEASE (vedi ) ha delle dipendenze opzionali verso alcuni artifact Hibernate.
    In particolare vedo che la versione 5 di Hibernate indicata è la 5.0.2.Final

    Se hai usato una versione leggermente inferiore es. 5.0.0.Final o 5.0.1.Final allora "potrebbe" (il condizionale è d'obbligo) non essere sufficiente e appropriato.
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Non uso maven le librerie mi sono state fornite dal corso.
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Quindi il problema è questo??? La versione di hibernate?
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Solo che nel video del corso fungono le dipendenze alla web app a me no. Nn capisco proprio dove andare ad indagare se non supero questa eccezione il corso non lo posso proseguire perché devo avere la web app funzionante .. datemi delle dritte magari le provo tutte
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Domandona di rito:
    visto che il problema e' stato identificato e la soluzione pure,
    che tipo di 'dritta' vorresti ricevere?
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Non capisco il problema è dovuto alla versione di hibernate? dove posso vedere le compatibilità tra Spring e hibernate così le verifico in tutta la libreria
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Cmq grazie della risposta proverò a cambiare la versione di hibernate e vi faccio sapere
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    @blade44i: Io ho verificato, per curiosità, i sorgenti di hibernate-core versioni 5.0.2.Final, 5.0.1.Final, 5.0.0.Final e anche di una 4.x (4.3.11.Final) e in tutte queste la interfaccia org.hibernate.Session HA il getFlushMode(). Quindi ci deve essere per forza qualcos'altro di "strano" o inappropriato che sta capitando.

    Il problema è che risolvere queste questioni qui sul forum è oggettivamente "difficile". NON perché è difficile il problema in sé (si risolve ....) ma perché soltanto TU hai la visione completa di cosa stai usando e hai fatto (IDE, application-server o servlet-container, file jar, struttura del progetto, configurazione) ecc.. E non noi che leggiamo le poche righe della discussione senza sapere tutto il resto.
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Ma almeno capire dove devo andare a sbattere. Se mi permettete vi posto la classe daoSpring l interfaccia daointerface l applicationcontext lo strut-config il web-Xml la classe dispatchAulaAction con la dispatchAulaForm e dispatchAulabean le jsp di riferimento questo è solo per una classe di ricerca solo per capire perché non vanno le operazioni crud in qualche modo ho già isolato il problema perché come già vi ho detto il getSession () con il criteria mi funziona per la retrieve invece non funziona il gethibernatetemplate () per le altre operazioni quindi il problema è lì o nelle librerie.
  • Re: SALVE HO UN ECCEZIONE DA RISOLVERE

    Inoltre come già vi ho detto ho creato una classe CorsoException che estende DataAccessException che è l exception che riconosce Spring per la commit o rollback e viene invocata all inizio e a seguire anche la getflushmode, ho creato una classe servlet springreader che settari nel singleton l application context di spring, ho creato una classe transactionsupportimpl che estende transactionsupport che invoca un metodo qualsiasi in riflection che viene settato nell application context per effettuare transazioni su metodi invocati con il pattern se può essere di aiuto vi posto tutte queste classi.
Devi accedere o registrarti per scrivere nel forum
24 risposte