J'ai un problème lors de l'exécution d'un travail par lots sur mon serveur, alors qu'il fonctionne correctement depuis Eclipse sur mon poste de travail de développement.Pourquoi j'obtiens une exception NullPointerException lors de l'initialisation de Printemps
J'ai créé mon environnement Spring en utilisant Roo, j'ai créé une entité, et j'ai créé un lot qui fonctionne, et je l'ai bien testé sur ma boîte de développement. J'initialise mon contexte et fais le travail, mais quand je lance mon batch sur le serveur, le contexte n'est pas initialisé correctement. Voici le code:
public class TestBatch {
private static ApplicationContext context;
@SuppressWarnings("unchecked")
public static void main(final String[] args) {
context = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml");
try {
@SuppressWarnings("unused")
TestBatch app = new TestBatch();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void TestBatch() { /** Do Something using the context **/ }
}
Et voici le journal et exception:
2010-02-16 11:54:16,072 [main] INFO org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org[email protected]6037fb1e: startup date [Tue Feb 16 11:54:16 CET 2010]; root of context hierarchy
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:127)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at tld.mydomain.myproject.batch.TestBatch.main(TestBatch.java:51)
Caused by: java.lang.NullPointerException
at org.springframework.beans.factory.support.DefaultListableBeanFactory.<clinit>(DefaultListableBeanFactory.java:103)
... 7 more
Toute idée ou des conseils quant à ce qui se passe? Mon classpath est défini sur $ PROJECTHOME/target/classes, et toutes mes dépendances sont dans $ PROJECTHOME/target/lib, et j'exécute en utilisant "export CLASSPATH = $ PROJECTHOME/cible/classes; java -Djava.endorsed.dirs = $ PROJECTHOME/target/lib tld.mydomain.myproject.batch.TestBatch "
Y at-il quelque chose dans ma configuration qui semble très mauvais? Quand je l'exécute à partir d'Eclipse, pas de problèmes, mais quand je le déploie sur le serveur où je veux l'exécuter et l'exécuter comme décrit ci-dessus, j'ai ce problème. Parce qu'il fonctionne à partir d'Eclipse, je crois que mes fichiers de configuration sont corrects, mais comment puis-je déboguer ce qui cause cela? Peut-être que j'ai des erreurs de configuration ou une incompatibilité entre le serveur et le poste de travail de développement après tout? Ou est-ce une manière vraiment bizarre de dire que le fichier n'est pas trouvé, et si oui, comment puis-je m'assurer qu'il trouve le bon fichier?
Je suis vraiment impatient d'entendre vos suggestions sur la façon de résoudre ce problème.
Vive
Nik
Je suggère de regarder DefaultListableBeanFactory.java, ligne 103. Ou encore mieux, mettre un point d'arrêt là. –
assurez-vous que 'applicationContext.xml' est en place sur le serveur. – Bozho
L'applicationContext est dans $ CLASSPATH/META-INF/spring/applicationContext.xml En ce qui concerne la définition des points d'arrêt, comment puis-je le faire en cours d'exécution sur mon serveur? Il n'y a pas d'erreur quand je le lance dans mon EDI sur mon poste de travail – niklassaers