2014-11-11 3 views
0

Spring을 사용하여 웹 MVC를 작성했습니다. 나는 별도의 DAO와 봉사 수업을 사용했다.Spring - DAO-Service 아키텍처에서 JPA로 마이그레이션

내 오랜 코드 :

@Repository 
public class RoleDaoImpl implements RoleDao { 
... 
} 

@Service 
@Transactional 
public class RoleManagerImpl implements RoleManager { 
... 
} 

@Controller 
public class HomeController { 
    @Autowired 
    private RoleManager roleManager; 
... 
} 

지금은 스프링 JPA를 시도하고 싶습니다. 하지만 테스트 프로젝트를 DAO 서비스에서 Spring JPA로 다시 작성할 수는 없습니다.

내가 프로젝트를 실행 한 후 나는 오류 다음 얻을 GitHub의 https://github.com/martin159/springjpa

에 프로젝트 소스가 :

WARN : org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: No PersistenceProvider specified in EntityManagerFactory configuration, and chosen PersistenceUnitInfo does not specify a provider class name either 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
    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:4961) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5455) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:634) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:671) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1840) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: No PersistenceProvider specified in EntityManagerFactory configuration, and chosen PersistenceUnitInfo does not specify a provider class name either 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:323) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564) 
    ... 25 more 
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed 

내가 봄 JPA와 많은 시간을 보내고, 그러나 나는 아직도에 수 그것을 고쳐라.

내가 뭘 잘못했는지 아십니까?

+0

을 시도 springjpa

<persistence-unit name="springjpa" transaction-type="JTA"> 

이다 지정된 당신의 GitHub의 저장소에있는 코드는 스프링 데이터 JPA과 아무 상관이 있지만, 단지 JPA. 사용할 공급자를 지정하지 않았으므로 JPA 구성이 잘못되었습니다. 'persistence.xml'도 아니고'LocalContainerEntityManagerFactory'의 설정도 아닙니다. 마지막으로 github 저장소를 검색하는 사람들에게 기대하는 것이 좋지 않기 때문에 질문에 구성 부분을 추가하려고합니다. –

답변

0

내 생각에 이것은 지속성 단위 이름이 무엇인지 봄을 말하지 않고 LocalContainerEntityManagerFactoryBean을 지정했기 때문이라고 생각합니다. 따라서 Spring은 디폴트 값을 사용합니다.

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 

한편의 persistence.xml에, 당신은 당신의 영속 단위 이름이

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="springjpa"/> 
</bean>