2017-03-17 14 views
0

javoconfig를 배우고 있습니다. 최근 xConfig를 javaConfig로 전송하려고했으나 코드는 Tomcat에서 실행되는 동안 프로젝트에서 오류가 발생했습니다. 세션을 가져 와서 db.I에서 정보를 얻으려고하면 정말 혼란 스럽습니다.Spring-Hibernate3에서 javaConfig를 사용하려고하면 session.but을 예외로 사용할 수 없습니다.

블로그를 읽고 인터넷에서 가능한 이유를 검색 한 후 트랜잭션이 제대로 작동하지 않는 것으로 보이는 설명이 있습니다. (하지만 오류는 트랜잭션이 잘 작동 함을 보여줍니다.)

올바른 가정이 있다면 어떻게하면 코드를 수정할 수 있습니까? 그렇지 않으면 무엇이 내 문제입니까?

조언이 도움이 될 수 있습니다.

(불쌍한 내 영어 죄송합니다, 난 훨씬 당신을 귀찮게하지 바랍니다.)


여기 내 자바 설정 코드입니다.

이 클래스는 RootApplicationContext

@Configuration 
@EnableAspectJAutoProxy 
@EnableTransactionManagement 
@ComponentScan(basePackages = { "com.*" }) 
@PropertySources({ @PropertySource(value = "classpath:database.properties"), 
     @PropertySource(value = "classpath:hibernate.properties") }) 
@Import(value = { HibernateConfig.class, DruidConfig.class, TransactionConfig.class }) 
public class SpringContextConfig { 

} 

에 대한 writen되는이이 나는 클래스 상에 @Transactionl 넣어 가지고, 서비스를 관리 할 필요가있다

@EnableTransactionManagement 
public class TransactionConfig implements TransactionManagementConfigurer { 

    @Resource 
    SessionFactory sessionFactory; 
    @Resource 
    DataSource dataSource; 

    @Bean(name = "transactionManager") 
    public HibernateTransactionManager hibernateTransactionManager() { 
     HibernateTransactionManager txManager = new HibernateTransactionManager(); 
     txManager.setDataSource(dataSource); 
     txManager.setSessionFactory(sessionFactory); 
     return txManager; 
    } 

    @Override 
    public PlatformTransactionManager annotationDrivenTransactionManager() { 
     return hibernateTransactionManager(); 
    } 

} 

거래 javaConfig입니다

@Service("locationService") 
@Transactional(value="transactionManager") 
public class LocationServiceImpl implements LocationService { 
    @Resource 
    SessionFactory sessionFactory;  
    @Resource(name = "locationDaoImp") 
    LocationDao dao; 

    @Override 
    public Location queryLocationById(String locationId) { 
     return dao.queryLocationById(locationId); 
    } 

오류가 발생하면 daoClass에서 디버깅하려고 시도했지만 (항상) 등 오류가 난 메소드 getCurrentSession()

Location location = (Location) sessionFactory.getCurrentSession().get(Location.class, locationId); 

를 사용할 때 나는 내 프로젝트에 스프링 orm.jar을 추가하려고 후에이,

Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: org/springframework/orm/ObjectRetrievalFailureException 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:539) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:420) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:257) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    at com.sun.proxy.$Proxy29.queryLocationById(Unknown Source) 
    at com.test.controller.LocationController$1.execute(LocationController.java:83) 
    at com.test.service.ExecuteTaskService$1.run(ExecuteTaskService.java:22) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 

답변

0

확인의 예외입니다, 모든 것 괜찮아, 더 이상 오류, 나는 올바른 대답을 얻을 수 있으며 트랜잭션이 제대로 프로그램을 디버깅 할 때 제대로 작동합니다.

하지만 내 프로그램이 XML 구성이있는 spring-orm없이 잘 작동하기 때문에 아직도 내 작업에 대해 혼란 스럽다. (필자는 내 javaConfig 클래스와 내 xml 구성 파일의 차이점이 없다고 확신한다. 방금 java.xml 파일로 내 xml 파일을 전송했습니다.)

질문 아래의 모든 설명을 환영합니다.