我最近正在学习javaconfig。所以我试图将我的xml配置传输到javaConfig,但是当我在tomcat上运行项目时完成我的代码后,当我尝试让会话查询时,我收到错误从我的db.I真的很困惑。
在我阅读了一些博客,并在互联网上搜索可能的原因之后,我得到了一个可能的解释,即交易似乎无法正常工作。 (但是错误显示交易运作良好。所以我根本不知道)
如果我得到了正确的假设我如何更正代码?如果没有,我的问题是什么原因?
任何建议都可以提供帮助。
(抱歉我的英语很差,我希望它不会打扰你。)
这是我的java配置代码。
为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 {
}
这是事务javaConfig
@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();
}
}
这是需要管理的服务,我在类
上放了一个@Transactionl@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);
这是例外
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 :(得分:0)
好吧,在我尝试将spring-orm.jar添加到我的项目后,一切似乎都没问题,没有更多的错误,我可以得到正确的答案,并且当我调试程序时事务也正常工作。
但是我仍然对我的操作感到困惑,因为我的程序在没有spring-orm和xml配置的情况下运行良好。(我确信我的javaConfig类与我的xml配置文件没有任何区别。因为我只需将我的xml文件传输到javaConfig。)
欢迎在问题下面发表评论。