2009-10-15 6 views
5

Nous avons une application Web Java qui échoue sporadiquement à trouver des bibliothèques cryptographiques. Actuellement, le redémarrage de l'application résout le problème.La bibliothèque de cryptographie Java ne démarre pas sporadiquement

Les attentes suivantes apparaissent dans les journaux, voir ci-dessous pour la trace complète de la pile.

java.lang.InternalError: Could not start up the CDSA libraries. 
java.lang.NoClassDefFoundError: Could not initialize class com.apple.crypto.provider.HmacMD5 

L'application est construite à l'aide Java 1.6.0_15 et est déployé pour 1.6.0_13 courir sur Mac OS X Server 10.5.8 (9L30)

Toutes les idées?

Vive

Jono

Build Java version 
java version "1.6.0_13" 
Java(TM) SE Runtime Environment (build 1.6.0_13-b03-211) 
Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02-83, mixed mode) 

Deployed Jave version 
java version "1.6.0_15" 
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-226) 
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-92, mixed mode) 

Full stack trace: 

java.lang.NoClassDefFoundError: Could not initialize class com.apple.crypto.provider.HmacMD5 
     at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
     at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1881) 
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1782) 
     at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
     at java.lang.System.loadLibrary(System.java:1047) 
     at com.apple.crypto.provider.HmacCore.<clinit>(HmacCore.java:26) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at java.lang.Class.newInstance0(Class.java:355) 
     at java.lang.Class.newInstance(Class.java:308) 
     at java.security.Provider$Service.newInstance(Provider.java:1221) 
     at javax.crypto.Mac.a(DashoA13*..) 
     at javax.crypto.Mac.init(DashoA13*..) 
     at com.sun.net.ssl.internal.ssl.MAC.<init>(MAC.java:94) 
     at com.sun.net.ssl.internal.ssl.CipherSuite$MacAlg.newMac(CipherSuite.java:429) 
     at com.sun.net.ssl.internal.ssl.Handshaker.newWriteMAC(Handshaker.java:407) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.changeWriteCiphers(SSLSocketImpl.java:1791) 
     at com.sun.net.ssl.internal.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:607) 
     at com.sun.net.ssl.internal.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:868) 
     at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:794) 
     at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:226) 
     at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516) 
     at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112) 
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623) 
     at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) 
     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) 
     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) 
     at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506) 
     at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114) 
     at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) 
     at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) 
     at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 
     at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
     at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) 

Répondre

1

Votre erreur ne signifie pas que la classe est introuvable. "Impossible d'initialiser la classe com.apple.crypto.provider.HmacMD5" signifie que le bloc d'initialisation statique (static { ... }) a provoqué une exception. Avez-vous accès au code source de MmacMD5?

Nous avons déjà eu un problème similaire lorsque le bloc statique a échoué en raison d'un serveur X inaccessible - mais seulement si aucune session SSH X-forwarding-enabled-enabled n'était disponible pour le serveur. (La classe enregistrait des polices pour les utiliser plus tard pour le rendu des images)

0

Comme "sfussenegger" a écrit, il est lié à la méthode static {}. Si vous ne trouvez pas de documentation ou de code source utile, essayez un décompilateur (si la licence ne vous convient pas, bien sûr). J'ai vu des problèmes avec les librairies de crypto également liées à la graine produite par aléatoire aléatoire (le système s'arrête, jusqu'à ce qu'il obtienne assez de hasard). Peut-être que quelque chose comme ça fait partie du problème. Quoi qu'il en soit, si vous ne pouvez pas vous débarrasser du problème, il existe toujours un château gonflable en tant que libre ou IAIK en tant qu'alternative commerciale. Pas beaucoup, mais peut-être que cela aide ...

Questions connexes