首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

spring框架下注解事务出现的错误

2012-01-13 
spring框架下注解事务出现的异常我在用注解事务的时候出现下面的异常Exception in thread main org.spri

spring框架下注解事务出现的异常
我在用注解事务的时候出现下面的异常
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [beans.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:452)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at questionTest.QuestionTest.main(QuestionTest.java:18)

关建代码如下:
beans里面的<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 
  
  <!-- 配置数据源 -->
  <bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <!-- 驱动类 -->
  <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
  <!-- driverUrl连接串 -->
  <property name="url" value="jdbc:sqlserver://localhost:1433; DatabaseName=yd_Test"/>
  <!-- 用户名 -->
  <property name="username" value="sa"/>
  <!-- 密码 -->
  <property name="password" value="123456"/>
</bean>
  <bean name="QuestionDAO" class="com.zy.DAO.QuestionDAO">
  <property name="dataSource" ref="dataSource"/>
  <property name="transactionManager" ref="transactionManager"/>
  </bean>
  <!-- 注解事务 -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  <property name="dataSource" ref="dataSource"></property>  
</bean>  
  <tx:annotation-driven transaction-manager="transactionManager" />
<bean name="QuestionItemDAO" class="com.zy.DAO.QuestionItemDAO">
  <property name="dataSource" ref="dataSource"/>
</bean>
<bean name="QuestionTypeDAO" class="com.zy.DAO.QuestionTypeDAO">


  <property name="dataSource" ref="dataSource"/>
</bean>
<bean name="CategoryDAO" class="com.zy.DAO.CategoryDAO">
  <property name="dataSource" ref="dataSource"/>
</bean>
<bean name="ExamPaperDAO" class="com.zy.DAO.ExamPaperDAO">
  <property name="dataSource" ref="dataSource"/>
  <property name="transactionManager" ref="transactionManager"/>
</bean>

</beans>

DAO里面的@Transactional
public int AddQuestion(Question q) {
String sql="insert into question (title,answers,question_type_id,category_id,build_date,builder_id,remark) " +
"values(:title, :answers, :question_type_id, :category_id, :build_date, :builder_id, :remark)";
Map<String, Object> questionMap=new HashMap<String, Object>();
questionMap.put("title", q.getTitle());
questionMap.put("answers", q.getAnswers());
questionMap.put("question_type_id", q.getQuestion_type_id());
questionMap.put("category_id", q.getCategory_id());
questionMap.put("build_date", q.getBuildDate());
questionMap.put("builder_id", q.getBuilder_id());
questionMap.put("remark", q.getRemark());
 
//返回数据
int rows=0;
//添加question
rows=getSimpleJdbcTemplate().update(sql, questionMap);

//获取question最近插入的id的
String sql_id="select MAX(id) as id from question";
@SuppressWarnings("deprecation")
Question question_id=(Question) getSimpleJdbcTemplate().queryForObject(sql_id,ParameterizedBeanPropertyRowMapper.newInstance(Question.class));
//添加item
QuestionItem item=new QuestionItem();
for (int i = 0; i < q.getItemsList().size(); i++) {
//获取questionItem 
item=q.getItemsList().get(i);
//添加items
String sql_item="insert into question_item (question_id,item) values(:question_id, :item)";
Map<String, Object> itemMap=new HashMap<String, Object>();
itemMap.put("question_id",question_id.getId());
itemMap.put("item", item.getItem());
 
getSimpleJdbcTemplate().update(sql_item, itemMap);
}

return rows;
}
测试代码:
public static void main(String[] args){
ApplicationContext context= new ClassPathXmlApplicationContext("beans.xml");
  QuestionDAO qDaoInf=(QuestionDAO)context.getBean("QuestionDAO");
   
  //添加选择项
  QuestionItem item1=new QuestionItem();
  item1.setItem("注解式事物管理1");
  QuestionItem item2=new QuestionItem();
  item2.setItem("注解式事物管理2");
  QuestionItem item3=new QuestionItem();
  item3.setItem("注解式事物管理3");
  QuestionItem item4=new QuestionItem();
  item4.setItem("注解式事物管理4");
  //添加试题
  List<QuestionItem> lisItems=new ArrayList<QuestionItem>();
  lisItems.add(item1);
  lisItems.add(item2);
  lisItems.add(item3);
  lisItems.add(item4);
  Date now=new Date();
  Question question=new Question("注解式事物管理的测试!",lisItems,"注解式事物管理1",1,1,now,2,"注解事物测试");
   
  int rows=qDaoInf.AddQuestion(question);
  System.out.println(rows);
   


}
我把beans.xmlp里面的
<tx:annotation-driven transaction-manager="transactionManager" />
这句话去掉在DAO里面加了一个方法反回一句话测试
public String query()
{
return "你好";
}
没有异常发生。但是一加上去就会出现上面的异常

我在网上找了好久都没找到解决办法。希望各位高手指点

[解决办法]
<tx:annotation-driven transaction-manager="txManager"/> 
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
必须给注入事务管理器的实例。这样就不报错了
[解决办法]
nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
少activation.jar包

热点排行