2012-03-19 63 views
0

我有 addAgent定义为Spring事务链接

@Override 
@Transactional(readOnly=false) 
public void addAgent(Agent agent, String password,UserProfile userProfile) { 
    this.userManagerService.addUser(userProfile.getEmail(), password, new String[] {agent.getAgentType()}, userProfile,false); 
    this.userProvisioningService.enableUser(userProfile.getEmail()); 
    agent.setUserProfileId(userManagerService.getUserProfileId(userProfile.getEmail())); 
    agent = (Agent)genericDAO.create(agent); 
} 

addUser用户方法本身是事务性的服务的方法。 每当我试图保存数据。它成功执行前两个,但失败的年龄创建。

代码与junit一起工作正常。

它似乎与事务设置问题的问题。意味着交易中的交易。

任何机构可以帮助我如何做到这一点的交易在春季3

在登录

链的似乎是这样

2012-03-19 17:20:28,945 [TP-Processor2] DEBUG jpa.JpaTemplate - Creating new EntityManager for JpaTemplate execution 
2012-03-19 17:20:28,949 [TP-Processor2] DEBUG impl.SessionImpl - opened session at timestamp: 13321578289 
2012-03-19 17:20:29,161 [TP-Processor2] DEBUG def.AbstractSaveEventListener - delaying identity-insert due to no transaction in progress 
2012-03-19 17:20:29,163 [TP-Processor2] DEBUG jpa.JpaTemplate - Closing new EntityManager after JPA template execution 
2012-03-19 17:20:29,164 [TP-Processor2] DEBUG jpa.EntityManagerFactoryUtils - Closing JPA EntityManager 

可能

delaying identity-insert due to no transaction in progress 

的applicationContext。 xml

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 
    <tx:annotation-driven transaction-manager="txManager" /> 
    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="persistenceUnitName" value="B2C_BROKER" /> 
     <property name="jpaVendorAdapter"> 
      <bean id="jpaAdapter" 
       class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="database" value="MYSQL" /> 
       <property name="showSql" value="false" /> 
       <property name="generateDdl" value="false" /> 
      </bean> 
     </property> 
    </bean> 
    <bean id="genericDAO" class="com.core.orm.dao.GenericDAOImpl"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

找到另一个日志:

2012-03-19 20:13:21,074 [TP-Processor3] DEBUG jpa.JpaTemplate - Creating new EntityManager for JpaTemplate execution 
2012-03-19 20:13:21,082 [TP-Processor3] DEBUG impl.SessionImpl - opened session at timestamp: 13321682010 
2012-03-19 20:13:21,082 [TP-Processor3] DEBUG impl.SessionImpl - opened session at timestamp: 13321682010 
2012-03-19 20:13:21,090 [TP-Processor3] TRACE impl.SessionImpl - setting flush mode to: AUTO 
2012-03-19 20:13:21,090 [TP-Processor3] TRACE impl.SessionImpl - setting flush mode to: AUTO 
2012-03-19 20:13:21,096 [TP-Processor3] TRACE impl.SessionImpl - setting cache mode to: NORMAL 
2012-03-19 20:13:21,096 [TP-Processor3] TRACE impl.SessionImpl - setting cache mode to: NORMAL 
2012-03-19 20:13:21,100 [TP-Processor3] TRACE def.AbstractSaveEventListener - transient instance of: com.xchange.agent.domain.Agent 
2012-03-19 20:13:21,100 [TP-Processor3] TRACE def.AbstractSaveEventListener - transient instance of: com.xchange.agent.domain.Agent 
2012-03-19 20:13:21,103 [TP-Processor3] TRACE def.DefaultPersistEventListener - saving transient instance 
2012-03-19 20:13:21,103 [TP-Processor3] TRACE def.DefaultPersistEventListener - saving transient instance 
2012-03-19 20:13:21,106 [TP-Processor3] TRACE def.AbstractSaveEventListener - saving [com.xchange.agent.domain.Agent#<null>] 
2012-03-19 20:13:21,106 [TP-Processor3] TRACE def.AbstractSaveEventListener - saving [com.xchange.agent.domain.Agent#<null>] 
2012-03-19 20:13:21,110 [TP-Processor3] DEBUG def.AbstractSaveEventListener - delaying identity-insert due to no transaction in progress 
2012-03-19 20:13:21,110 [TP-Processor3] DEBUG def.AbstractSaveEventListener - delaying identity-insert due to no transaction in progress 
2012-03-19 20:13:21,114 [TP-Processor3] DEBUG jpa.JpaTemplate - Closing new EntityManager after JPA template execution 
2012-03-19 20:13:21,115 [TP-Processor3] DEBUG jpa.EntityManagerFactoryUtils - Closing JPA EntityManager 
2012-03-19 20:13:21,117 [TP-Processor3] TRACE impl.SessionImpl - closing session 
2012-03-19 20:13:21,117 [TP-Processor3] TRACE impl.SessionImpl - closing session 
2012-03-19 20:13:21,119 [TP-Processor3] TRACE jdbc.ConnectionManager - connection already null in cleanup : no action 
2012-03-19 20:13:21,119 [TP-Processor3] TRACE jdbc.ConnectionManager - connection already null in cleanup : no action 
+1

它是如何失败?什么是错误? – 2012-03-19 11:51:47

+0

问题没有错误日志在服务器(春季调试是),但最后一行(代理=(代理)genericDAO.create(代理);)执行成功,但代理ID是自动生成仍然为空。 – 2012-03-19 11:59:19

+0

看到这个:http://www.ibm.com/developerworks/java/library/j-ts1/index.html#listing4 – subodh 2012-03-19 12:02:42

回答

0

的问题是固定的发射。但是,线束是我不满意的解决方案。

我正在使用Spring @Autowire注解注入对象。我删除了并手动注入。我工作得很好。

我有点确定注册事务使用注释 (可能是事务代理没有包装服务)需要一些设置。

伙计们,如果任何一个想法我们错过了什么设置我附上我的applicationContext.xml上面。

0

请检查this

发表你的bean definations,如果你仍然面临的一个问题。

编辑

添加以下行到你的日志属性

log4j.logger.org.hibernate.type=trace 

,并检查什么都插入越来越有价值观

+0

请查找附加的bean定义。 – 2012-03-19 13:14:14

+0

使用服务层将数据保存到数据库中。但单元测试没有这个问题。我打开调试并仔细检查日志文件。在数据对数据库惰性化的地方,我发现信息:“由于没有正在进行的交易而延迟身份插入”。 ..很好地帮助我。 – 2012-03-19 13:21:09

+0

insert for this.userManagerService.addUser(userProfile.getEmail(),password,new String [] {agent.getAgentType()},userProfile,false); this.userProvisioningService.enableUser(userProfile.getEmail());工作正常,因为正在使用mybatis插入到数据库(我可以看到这些插入日志。 – 2012-03-20 04:23:06