2009-06-04 10 views
1

Ceci est après la dernière exécution infructueuse de mon programme. Je remarque que la taille du fichier a changé et je ne peux plus courir la classe Java pour mon programme:Le fichier JAR est modifié pendant l'exécution

[email protected] ~ 
$ ls -l lifecycle-0.1-SNAPSHOT.jar 
-rw-r--r-- 1 root  root  24740243 Jun 4 20:48 lifecycle-0.1-SNAPSHOT.jar 

C'est après que je copie la nouvelle copie du fichier JAR d'origine:

[email protected] ~ 
$ ls -l lifecycle-0.1-SNAPSHOT.jar 
-rw-r--r-- 1 root  root  24833475 Jun 4 20:55 lifecycle-0.1-SNAPSHOT.jar 

I puis exécutez la commande Java:

[email protected] ~ 
$ java -cp lifecycle-0.1-SNAPSHOT.jar com.abc.lifecycle.cli.LifecycleManagerCli -dm web 0001 lm2-dom0.sfbay.abc.com ZONE /path/to/bits 
Jun 4, 2009 8:55:51 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]186c6b2: display name [org[email protected]186c6b2]; startup date [Thu Jun 04 20:55:51 GMT+00:00 2009]; root of context hierarchy 
Jun 4, 2009 8:55:51 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [lifecycle_lite.xml] 
Jun 4, 2009 8:55:51 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 
INFO: Bean factory for application context [org[email protected]186c6b2]: org.s[email protected]88e2dd 
Jun 4, 2009 8:55:51 PM org.springframework.core.io.support.PropertiesLoaderSupport loadProperties 
INFO: Loading properties file from class path resource [lifecycle.properties] 
Jun 4, 2009 8:55:51 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
INFO: Pre-instantiating singletons in org.s[email protected]88e2dd: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,com.abc.lifecycle.util.LoggingConfigurer#0,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txAdvice,lifecycleOperations,org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0,dataSource,hibernateSessionFactory,moduleDefinitionDao,moduleHostDao,moduleInstanceDao,physicalHostDao,serviceDefinitionDao,serviceInstanceDao,numericOffsetDao,virtualHostDao,broker,jmsConnectionFactory,lifecycleMessageQueue,lifecycleMessageXmlConverter,lifecycleMessageListener,lifecycleMessageListenerContainer,jmsTemplate,lifecycleProcessor,statusChecker,lifecycleComponentBuilder,lifecycleManagerInitializer,lifecycleManagerCli]; root of factory hierarchy 
Hibernate: 
    insert 
    into 
     SERVICE_INSTANCE 
     (CREATED_DATE, OPTIMISTIC_LOCKING_VERSION, UPDATED_DATE, MODULE_INSTANCE_ID, serviceDefinition_ENTITY_ID) 
    values 
     (?, ?, ?, ?, ?) 
Hibernate: 
    delete 
    from 
     NUMERIC_OFFSET 
    where 
     ENTITY_ID=? 
     and OPTIMISTIC_LOCKING_VERSION=? 
Exception in thread "lifecycleMessageListenerContainer-1" java.lang.NoClassDefFoundError: org/springframework/jms/support/JmsUtils 
     at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.clearResources(DefaultMessageListenerContainer.java:1024) 
     at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:887) 
     at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.ClassNotFoundException: org.springframework.jms.support.JmsUtils 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
     ... 3 more 

A ce stade, je tuerai avec Ctrl-C:

^CException in thread "ActiveMQ ShutdownHook" java.lang.NoClassDefFoundError: org/apache/activemq/broker/TransportConnection$3 
     at org.apache.activemq.broker.TransportConnection.stopAsync(TransportConnection.java:920) 
     at org.apache.activemq.broker.TransportConnection.stop(TransportConnection.java:902) 
     at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:41) 
     at org.apache.activemq.broker.TransportConnector.stop(TransportConnector.java:270) 
     at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43) 
     at org.apache.activemq.transport.vm.VMTransportFactory.stopped(VMTransportFactory.java:226) 
     at org.apache.activemq.broker.BrokerService.stop(BrokerService.java:518) 
     at org.apache.activemq.broker.BrokerService.containerShutdown(BrokerService.java:1754) 
     at org.apache.activemq.broker.BrokerService$4.run(BrokerService.java:1732) 
Caused by: java.lang.ClassNotFoundException: org.apache.activemq.broker.TransportConnection$3 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
     ... 9 more 

Ensuite, vous pouvez voir que le fichier JAR a été modifié:

[email protected] ~ 
$ ls -l lifecycle-0.1-SNAPSHOT.jar 
-rw-r--r-- 1 root  root  24740243 Jun 4 20:56 lifecycle-0.1-SNAPSHOT.jar 

je peux trouver la classe JmsUtils et la classe ActiveMQ TransportConnection il se plaint dans mon repository, que pourrais-je essayer?

[email protected] ~ 
$ jar tf lifecycle-0.1-SNAPSHOT.jar | grep JmsUtils 
org/springframework/jms/support/JmsUtils.class 
[email protected] ~ 
$ jar tf lifecycle-0.1-SNAPSHOT.jar | grep TransportConnection            
org/apache/activemq/broker/MapTransportConnectionStateRegister.class 
org/apache/activemq/broker/SingleTransportConnectionStateRegister.class 
org/apache/activemq/broker/TransportConnection$1.class 
org/apache/activemq/broker/TransportConnection$2.class 
org/apache/activemq/broker/TransportConnection$3.class 
org/apache/activemq/broker/TransportConnection.class 
org/apache/activemq/broker/TransportConnectionState.class 
org/apache/activemq/broker/TransportConnectionStateRegister.class 
org/apache/activemq/broker/jmx/ManagedTransportConnection.class 

Qu'est-ce qui peut modifier l'état du fichier JAR pendant l'exécution? Que faire si j'attache un débogueur d'une machine distante - est-ce que cela devrait avoir un effet (je suppose que non)?

Merci d'avance.

--James

Répondre

6

La première chose à essayer est de changer le mode de votre fichier jar à 444 ou même 400, et voir ce qui explose. Java, le JRE lui-même, ne devrait pas du tout modifier le fichier JAR; il a seulement besoin d'un accès en lecture. Le cas le plus probable est que quelque chose, quelque part, obtient par erreur le chemin du fichier jar pour un chemin de fichier de données, Dieu seul sait comment.

Rendre le fichier en lecture seule, et vous devriez obtenir une exception où l'accès (ou au moins l'ouverture) se produit.

+0

La même chose se produit lorsque je fais les autorisations de fichier 444 ou 400. Qu'est-ce qui donne - comment le fichier peut-il être écrit lorsqu'il est en lecture seule? –

+2

Ne pas exécuter l'application en tant que root. –

Questions connexes