2013-06-12 5 views
0

Je reçois une exception null pointeur lorsque j'essaie d'interroger un résultat à partir de DB. est ici l'erreur:EntityManager null pointeur exception

java.lang.NullPointerException 
    at main.java.utils.WebAppInfo.getAppName(WebAppInfo.java:14) 
    at main.java.views.adminView.IndexView.loadPageInfo(IndexView.java:21) 
    at main.java.controller.MainAction.welcome(MainAction.java:24) 
    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.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

est ici la fonction où cette erreur vient.

@Resource(name="applicationInfoService") 
    private static ApplicationInfoService applicationInfoService; 

    public static ApplicationInfo getAppName() { 
     ApplicationInfo applicationInfo = applicationInfoService.getAppNameResult(); 
     return applicationInfo; 
    } 

Si j'Initiate info d'application (= new ApplicationInfoService()) Je reçois une erreur de pointeur NULL à ma classe de service où la requête est faite

@Service("applicationInfoService") 
@Transactional 
public class ApplicationInfoService { 
    private EntityManager entityManager; 

    @PersistenceContext 
    public void setEntityManager(EntityManager entityManager){ 
     this.entityManager = entityManager; 
    } 

    public ApplicationInfo getAppNameResult() { 
     String sql = "FROM ApplicationInfo"; 
     Query query = entityManager.createQuery(sql); 
     return (ApplicationInfo) query.getSingleResult(); 
    } 
} 

erreur va à la ligne CreateQuery et si j'imprimer sur EntityManager il renvoie "null". Pourquoi mon Entitymanager ne sera-t-il pas initialisé? J'utilise la même accumulation dans mon système de connexion et ça marche là-bas. Lorsque j'utilise plusieurs classes EntityManager dans un projet, dois-je les configurer d'une manière ou d'une autre? Je ne sais pas comment résoudre ce problème, car im nouveau au printemps, mise en veille prolongée, JPA etc.

+0

C'est parce que c'est statique. Pouvez-vous montrer la classe entière contenant la méthode 'getAppName()'? –

Répondre

2

printemps ne permet pas d'injecter static champs, c'est pourquoi vous obtenez NullPointerException.

Je peux vous suggérer un arrondi. Ajouter le bloc ci-dessous de code dans votre classe WebAppInfo:

@Resource(name="applicationInfoService") 
public void setService(ApplicationInfoService service) { 
    WebAppInfo.applicationInfoService = service; 
} 

N'oubliez pas supprimer l'annotation @Resouce de applicationInfoService.

Edit:

La suggestion ci-dessus était seulement de fixer le NullPointerException dans votre classe WebAppInfo pour la raison de ne pas être initialisé un champ static!

Mais il peut y avoir plusieurs causes pour votre EntityManager étant null. Comme vous le dites, cela a fonctionné pour vous dans un autre système. Je vous suggère de

  • revérifiez le chemin de votre persistence.xml, après le déploiement.
  • Voir les réponses here.

Si cela ne vous aide pas, veuillez fournir suffisamment d'informations sur la trace d'exception et le code associé.

+0

Cela n'a pas aidé. Je reçois un pointeur nul même si je supprime tous les modificateurs statiques autour de ce gestionnaire d'entité – Kapaacius

+0

@ user1272486, je viens d'éditer ma réponse voir ceci, si cela ne vous aide pas, veuillez poster votre trace Exception avec le code et la configuration associés. –

+0

J'ai lu ce sujet mais sa solution n'a pas aidé le mien. vérifier ici: https://github.com/Kapaacius/Fishfood Probablement plus facile si vous pouvez voir xml est également – Kapaacius

0

Quel est le point d'injection d'une valeur dans un champ statique? Il ne peut avoir qu'une seule valeur par chargeur de classe et cela va en quelque sorte à l'encontre de l'objectif de l'environnement IoC. Même si la réponse de sazzadur vous fera passer le NullPointerException il ne va pas vous sauver de bugs étranges si d'autres classes font la même chose. Au lieu de mélanger les paradigmes, je considérerais l'envoi avec la classe WebAppInfo, en convertissant ApplicationInfoService en singleton et en l'injectant partout où c'est approprié.

+0

J'ai changé mon service pour Singleton, mais je reçois toujours un pointeur nul. Maintenant, il continue à apparaître jusqu'à cette ligne dans la classe Service "Query query = entityManager.createQuery (sql);" – Kapaacius