在Spring库中注入EntityManager时的java.lang.NullPointerException异常 [英] java.lang.NullPointerException upon EntityManager injection in Spring repository

查看:523
本文介绍了在Spring库中注入EntityManager时的java.lang.NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Spring MVC的新手。我一直在寻找几天来解决我的问题,没有任何成功。



这是我的堆栈:




  • jBoss 4.2.3GA服务器

    • 我知道这是一个非常旧的版本,但这是我现在所限制的。 jBoss 7.1将在未来几个月内被批准在我的组织中使用,但我希望使我的研发应用程序在4.2.3GA服务器中工作。这意味着我已经在我的/ lib文件夹中添加了所有需要的jar。


  • Spring MVC 4.0.2

  • EJB3.0 / JPA for persistence

  • DBMS是PostgreSQL 9.0.3

  • 我没有使用任何构建/依赖关系管理工具,如Maven或Gradle。 Gradle正在批准过程中,所以这是一个时间的问题。我现在需要自己管理所有的依赖项。



我的项目结构:




  • src




    • baseproject




      • model

        • security

          • User.java

          • Role.java

          • ...其他安全相关实体bean



      • 存储库




        • security

          • UserRepository.java

          • UserRepositoryImpl.java

          • RoleRepository.java

          • RoleRepositoryImpl.java

          • ...其他与安全相关的存储库



      • 服务




        • SecurityService.java

        • SecurityServiceImpl.java


      • web

        • 控制器

          • UserController.java (一个典型的控制器)


        • 配置

          • WebConfig.ja va(主servlet配置)

          • PersistenceConfig.java(与持久性相关的所有内容。我认为这是我的问题所在... no persistence.xml)







      PersistenceConfig.java

        package baseproject.web.configuration; 

      import java.util.Properties;

      import javax.persistence.EntityManagerFactory;
      import javax.sql.DataSource;

      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
      import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
      import org.springframework.orm.jpa.vendor.Database;
      import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
      import org.springframework.transaction.annotation.EnableTransactionManagement;

      @Configuration
      @EnableTransactionManagement
      public class PersistenceConfig {

      @Bean
      public EntityManagerFactory entityManagerFactory(){

      final LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

      localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter());
      localContainerEntityManagerFactoryBean.setDataSource(dataSource());
      localContainerEntityManagerFactoryBean.setPackagesToScan(baseproject);

      final属性props = new Properties();
      props.setProperty(hibernate.dialect,org.hibernate.dialect.PostgreSQLDialect);
      props.setProperty(hibernate.hbm2ddl.auto,validate);
      props.setProperty(hibernate.show_sql,false);
      props.setProperty(hibernate.validator.apply_to_ddl,false);
      props.setProperty(hibernate.validator.autoregister_listeners,false);

      localContainerEntityManagerFactoryBean.setJpaProperties(props);

      return localContainerEntityManagerFactoryBean.getObject();
      }

      @Bean
      public HibernateJpaVendorAdapter jpaVendorAdapter(){

      HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();

      hibernateJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
      hibernateJpaVendorAdapter.setDatabasePlatform(org.hibernate.dialect.PostgreSQLDialect);

      return hibernateJpaVendorAdapter;
      }

      @Bean
      public DataSource dataSource(){

      final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
      dsLookup.setResourceRef(true);
      DataSource dataSource = dsLookup.getDataSource(java:/ dsBaseProject);

      return dataSource;
      }

      }

      UserRepository.java

        package baseproject.repository.security; 

      import java.util.List;

      import baseproject.model.security.User;

      public interface UserRepository {

      public User findUserByPk(Integer intUserId);
      public List< User> lstUsers(Integer intSortBy);
      public void addUser(User user);
      public void updateUser(User user);
      public void deleteUser(User user);

      }

      UserRepositoryImpl.java

        package baseproject.repository.security; 

      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.List;

      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      import javax.persistence.Query;

      import org.springframework.stereotype.Repository;

      import baseproject.model.security.User;

      @Repository
      public class UserRepositoryImpl实现UserRepository {

      @PersistenceContext
      protected EntityManager em;

      public User findUserByPk(Integer intId){

      用户user = null;

      if(intId!= null){
      user = em.find(User.class,intId);
      }

      返回用户;
      }

      public java.util.List< User> lstUsers(Integer intSortBy){

      列表<用户> usersList = new ArrayList< User>();

      查询q = em.createNamedQuery(User.lstUsers);

      return usersList;
      }

      public void addUser(User user){

      user.setIntId(null);
      em.persist(user);
      }

      public void updateUser(User user){

      用户userBd = em.find(User.class,user.getIntId());

      userBd.setStrLastName(user.getStrLastName());
      userBd.setStrFirstName(user.getStrFirstName());
      userBd.setStrUserId(user.getStrUserId());
      }

      public void deleteUser(User user){

      用户userBd = em.find(User.class,user.getIntId());
      em.remove(userBd);
      }
      }

      SecurityService.java

        package baseproject.service; 

      import java.util.List;

      import baseproject.model.security.Method;
      import baseproject.model.security.Node;
      import baseproject.model.security.Role;
      import baseproject.model.security.User;

      public interface SecurityService {

      // USERS
      public User findUserByPk(Integer intUserId);
      public User findUserByUserId(String strUserId);

      public void addUser(User user);
      public void updateUser(User user);
      public void deleteUser(User user);

      public List< User> lstUsers(Integer intSortBy);

      public boolean validateUser(User user,String strMethod);

      // ROLES
      public Role findRoleByPk(Integer intRoleId);

      public List< Role> lstRoles(String strLanguage);

      public void addRole(Role role);
      public void updRole(Role role);
      public void delRole(Role role);


      // NODES
      public List< Node> lstParentNodes();


      //方法
      public方法findMethodByPk(Integer intMethodId);
      public方法findMethodByName(String strName);
      public List< String> lstUserAllowedMethods(List< Role> lstRolesAllowed,String strLang,String strRemoteUser);
      public List< Method> lstAllMethods();

      }

      SecurityServiceImpl.java

        package baseproject.service; 

      import java.util.List;

      import org.springframework.stereotype.Service;
      import org.springframework.transaction.annotation.Transactional;

      import baseproject.model.security.Method;
      import baseproject.model.security.Node;
      import baseproject.model.security.Role;
      import baseproject.model.security.User;
      import baseproject.repository.security.MethodRepository;
      import baseproject.repository.security.NodeRepository;
      import baseproject.repository.security.RoleRepository;
      import baseproject.repository.security.UserRepository;

      @Service
      public class SecurityServiceImpl实现SecurityService {

      UserRepository userRepository;
      RoleRepository roleRepository;
      MethodRepository methodRepository;
      NodeRepository nodeRepository;

      @Override
      @Transactional(readOnly = true)
      public User findUserByPk(Integer intUserId){
      return userRepository.findUserByPk(intUserId);
      }

      @Override
      @Transactional(readOnly = true)
      public用户findUserByUserId(String strUserId){
      return userRepository.findUserByUserId(strUserId);
      }

      @Override
      @Transactional
      public void addUser(User user){
      userRepository.addUser(user);
      }

      @Override
      @Transactional
      public void updateUser(User user){
      userRepository.updateUser(user);
      }

      @Override
      @Transactional
      public void deleteUser(User user){
      userRepository.deleteUser(user);
      }

      @Override
      @Transactional(readOnly = true)
      public List< User> lstUsers(Integer intSortBy){
      return null;
      }

      @Override
      @Transactional(readOnly = true)
      public boolean validateUser(User user,String strMethod){
      return false;
      }

      @Override
      @Transactional(readOnly = true)
      public Role findRoleByPk(Integer intRoleId){
      return null;
      }

      @Override
      @Transactional(readOnly = true)
      public List< Role> lstRoles(String strLanguage){
      return roleRepository.lstRoles(strLanguage);
      }

      @Override
      @Transactional
      public void addRole(Role role){
      roleRepository.addRole(role);
      }

      @Override
      @Transactional
      public void updRole(角色角色){

      }

      @Override
      @Transactional
      public void delRole(Role role){

      }

      @Override
      @Transactional
      public列表与LT;节点> lstParentNodes(){
      return nodeRepository.lstParentNodes();
      }

      @Override
      @Transactional
      public方法findMethodByPk(Integer intMethodId){
      return methodRepository.findMethodByPk(intMethodId);
      }

      @Override
      @Transactional
      public方法findMethodByName(String strName){
      return methodRepository.findMethodByName(strName);
      }

      @Override
      @Transactional
      public List< String> lstUserAllowedMethods(List< Role> arlRolesAllowed,
      String strLanguage,String strRemoteUser){
      return methodRepository.lstUserAllowedMethods(arlRolesAllowed,strLanguage,strRemoteUser);
      }

      @Override
      @Transactional
      public List< Method> lstAllMethods(){
      return methodRepository.lstAllMethods();
      }

      }

      我的结构基于Spring petclinic应用程序,它使用repository-service设计模式。部署后出现问题。由于@Repository注释,当第一个Spring存储库得到处理时,我获得了以下堆栈跟踪:

        org.springframework.beans .factory.BeanCreationException:创建名称为userRepositoryImpl的bean时出错:注入持久性依赖关系失败;嵌套异常是java.lang.NullPointerException 
      在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:356)
      在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory。 populateBean(AbstractAutowireCapableBeanFactory.java:1185)
      在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
      在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory。 createBean(AbstractAutowireCapableBeanFactory.java:475)
      在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:304)
      在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry .getSingleton(DefaultSingletonBeanRegistry.java:228)
      在org.springframework.beans.factory.support.AbstractBeanFa ctory.doGetBean(AbstractBeanFactory.java:300)
      在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
      在org.springframework.beans.factory.support。 DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
      在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
      在org.springframework.context.support.AbstractApplicationContext.refresh( AbstractApplicationContext.java:482)
      在org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
      在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java: 306)
      在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
      在org.apache.catalina.core.StandardContext.li stenerStart(StandardContext.java:3856)
      在org.apache.catalina.core.StandardContext.start(StandardContext.java:4361)
      在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase。 java:790)
      在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:770)
      在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl。 java:25)
      在java.lang.reflect.Method.invoke(Method.java:597)
      在org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)
      在org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
      在org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:6 59)
      在org.apache.catalina.core.StandardContext.init(StandardContext.java:5312)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect。 NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      在java.lang.reflect.Method.invoke(Method.java:597)
      在org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)
      在org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
      在org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
      在org.jboss.web.tomcat.service.TomcatDeployer.performDeployInternal(TomcatDeployer.java:301)
      在org.jboss.web.tomcat.service.TomcatDeployer.performDeploy(TomcatDeployer.java:104)
      在org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:375)
      在org.jboss.web.WebModule.startModule(WebModule.java:83)
      在org.jboss.web.WebModule.startService(WebModule.java:61)
      在org.jboss.system.ServiceMBeanSupport .jbossInternalStart(ServiceMBeanSupport.java:289)
      在org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      在java.lang.reflect.Method.invoke(方法.java:597)
      在org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
      在org.jboss.mx.server.Invocation.dispatch(Invocation.java:94 )
      在org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
      在org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMB eanInvoker.java:264)
      在org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
      在org.jboss.system.ServiceController $ ServiceProxy.invoke(ServiceController.java: 978)
      at $ Proxy0.start(Unknown Source)
      在org.jboss.system.ServiceController.start(ServiceController.java:417)
      at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      在java.lang.reflect.Method.invoke(Method.java:597)
      在org.jboss .mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
      在org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
      在org.jboss.mx.server .Invocation.invoke(Invocation.java:86)
      在org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
      在org.jboss.mx.server.MBeanServerImpl.invoke (MBeanServerImpl.jav a:659)
      在org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
      在$ Proxy42.start(未知来源)
      在org.jboss.web .AbstractWebContainer.start(AbstractWebContainer.java:466)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      在java.lang.reflect.Method.invoke(Method.java:597)
      在org.jboss.mx.interceptor.ReflectedDispatcher .invoke(ReflectedDispatcher.java:155)
      在org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
      在org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor .java:133)
      在org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
      在org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperati onInterceptor.java:142)
      在org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
      在org.jboss.mx.server.Invocation.invoke(Invocation.java: 88)
      在org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
      在org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
      在org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
      at $ Proxy43.start(未知来源)
      在org.jboss.deployment.MainDeployer.start(MainDeployer .java:1025)
      在org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
      在org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
      at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      在java.lang.reflect.Method.invoke(Method.java :597)
      at o rg.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
      在org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
      在org.jboss。 mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
      在org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
      在org.jboss.mx.interceptor。 ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
      在org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
      在org.jboss.mx.server.AbstractMBeanInvoker.invoke( AbstractMBeanInvoker.java:264)
      在org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
      在org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java: 210)
      at $ Proxy9.deploy(Unknown Source)
      在org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
      在org.jboss.deployment.scanner .URLDeploymentScanner.s can(URLDeploymentScanner.java:610)
      在org.jboss.deployment.scanner.AbstractDeploymentScanner $ ScannerThread.doScan(AbstractDeploymentScanner.java:263)
      在org.jboss.deployment.scanner.AbstractDeploymentScanner $ ScannerThread。循环(AbstractDeploymentScanner.java:274)
      在org.jboss.deployment.scanner.AbstractDeploymentScanner $ ScannerThread.run(AbstractDeploymentScanner.java:225)
      导致:java.lang.NullPointerException
      at org.springframework.orm.jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler.initProxyClassLoader(SharedEntityManagerCreator.java:171)
      在org.springframework.orm.jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler。< init>(SharedEntityManagerCreator.java:163)
      在org.springframework.orm.jpa.SharedEntityManagerCreator.createSharedEntityManager(SharedEntityManagerCreator.java:135)
      在org.springframework.orm.jpa.support.PersistenceAnnotationBean PostProcessor $ PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:694)
      在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor $ PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:655)
      在org.springframework.beans。 factory.annotation.InjectionMetadata $ InjectedElement.inject(InjectionMetadata.java:155)
      在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
      在org.springframework。 orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:353)
      ... 99更多

      spring-servlet.xml

       <?xml version =1.0encoding =UTF-8? > 

      < beans xmlns =http://www.springframework.org/schema/beans
      xmlns:xsi =http://www.w3.org/2001/XMLSchema -instance
      xmlns:context =http://www.springframework.org/schema/context
      xmlns:mvc =http://www.springframework.org/schema/mvc
      xsi:schemaLocation =http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
      http:// www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
      http://www.springframework.org/schema/mvc http:/ /www.springframework.org/schema/mvc/spring-mvc-4.0.xsd\">

      <! - Auto-balayage de classes dans le contexte /在上下文中自动扫描类 - >
      < context:annotation-config />

      < / beans>

      WebConfig.java

        package baseproject.web.configuration; 

      import java.util.Locale;

      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.ComponentScan;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.context.support.ResourceBundleMessageSource;
      import org.springframework.web.servlet.LocaleResolver;
      import org.springframework.web.servlet.config.annotation.EnableWebMvc;
      import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
      import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
      import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
      import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
      import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
      import org.springframework.web.servlet.i18n.SessionLocaleResolver;

      @Configuration
      @EnableWebMvc
      @ComponentScan(basePackages = {baseproject})
      public class WebConfig extends WebMvcConfigurerAdapter {

      @ Bean
      public ResourceBundleMessageSource messageSource(){

      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();

      String [] strBaseNames = {
      resources.messages.layout.LayoutResources,
      resources.messages.global.GlobalResources,
      resources.messages .welcome.WelcomeResources,
      resources.messages.user.UserResources,
      resources.messages.role.RoleResources,
      resources.messages.profile.ProfileResources
      };

      messageSource.setUseCodeAsDefaultMessage(true);
      messageSource.setDefaultEncoding(UTF-8);
      messageSource.setBasenames(strBaseNames);

      return messageSource;
      }

      @Bean
      public LocaleChangeInterceptor localeChangeInterceptor(){

      LocaleChangeInterceptor result = new LocaleChangeInterceptor();
      result.setParamName(language);

      返回结果;
      }

      @Bean
      public LocaleResolver localeResolver(){

      SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
      sessionLocaleResolver.setDefaultLocale(Locale.ENGLISH);

      return sessionLocaleResolver;
      }

      @Override
      public void addInterceptors(InterceptorRegistry interceptorRegistry){

      interceptorRegistry.addInterceptor(localeChangeInterceptor());


      @Override
      public void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry){
      resourceHandlerRegistry.addResourceHandler(/ static / **)。addResourceLocations(/ static / );
      }

      @Override
      public void addViewControllers(ViewControllerRegistry注册表){
      registry.addViewController(/)。setViewName(views / welcome / welcomePage) ;
      }
      }

      最后,我的libs:

        aopalliance-1.0.jar 
      GlobalLibraries.jar
      hibernate-core-4.2.8.Final.jar
      hibernate -entitymanager-4.2.8.Final.jar
      javax.servlet-api-3.0.1.jar
      jcifs-1.3.17.jar
      jdo-api-3.0.jar
      libs.txt
      ognl-3.0.6.jar
      openjpa-all-2.2.1.jar
      slf4j-api-1.6.6.jar
      slf4j-log4j12-1.7 .5.jar
      spring-aop-4.0.2.RELEASE.jar
      spring-aspects-4.0.2.RELEASE.jar
      spring-beans-4.0.2.RELEASE.jar
      spring-context-4.0.2.RELEASE.jar
      spring-context-support-4.0.2.RELEASE.jar
      spring-core-4.0.2.RELEASE.jar
      spring-expression-4.0.2.RELEASE.jar
      spring-framework-bom-4.0.2.RELEASE.jar
      spring-instrument-4.0.2.RELEASE.jar
      spring-jdbc -4.0.2.RELEASE.jar
      spring-jms-4.0.2.RELEASE.jar
      spring-ldap-core-2.0.1.RELEASE.jar
      spring-ldap-core- tiger-2.0.1.RELEASE.jar
      spring-messaging-4.0.2.RELEASE.jar
      spring-orm-4.0.2.RELEASE.jar
      spring-oxm-4.0.2.RELEASE.jar
      spring-security-config-3.2.2.RELEASE.jar
      spring-security-core-3.2.2.RELEASE.jar
      spring-security-ldap-3.2.3.RELEASE.jar
      spring-security-web-3.2.2.RELEASE.jar
      spring-test-4.0.2.RELEASE.jar
      spring-tx-4.0.2.RELEASE.jar
      spring-web-4.0.2.RELEASE.jar
      spring-webmvc-4.0.2.RELEASE.jar
      spring-webmvc-portlet -4.0.2.RELEASE.jar
      spring-websocket-4.0.2.RELEASE.jar
      thymeleaf-2.1.2.RELEASE.jar
      thymeleaf-spring4-2.1.2.RELEASE。 jar

      我知道这是很多代码,但我想提供尽可能多的详细信息。 p>

      谢谢你的帮助。

      解决方案

      我知道这个问题超过9但是我偶然发现了同样的问题,并设法解决了这个问题。 Andrei Stefan的解决方案是朝着正确的方向迈出的一步。令人惊讶的是,当您在方法中调用getObject()来检索entityManagerFactory时,它将抛出一个NPE,但是如果在entityManagerFactory方法之外调用完全相同的方法,它将工作。

        @Bean 
      public PlatformTransactionManager transactionManager(){
      return new JpaTransactionManager(entityManagerFactory()。getObject());
      }

      @Bean
      public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
      LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
      factory.setDataSource(dataSource());

      HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
      jpaVendorAdapter.setGenerateDdl(true);
      jpaVendorAdapter.setDatabasePlatform(org.hibernate.dialect.H2Dialect);

      factory.setJpaVendorAdapter(jpaVendorAdapter);
      返回工厂;
      }

      @Bean
      public DataSource dataSource(){
      返回新的EmbeddedDatabaseBuilder()。setType(EmbeddedDatabaseType.H2).build();
      }


      I am new to Spring MVC. I've been searching for few days for a solution to my problem, without any success.

      Here is my stack:

      • jBoss 4.2.3GA server
        • I know it's a very old version, but that is what I am limited to right now. jBoss 7.1 will be approved for use in my organization within the next few months, but I would like to make my R&D application work in the 4.2.3GA server. That means I have added all required jars in my /lib folder.
      • Spring MVC 4.0.2
      • EJB3.0 / JPA for persistence
      • DBMS is PostgreSQL 9.0.3
      • I am not using any build/dependency management tool such like Maven or Gradle. Gradle is in approval process so it's a matter of time. I need to manage all dependencies myself for now.

      My project structure:

      • src

        • baseproject

          • model
            • security
              • User.java
              • Role.java
              • ... other security related entity beans
          • repository

            • security
              • UserRepository.java
              • UserRepositoryImpl.java
              • RoleRepository.java
              • RoleRepositoryImpl.java
              • ... other security related repositories
          • service

            • SecurityService.java
            • SecurityServiceImpl.java
          • web
            • controller
              • UserController.java (a typical controller)
            • configuration
              • WebConfig.java (the main servlet configuration)
              • PersistenceConfig.java (everything related to persistence. I think this is where my problem is... no persistence.xml)

      PersistenceConfig.java

      package baseproject.web.configuration;
      
      import java.util.Properties;
      
      import javax.persistence.EntityManagerFactory;
      import javax.sql.DataSource;
      
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
      import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
      import org.springframework.orm.jpa.vendor.Database;
      import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
      import org.springframework.transaction.annotation.EnableTransactionManagement;
      
      @Configuration
      @EnableTransactionManagement
      public class PersistenceConfig {
      
          @Bean
          public EntityManagerFactory entityManagerFactory() {
      
              final LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
      
              localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter());
              localContainerEntityManagerFactoryBean.setDataSource(dataSource());
              localContainerEntityManagerFactoryBean.setPackagesToScan("baseproject");
      
              final Properties props = new Properties();
              props.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
              props.setProperty("hibernate.hbm2ddl.auto", "validate");
              props.setProperty("hibernate.show_sql", "false");
              props.setProperty("hibernate.validator.apply_to_ddl", "false");
              props.setProperty("hibernate.validator.autoregister_listeners", "false");
      
              localContainerEntityManagerFactoryBean.setJpaProperties(props);
      
              return localContainerEntityManagerFactoryBean.getObject();
          }
      
          @Bean
          public HibernateJpaVendorAdapter jpaVendorAdapter() {
      
              HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
      
              hibernateJpaVendorAdapter.setDatabase(Database.POSTGRESQL);
              hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQLDialect");
      
              return hibernateJpaVendorAdapter;
          }
      
          @Bean
          public DataSource dataSource() {
      
              final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
              dsLookup.setResourceRef(true);
              DataSource dataSource = dsLookup.getDataSource("java:/dsBaseProject");
      
              return dataSource;
          }
      
      }
      

      UserRepository.java

      package baseproject.repository.security;
      
      import java.util.List;
      
      import baseproject.model.security.User;
      
      public interface UserRepository {
      
          public User findUserByPk(Integer intUserId);
          public List<User> lstUsers(Integer intSortBy);
          public void addUser(User user);
          public void updateUser(User user);
          public void deleteUser(User user);
      
      }
      

      UserRepositoryImpl.java

      package baseproject.repository.security;
      
      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.List;
      
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      import javax.persistence.Query;
      
      import org.springframework.stereotype.Repository;
      
      import baseproject.model.security.User;
      
      @Repository
      public class UserRepositoryImpl implements UserRepository {
      
          @PersistenceContext
          protected EntityManager em;
      
          public User findUserByPk(Integer intId) {
      
              User user = null;
      
              if (intId != null) {
                  user = em.find(User.class, intId);
              }
      
              return user;
          }
      
      public java.util.List<User> lstUsers(Integer intSortBy) {
      
              List<User> usersList = new ArrayList<User>();
      
              Query q = em.createNamedQuery("User.lstUsers");
      
              return usersList;
          }
      
          public void addUser(User user) {
      
              user.setIntId(null);
              em.persist(user);
          }
      
          public void updateUser(User user) {
      
              User userBd = em.find(User.class, user.getIntId());
      
              userBd.setStrLastName(user.getStrLastName());
              userBd.setStrFirstName(user.getStrFirstName());
              userBd.setStrUserId(user.getStrUserId());
          }
      
          public void deleteUser(User user) {
      
              User userBd = em.find(User.class, user.getIntId());
              em.remove(userBd);
          }
      }
      

      SecurityService.java

      package baseproject.service;
      
      import java.util.List;
      
      import baseproject.model.security.Method;
      import baseproject.model.security.Node;
      import baseproject.model.security.Role;
      import baseproject.model.security.User;
      
      public interface SecurityService {
      
          // USERS
          public User findUserByPk(Integer intUserId);
          public User findUserByUserId(String strUserId);
      
          public void addUser(User user);
          public void updateUser(User user);
          public void deleteUser(User user);
      
          public List<User> lstUsers(Integer intSortBy);
      
          public boolean validateUser(User user, String strMethod);
      
          // ROLES
          public Role findRoleByPk(Integer intRoleId);    
      
          public List<Role> lstRoles(String strLanguage);
      
          public void addRole(Role role);
          public void updRole(Role role);
          public void delRole(Role role);
      
      
          // NODES
          public List<Node> lstParentNodes();
      
      
          // METHODS
          public Method findMethodByPk(Integer intMethodId);
          public Method findMethodByName(String strName);
          public List<String> lstUserAllowedMethods(List<Role> lstRolesAllowed, String strLang, String strRemoteUser);
          public List<Method> lstAllMethods();
      
      }
      

      SecurityServiceImpl.java

      package baseproject.service;
      
      import java.util.List;
      
      import org.springframework.stereotype.Service;
      import org.springframework.transaction.annotation.Transactional;
      
      import baseproject.model.security.Method;
      import baseproject.model.security.Node;
      import baseproject.model.security.Role;
      import baseproject.model.security.User;
      import baseproject.repository.security.MethodRepository;
      import baseproject.repository.security.NodeRepository;
      import baseproject.repository.security.RoleRepository;
      import baseproject.repository.security.UserRepository;
      
      @Service
      public class SecurityServiceImpl implements SecurityService {
      
          UserRepository userRepository;
          RoleRepository roleRepository;
          MethodRepository methodRepository;
          NodeRepository nodeRepository;
      
          @Override
          @Transactional(readOnly = true)
          public User findUserByPk(Integer intUserId) {
              return userRepository.findUserByPk(intUserId);
          }
      
          @Override
          @Transactional(readOnly = true)
          public User findUserByUserId(String strUserId) {
              return userRepository.findUserByUserId(strUserId);
          }
      
          @Override
          @Transactional
          public void addUser(User user) {
              userRepository.addUser(user);
          }
      
          @Override
          @Transactional
          public void updateUser(User user) {
              userRepository.updateUser(user);
          }
      
          @Override
          @Transactional
          public void deleteUser(User user) {
              userRepository.deleteUser(user);
          }
      
          @Override
          @Transactional(readOnly = true)
          public List<User> lstUsers(Integer intSortBy) {
              return null;
          }
      
          @Override
          @Transactional(readOnly = true)
          public boolean validateUser(User user, String strMethod) {
              return false;
          }
      
          @Override
          @Transactional(readOnly = true)
          public Role findRoleByPk(Integer intRoleId) {
              return null;
          }
      
          @Override
          @Transactional(readOnly = true)
          public List<Role> lstRoles(String strLanguage) {
              return roleRepository.lstRoles(strLanguage);
          }
      
          @Override
          @Transactional
          public void addRole(Role role) {
              roleRepository.addRole(role);
          }
      
          @Override
          @Transactional
          public void updRole(Role role) {
      
          }
      
          @Override
          @Transactional
          public void delRole(Role role) {
      
          }
      
          @Override
          @Transactional
          public List<Node> lstParentNodes() {
              return nodeRepository.lstParentNodes();
          }
      
          @Override
          @Transactional
          public Method findMethodByPk(Integer intMethodId) {
              return methodRepository.findMethodByPk(intMethodId);
          }
      
          @Override
          @Transactional
          public Method findMethodByName(String strName) {
              return methodRepository.findMethodByName(strName);
          }
      
          @Override
          @Transactional
          public List<String> lstUserAllowedMethods(List<Role> arlRolesAllowed,
                  String strLanguage, String strRemoteUser) {
              return methodRepository.lstUserAllowedMethods(arlRolesAllowed, strLanguage, strRemoteUser);
          }
      
          @Override
          @Transactional
          public List<Method> lstAllMethods() {
              return methodRepository.lstAllMethods();
          }
      
      }
      

      I have based my structure on the Spring petclinic application, which uses the repository-service design pattern. The problem is occuring upon deployment. I got the following stacktrace right when the first Spring repository is getting processed because of the @Repository annotation:

      org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepositoryImpl': Injection of persistence dependencies failed; nested exception is java.lang.NullPointerException
              at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:356)
              at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
              at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
              at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
              at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
              at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
              at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
              at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
              at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
              at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
              at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
              at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
              at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
              at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
              at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3856)
              at org.apache.catalina.core.StandardContext.start(StandardContext.java:4361)
              at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:790)
              at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:770)
              at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)
              at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
              at org.apache.catalina.core.StandardContext.init(StandardContext.java:5312)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)
              at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
              at org.jboss.web.tomcat.service.TomcatDeployer.performDeployInternal(TomcatDeployer.java:301)
              at org.jboss.web.tomcat.service.TomcatDeployer.performDeploy(TomcatDeployer.java:104)
              at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:375)
              at org.jboss.web.WebModule.startModule(WebModule.java:83)
              at org.jboss.web.WebModule.startService(WebModule.java:61)
              at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
              at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
              at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
              at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
              at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
              at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
              at $Proxy0.start(Unknown Source)
              at org.jboss.system.ServiceController.start(ServiceController.java:417)
              at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
              at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
              at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
              at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
              at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
              at $Proxy42.start(Unknown Source)
              at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:466)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
              at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
              at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
              at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
              at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
              at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
              at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
              at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
              at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
              at $Proxy43.start(Unknown Source)
              at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
              at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
              at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
              at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
              at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
              at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
              at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
              at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
              at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
              at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
              at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
              at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
              at $Proxy9.deploy(Unknown Source)
              at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
              at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:610)
              at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
              at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
              at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
          Caused by: java.lang.NullPointerException
              at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.initProxyClassLoader(SharedEntityManagerCreator.java:171)
              at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.<init>(SharedEntityManagerCreator.java:163)
              at org.springframework.orm.jpa.SharedEntityManagerCreator.createSharedEntityManager(SharedEntityManagerCreator.java:135)
              at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:694)
              at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:655)
              at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:155)
              at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
              at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:353)
              ... 99 more
      

      spring-servlet.xml

      <?xml version="1.0" encoding="UTF-8"?>
      
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mvc="http://www.springframework.org/schema/mvc"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
          http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
      
          <!-- Auto-balayage de classes dans le contexte / Auto-scan classes within the context -->
          <context:annotation-config />
      
      </beans>
      

      WebConfig.java

      package baseproject.web.configuration;
      
      import java.util.Locale;
      
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.ComponentScan;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.context.support.ResourceBundleMessageSource;
      import org.springframework.web.servlet.LocaleResolver;
      import org.springframework.web.servlet.config.annotation.EnableWebMvc;
      import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
      import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
      import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
      import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
      import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
      import org.springframework.web.servlet.i18n.SessionLocaleResolver;
      
      @Configuration
      @EnableWebMvc
      @ComponentScan(basePackages = { "baseproject" })
      public class WebConfig extends WebMvcConfigurerAdapter {
      
          @Bean
          public ResourceBundleMessageSource messageSource() {
      
              ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
      
              String[] strBaseNames = {
                      "resources.messages.layout.LayoutResources",
                      "resources.messages.global.GlobalResources",
                      "resources.messages.welcome.WelcomeResources",
                      "resources.messages.user.UserResources",
                      "resources.messages.role.RoleResources",
                      "resources.messages.profile.ProfileResources"
              };
      
              messageSource.setUseCodeAsDefaultMessage(true);
              messageSource.setDefaultEncoding("UTF-8");
              messageSource.setBasenames(strBaseNames);
      
              return messageSource;
          }
      
          @Bean
          public LocaleChangeInterceptor localeChangeInterceptor() {
      
              LocaleChangeInterceptor result = new LocaleChangeInterceptor();
              result.setParamName("language");
      
              return result;
          }
      
          @Bean
          public LocaleResolver localeResolver() {
      
              SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
              sessionLocaleResolver.setDefaultLocale(Locale.ENGLISH);
      
              return sessionLocaleResolver;
          }
      
          @Override
          public void addInterceptors(InterceptorRegistry interceptorRegistry) {
      
              interceptorRegistry.addInterceptor(localeChangeInterceptor());
          }
      
          @Override
          public void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry) {
              resourceHandlerRegistry.addResourceHandler("/static/**").addResourceLocations("/static/");
          }
      
          @Override
          public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("views/welcome/welcomePage");
          }
      }
      

      Finally, my libs :

      aopalliance-1.0.jar
      GlobalLibraries.jar
      hibernate-core-4.2.8.Final.jar
      hibernate-entitymanager-4.2.8.Final.jar
      javax.servlet-api-3.0.1.jar
      jcifs-1.3.17.jar
      jdo-api-3.0.jar
      libs.txt
      ognl-3.0.6.jar
      openjpa-all-2.2.1.jar
      slf4j-api-1.6.6.jar
      slf4j-log4j12-1.7.5.jar
      spring-aop-4.0.2.RELEASE.jar
      spring-aspects-4.0.2.RELEASE.jar
      spring-beans-4.0.2.RELEASE.jar
      spring-context-4.0.2.RELEASE.jar
      spring-context-support-4.0.2.RELEASE.jar
      spring-core-4.0.2.RELEASE.jar
      spring-expression-4.0.2.RELEASE.jar
      spring-framework-bom-4.0.2.RELEASE.jar
      spring-instrument-4.0.2.RELEASE.jar
      spring-jdbc-4.0.2.RELEASE.jar
      spring-jms-4.0.2.RELEASE.jar
      spring-ldap-core-2.0.1.RELEASE.jar
      spring-ldap-core-tiger-2.0.1.RELEASE.jar
      spring-messaging-4.0.2.RELEASE.jar
      spring-orm-4.0.2.RELEASE.jar
      spring-oxm-4.0.2.RELEASE.jar
      spring-security-config-3.2.2.RELEASE.jar
      spring-security-core-3.2.2.RELEASE.jar
      spring-security-ldap-3.2.3.RELEASE.jar
      spring-security-web-3.2.2.RELEASE.jar
      spring-test-4.0.2.RELEASE.jar
      spring-tx-4.0.2.RELEASE.jar
      spring-web-4.0.2.RELEASE.jar
      spring-webmvc-4.0.2.RELEASE.jar
      spring-webmvc-portlet-4.0.2.RELEASE.jar
      spring-websocket-4.0.2.RELEASE.jar
      thymeleaf-2.1.2.RELEASE.jar
      thymeleaf-spring4-2.1.2.RELEASE.jar
      

      I know that's a lot of code but I wanted to provide as much details as possible.

      THANK YOU for help.

      解决方案

      I know this question is over 9 month old, but I stumbled over the same problem and managed to fix it. The solution from Andrei Stefan is one step in the right direction. Surprisingly, when you call getObject() within the method to retrieve the entityManagerFactory, it will throw a NPE, but if you call the exact same method outside of the entityManagerFactory method it will work.

          @Bean
          public PlatformTransactionManager transactionManager() {
              return new JpaTransactionManager(entityManagerFactory().getObject());
          }
      
          @Bean
          public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
              LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
              factory.setDataSource(dataSource());
      
              HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
              jpaVendorAdapter.setGenerateDdl(true);
              jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.H2Dialect");
      
              factory.setJpaVendorAdapter(jpaVendorAdapter);
              return factory;
          }
      
          @Bean
          public DataSource dataSource() {
              return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
          }
      

      这篇关于在Spring库中注入EntityManager时的java.lang.NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆