[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - CMT doesn't rollback

su27 do-not-reply at jboss.com
Wed Dec 19 21:18:45 EST 2007


My application is using Jboss 4.2.1, EJB3(stateless session bean), EntityManager, Hibernate and Postgresql. it doesn't rollback.

ds.xml

  | <local-tx-datasource>
  | <jndi-name>PGDS/JTA</jndi-name>
  | <connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url>
  |     <driver-class>org.postgresql.Driver</driver-class>
  |     <user-name>xxxxxx</user-name>
  |     <password>yyyyyy</password>
  |     <metadata>
  |       <type-mapping>PostgreSQL 8.0</type-mapping>
  |     </metadata>
  |   </local-tx-datasource>
  | 

persistence.xml

  | <?xml version="1.0" encoding="UTF-8"?>
  | <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  |   <persistence-unit name="JTA-EJBPU" transaction-type="JTA">
  |     <jta-data-source>java:/PGDS/JTA</jta-data-source>
  |     <properties>
  |         <property name="hibernate.show_sql" value="true"/>
  |     </properties>
  |   </persistence-unit>
  | </persistence>
  | 

session bean

  | @Stateless
  | @LocalBinding(jndiBinding="JTA/JTALocal")
  | public class JTABean implements JTALocal {
  |     @PersistenceContext(unitName = "JTA-EJBPU",type=PersistenceContextType.TRANSACTION)
  |     private EntityManager em ;
  |     @TransactionAttribute(TransactionAttributeType.REQUIRED)
  |     public void run (int i)throws Exception{
  |         
  |         try{
  |         School sc1 = new School("first");
  |         em.persist(sc1);
  |         if(i == 1) throw new Exception();
  |         School sc2 = new School("second");
  |         em.persist(sc2);
  |         }catch(Exception e){
  |             
  |             System.out.println("roll back?");
  |             throw e;
  |         }
  |     }
  |  
  | }
  | 

JBoss startup info

  | [ConnectionProviderFactory] Initializing connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
  | [InjectedDataSourceConnectionProvider] Using provided datasource
  | [SettingsFactory] RDBMS: PostgreSQL, version: 8.2.5
  | [SettingsFactory] JDBC driver: PostgreSQL Native Driver, version: PostgreSQL 8.2 JDBC4 with SSL (build 507)
  | [Dialect] Using dialect: org.hibernate.dialect.PostgreSQLDialect
  | [TransactionFactoryFactory] Transaction strategy: org.hibernate.ejb.transaction.JoinableCMTTransactionFactory
  | [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
  | [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
  | [SettingsFactory] Automatic flush during beforeCompletion(): disabled
  | [SettingsFactory] Automatic session close at end of transaction: disabled
  | [SettingsFactory] JDBC batch size: 15
  | [SettingsFactory] JDBC batch updates for versioned data: disabled
  | [SettingsFactory] Scrollable result sets: enabled
  | [SettingsFactory] JDBC3 getGeneratedKeys(): disabled
  | [SettingsFactory] Connection release mode: auto
  | [SettingsFactory] Default batch fetch size: 1
  | [SettingsFactory] Generate SQL with comments: disabled
  | [SettingsFactory] Order SQL updates by primary key: disabled
  | [SettingsFactory] Order SQL inserts for batching: disabled
  | [SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
  | [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
  | [SettingsFactory] Query language substitutions: {}
  | [SettingsFactory] JPA-QL strict compliance: enabled
  | [SettingsFactory] Second-level cache: enabled
  | [SettingsFactory] Query cache: disabled
  | [SettingsFactory] Cache provider: org.hibernate.cache.HashtableCacheProvider
  | [SettingsFactory] Optimize cache for minimal puts: disabled
  | [SettingsFactory] Cache region prefix: JTA-EAR_ear,JTA-EJB_jar,JTA-EJBPU
  | [SettingsFactory] Structured second-level cache entries: disabled
  | [SettingsFactory] Echoing all SQL to stdout
  | [SettingsFactory] Statistics: disabled
  | [SettingsFactory] Deleted entity synthetic identifier rollback: disabled
  | [SettingsFactory] Default entity-mode: pojo
  | [SettingsFactory] Named query checking : enabled
  | [SessionFactoryImpl] building session factory
  | [SessionFactoryObjectFactory] Factory name: persistence.units:ear=JTA-EAR.ear,jar=JTA-EJB.jar,unitName=JTA-EJBPU
  | [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
  | [SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.units:ear=JTA-EAR.ear,jar=JTA-EJB.jar,unitName=JTA-EJBPU
  | [SessionFactoryObjectFactory] InitialContext did not implement EventContext
  | [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
  | [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.stateless.StatelessContainer
  | [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=JTA-EAR.ear,jar=JTA-EJB.jar,name=JTABean,service=EJB3 with dependencies:
  | [JmxKernelAbstraction]       persistence.units:ear=JTA-EAR.ear,jar=JTA-EJB.jar,unitName=JTA-EJBPU
  | [EJBContainer] STARTED EJB: com.ganz.jta.ejb.JTABean ejbName: JTABean
  | [EJB3Deployer] Deployed: file:/E:/jboss-4.2.1.GA/server/default/tmp/deploy/tmp18536JTA-EAR.ear-contents/JTA-EJB.jar
  | [TomcatDeployer] deploy, ctxPath=/JTA-WAR, warUrl=.../tmp/deploy/tmp18536JTA-EAR.ear-contents/JTA-WAR-exp.war/
  | [EARDeployer] Started J2EE application: file:/E:/jboss-4.2.1.GA/server/default/deploy/JTA-EAR.ear
  | 

I have tried different configurations. in persistence.xml i changed to RESOURCE_LOCAL, non-jta--data-source. i have tried XA data source.
the transaction just doesn't rollback. when i call run(1). it throws an exception between two persistence, but the first record has been saved into database already.

according to the Jboss starup info, it is a CMT.
Transaction strategy: org.hibernate.ejb.transaction.JoinableCMTTransactionFactory

i tried jboss 4.2.0 4.2.1 4.2.2, same 
tried pure JDBC connection, same
use MDB instead of Session Bean, same.

anybody can help me, give me a clue. what am i missing?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4114490#4114490

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4114490



More information about the jboss-user mailing list