Цепочка весенних транзакций - PullRequest
0 голосов
/ 19 марта 2012

У меня есть метод обслуживания addAgent, определенный как

@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

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Проблема исправлена. Но я не удовлетворен решением.

Я вводил объект, используя аннотацию Spring @Autowire. Я удалил это и ввел вручную. Я работал нормально.

Я немного уверен, что для ввода транзакции с использованием аннотации требуются некоторые настройки (может быть транзакция прокси не оборачивается вокруг сервиса).

Ребята, если есть какая-то идея, какие настройки мы пропустили, я прикрепил мой applicationContext.xml выше.

0 голосов
/ 19 марта 2012

Пожалуйста, отметьте это

Опубликуйте свои определения бинов, если вы все еще столкнулись с проблемой.

EDIT

Добавьте следующие строки в свойства вашего журнала

log4j.logger.org.hibernate.type=trace

и проверьте, что все вставки запускаются со значениями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...