JAVA Web Start - Crash (NoSuchMethodError)

di
Anonimizzato19827
il
15 risposte

JAVA Web Start - Crash (NoSuchMethodError)

Ciao!

Da diverso tempo sulla mia applicazione Web in Java, sto riscontrando un problema che non riesco a risolvere.

Durante il caricamento l'applicazione va in crash, non succede sempre e non succede in tutte le postazioni.
Si chiude anche la Console Java, quindi non è semplice fare dei test e visualizzare lo stack trace.

Ho utilizzato uno strumento fornito dalla JDK, il Java Mission Control, per cercare di ottenere più informazioni sul problema.
Quello che ho notato sono una serie, una decina circa, di NoSuchMethodError. Ma i metodi effettivamente ci sono e sono presenti nel progetto.

Come si possono risolvere questi errori ? Ho visto potrebbe trattarsi di una incongruenza fra le classi compilate e quelle effettivamente eseguite runtime.

Se qualcuno ha qualche idea, si faccia avanti.

Grazie!

15 Risposte

  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    E' un classico problema di quando si compila con una versione di Java e si esegue con un'altra, oppure si usano diverse versioni della stessa libreria di terze parti.

    ASSICURATI che l'ambiente di sviluppo e l'ambiente di esecuzione ABBIANO ESATTAMENTE la stessa versione di TUTTO.

    Una volta fatto questo, e' abbastanza ragionevole avere in ambiente di produzione versioni di java e librerie PIU' AGGIORNATE dell'ambiente di sviluppo.

    MAI IL CONTRARIO!!!!!!!
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    migliorabile ha scritto:


    E' un classico problema di quando si compila con una versione di Java e si esegue con un'altra, oppure si usano diverse versioni della stessa libreria di terze parti.

    ASSICURATI che l'ambiente di sviluppo e l'ambiente di esecuzione ABBIANO ESATTAMENTE la stessa versione di TUTTO.

    Una volta fatto questo, e' abbastanza ragionevole avere in ambiente di produzione versioni di java e librerie PIU' AGGIORNATE dell'ambiente di sviluppo.

    MAI IL CONTRARIO!!!!!!!
    Grazie mille per la risposta, almeno ho identificato la causa del problema...
    In effetti, per inesperienza, su queste cose non ci ho ragionato a sufficienza e molto probabilmente è come dici tu...

    Quindi a questo punto, se non ho inteso male, conviene ricompilare tutto il progetto con una versione di Java datata (in base all'ultima considerazione che hai fatto) e creare un nuovo .war del progetto.

    Per il resto, per essere più precisi dove dovrei controllare?
    Uso Netbeans, nelle impostazioni del progetto ho visto che è presente una voce "Piattaforma Java" e attualmente è impostata la JDK 1.8, così come su Source/Binary format vi è JDK 8.
    Poi controllerò le versioni e i path delle librerie... ti riferivi a queste cose ?
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Il crash dell'applicazione (della JVM) può essere causato da uno o più NoSuchMethodError?
    Non potendo gestire gli Error, credo l'unica soluzione sia riuscire a risolverli.

    Un file build.xml mal scritto, nel progetto di Netbeans, potrebbe essere una causa?
    Credo non sia stato aggiornato di recente e con il passare del tempo potrebbe essere cambiata qualche libreria o classpath.

    Se qualcuno può avere una vaga idea mi faccia sapere
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    No!

    Intanto NON E' la JVM che va in crash, ma la tua applicazione!

    Certo che l'applicazione puo' terminare per un 'NoSuchMethodError'.

    Il problema e' che NON DOVRESTI MAI AVERE TALE TIPO DI PROBLEMA.

    Il file build.xml non centra nulla. E' solo uno script (in XML) che dice quali JAR usare e quale versione di Java usare per la compilazione


    Ripeto: ricompila tutto ED ASSICURATI DI AVERE TUTTE LE LIBRERIE corrette e per la corretta versione della JVM uguale o precedente a quella che usi, MAI successiva).

    E ASSICURATI di usare la CORRETTA versione della JVM.

    Quasi sicuramente al momento hai installato 2 o piu' JVM!

    La JVM usata da Netbeans NON LA DEVI TOCCARE!

    Ma, FONDAMENTALE, NON E' QUESTA la JVM che devi usare per la compilazione.

    Per compilare USA UNA JVM CHE HAI INSTALLATO esplicitamente a tale scopo.

    In questo modo SEI SICURO della versione di Java che stai utilizzando.

    Comunque, per capirci qualcosa, DEVI innanzitutto capire quale e' il metodo che non c'e'!
    Da li puoi fare i ragionamenti del caso.
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Attraverso il Java Mission Control sono riuscito a identificare i punti in cui si verificano i NoSuchMethodError (sono sempre quei 7-8 metodi) .

    Ovviamente i metodi sono tutti presenti nel progetto compilato.

    Forse dovrei verificare se anche a runtime questi metodi effettivamente ci sono oppure no e in quest'ultimo caso perchè non vengono trovati. Anche se non ho ben chiaro a questo punto come muovermi, una volta identificati i metodi...

    Quindi mi sembra di capire che questo tipo di problema si risolva attraverso l'ambiente di sviluppo, è legato alla versione di Java o alle librerie... Quindi nulla a che vedere con il codice.

    Grazie.
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Ho identificato i NoSuchMethodError...
    In tutti i casi si verifica nel metodo readObject dell'ObjectInputStream durante la deserializzazione quindi.
    E ho notato che questo succede soltanto nei casi in cui l'Object ritornato dalla deserializzazione è di una classe complessa (ArrayList, List) oppure una classe da me definita.
    In tutti i casi in cui l'Object ritornato è ad esempio una String, un Integer, un Object generico non succede nulla.
    Non so se possa essere un ulteriore indizio.
    
    	java.lang.NoSuchMethodError.<init>(String)
    	java.io.ObjectStreamClass.hasStaticInitializer(Class)
    	java.io.ObjectStreamClass.computeDefaultSUID(Class)
    	java.io.ObjectStreamClass.access$100(Class)
    	java.io.ObjectStreamClass$1.run()
    	java.security.AccessController.doPrivileged(PrivilegedAction)
    	java.io.ObjectStreamClass.getSerialVersionUID()
    	java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass, Class, ClassNotFoundException, ObjectStreamClass)
    	java.io.ObjectInputStream.readNonProxyDesc(boolean)
    	java.io.ObjectInputStream.readClassDesc(boolean)
    	java.io.ObjectInputStream.readOrdinaryObject(boolean)
    	java.io.ObjectInputStream.readObject0(boolean)
    	java.io.ObjectInputStream.readObject()
    	...
    
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Andrew Snow ha scritto:


    Ho identificato i NoSuchMethodError...
    Dovesti anche dire QUALE metodo NON sta trovando.
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    andbin ha scritto:


    Andrew Snow ha scritto:


    Ho identificato i NoSuchMethodError...
    Dovesti anche dire QUALE metodo NON sta trovando.
    La prima parte è uguale per tutti i NoSuchMethodError...
    Poi il resto del trace (codice in rosso) cambia in base al metodo che non trova, questo qui è un esempio.


    ...
    java.io.ObjectInputStream.readObject()
    jasef2.cs.ObjectSreamingManager.unzip(InputStream)
    jasef2.client.HttpMessage.sendPostRequest(Object)
    jasef2.client.TransferModel.sendRequest(WMIRequest) jasef2.client.TransferModel.inviaMetodo(WMIObjMethodRequest)
    client.ClientController.getObject(String, String[], Object[])
    client.ClientController.getMetodoProva()
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Andrew Snow ha scritto:


    Poi il resto del trace (codice in rosso) cambia in base al metodo che non trova, questo qui è un esempio.
    No, NON è quello il metodo che non trova! Quello che hai evidenziato in rosso (getMetodoProva() ) è uno dei metodi molto "a monte" nello stack delle invocazioni.
    Se sbuca fuori un NoSuchMethodError, generalmente il message descrittivo lo dice quale è il metodo che non trova.
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Lo stack trace completo che ho trovato è questo..
    Tramite JavaMissionControl... Se ci sono altri modi per trovarne altri non so.
    java.lang.Error.<init>(String)
    java.lang.LinkageError.<init>(String)	
    java.lang.IncompatibleClassChangeError.<init>(String)
    java.lang.NoSuchMethodError.<init>(String)
    java.io.ObjectStreamClass.hasStaticInitializer(Class)	
    java.io.ObjectStreamClass.computeDefaultSUID(Class)
    java.io.ObjectStreamClass.access$100(Class)
    java.io.ObjectStreamClass$1.run()
    java.io.ObjectStreamClass$1.run()
    java.security.AccessController.doPrivileged(PrivilegedAction)
    java.io.ObjectStreamClass.getSerialVersionUID()
    java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass, Class, ClassNotFoundException, ObjectStreamClass)
    java.io.ObjectInputStream.readNonProxyDesc(boolean)
    java.io.ObjectInputStream.readClassDesc(boolean)
    java.io.ObjectInputStream.readOrdinaryObject(boolean)
    java.io.ObjectInputStream.readObject0(boolean)
    java.io.ObjectInputStream.readObject()	
    java.util.Hashtable.readObject(ObjectInputStream)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
    sun.reflect.NativeMethodAccessorImpl.invoke(Object, Object[])	
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Object, Object[])
    java.lang.reflect.Method.invoke(Object, Object[])
    java.io.ObjectStreamClass.invokeReadObject(Object, ObjectInputStream)	
    java.io.ObjectInputStream.readSerialData(Object, ObjectStreamClass)
    java.io.ObjectInputStream.readOrdinaryObject(boolean)
    java.io.ObjectInputStream.readObject0(boolean)
    java.io.ObjectInputStream.readObject()
    jasef2.cs.ObjectSreamingManager.unzip(InputStream)
    jasef2.client.HttpMessage.sendPostRequest(Object)
    jasef2.client.TransferModel.sendRequest(WMIRequest)
    jasef2.client.TransferModel.inviaMetodo(WMIObjMethodRequest)
    jsigprog.client.ClientController.getObject(String, String[], Object[])
    client.ClientController.getMetodoProva()
    client.ClientController$1.run()
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Andrew Snow ha scritto:


    Lo stack trace completo che ho trovato è questo..
    Ma NON basta per capire COSA viene passato al costruttore di NoSuchMethodError.

    Se la webapp è deployata su un Servlet container o Application Server ... da qualche parte ci deve essere una traccia ... un file di log, una console accessibile via web del Application Server o che altro.
    Non può cadere tutto nel vuoto così ....
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Si, deployata su server Tomcat. Provo a vedere se trovo qualche log lì.. Grazie intanto!
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    Andrew Snow ha scritto:


    Si, deployata su server Tomcat. Provo a vedere se trovo qualche log lì.. Grazie intanto!
    La directory "logs" sotto la "home" di installazione del Tomcat. Se logga qualcosa, è lì che lo fa.
  • Re: JAVA Web Start - Crash (NoSuchMethodError)

    andbin ha scritto:


    Andrew Snow ha scritto:


    Si, deployata su server Tomcat. Provo a vedere se trovo qualche log lì.. Grazie intanto!
    La directory "logs" sotto la "home" di installazione del Tomcat. Se logga qualcosa, è lì che lo fa.
    Dentro la cartella logs trovo alcuni file di log fra cui:
    - catalina.2016-08-18
    - localhost_access_log.2016-08-18
    - manager.2016-08-18
    - host-manager.2016-08-18

    Quale potrebbe essere?
    Comunque ho visto che modificando il file logging.properties è possibile impostare il livello di trace di questi file, devo trovare il modo di configurarlo bene per avere dei log appropriati credo.
Devi accedere o registrarti per scrivere nel forum
15 risposte