DB2 EJB / JPA не выполняет откат

1

Я экспериментирую с очень сложным поведением с CMT в JBoss6. 1+ обращается к zos/390 DB2.

Окружающая среда:

  • JBoss 6. 1+
  • Linux Red Hat
  • DB2 работает в ZOS 390
  • EJB3/JPA2

Транзакция просто не откатывается с SystemExceptions. Я пробовал BMT и с удивлением тоже не работает. Мой код BMT ниже:

@Stateless
@LocalBean
@TransactionManagement(TransactionManagementType.BEAN)
public class ManterPortabilidadeBean
    implements PortabilidadeService {

    @Inject
    private UserTransaction tx;

    @Override
    public void incluirPortabilidade(...) {
        try {
        tx.begin();

            //insert into database          
        daoPortabilidade.incluir(portabilidade);

        if (1==1) 
            throw new EJBException("Bingo");

        tx.commit();
        } catch (Exception e) {
        try {
            tx.rollback();
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        } 
    }
}

Ну, запись в базе !!! Невероятно !!! Контейнер EJB полностью игнорирует, ничего не делает.

Вот код CMT:

@Stateless
@LocalBean
@TransactionManagement(TransactionManagementType.CONTAINER)
public class ManterPortabilidadeBean
    implements PortabilidadeService {

    @Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void incluirPortabilidade(...) {
        //insert into database          
        daoPortabilidade.incluir(portabilidade);

        if (1==1) 
            throw new EJBException("Bingo");
    }
}

Я считаю, что DB2 совершает автоматический запуск, например autocommit = true, но конфигурация сообщает, что autocommit является ложным, см. Persistence.xml ниже:

<persistence-unit name="gecDS" transaction-type="JTA">
    <jta-data-source>java:/jdbc/DB2SigecDS</jta-data-source>
    <properties>
        <property name="hibernate.dialect"value="org.hibernate.dialect.DB2390Dialect" />
        <property name="hibernate.default_schema" value="GEC" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.connection.isolation" value="2" />
        <property name="hibernate.connection.autocommit" value="false"/>
        <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2Driver" />
    </properties>
</persistence-unit>

Я standalone.xml У меня есть эта конфигурация для источника данных:

<datasource jta="false" jndi-name="java:/jdbc/DB2SigecDS" pool-name="jdbc/DB2SigecDS" enabled="true">
    <connection-url>jdbc:db2://************</connection-url>
    <driver-class>com.ibm.db2.jcc.DB2XADataSource</driver-class>
    <driver>db2</driver>
    <security>
        <user-name>*******</user-name>
        <password>*******</password>
    </security>
</datasource>

Любая идея, конфигурация??? Спасибо

  • 0
    Попробуйте изменить атрибут jta на true в файле источника данных.
Теги:
jpa
jboss

1 ответ

0

Я обнаружил странную проблему. Просто конфигурации !!!

В атрибуте datasource "jta" должно быть истинным (спасибо Aramburu), и я использую XADatasource:

<persistence-unit name="gecDS" transaction-type="JTA">
    <jta-data-source>java:/jdbc/DB2SigecDS</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DB2390Dialect" />
        <property name="hibernate.default_schema" value="GEC" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.connection.isolation" value="2" />
        <property name="hibernate.connection.autocommit" value="false"/>
        <property name="javax.persistence.jdbc.driver" value="com.ibm.db2.jcc.DB2XADataSource" />
    </properties>
</persistence-unit>


<datasource jta="true" jndi-name="java:/jdbc/DB2SigecDS" pool-name="jdbc/DB2SigecDS" enabled="true">
    <connection-url>jdbc:db2:**************</connection-url>
    <driver-class>com.ibm.db2.jcc.DB2XADataSource</driver-class>
    <driver>db2</driver>
    <security>
        <user-name>???????</user-name>
        <password>???????</password>
    </security>
</datasource>

Друзья пользователя спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню