2011-08-27 84 views
3

我有一個MDB正在傾聽特定主題。如何在EJB中執行XA事務?

我已經配置與JBoss XA數據源...

我已經設置持久性的.xml

<persistence-unit name="jpa" transaction-type="JTA"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<jta-data-source>java:jdbc/BKS_DataSource</jta-data-source> 
<class>com.jms.mdb.SampleData</class>  
<properties> 

    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 

    <property name="hibernate.hbm2ddl.auto" value="update"/> 

    <property name="hibernate.show_sql" value="true"/> 
    <!-- 
    <property name="hibernate.format_sql" value="true"/> 
    --> 
</properties> 
</persistence-unit> 

每當我收到東西,我只是在MDB

@PersistenceContext 
EntityManager em = null; 

public void onMessage(Message message) { 
    try { 

     LoggingEvent event = (LoggingEvent)((ObjectMessage)message).getObject(); 
     System.out.println("Received something11"); 
     SampleData s= new SampleData(); 
     s.setMessage(event.getLoggerName()); 
     em.persist(s); 

     System.out.println("Persisted"); 

     //Create.main(null); 
    } catch (JMSException e) { 
     e.printStackTrace(); 

    }  
} 
執行該代碼

所以基本上我需要執行兩階段提交事務...所以我想知道我應該做什麼執行XA事務....另外我想只在Java EE 5上執行它

回答

1

如果您的數據源配置爲XA數據源,那麼所有你需要做的是用適當的事務管理註釋來註釋MDB:

@MessageDriven 
@TransactionManagement(CONTAINER) 
@TransactionAttribute(REQUIRED) 
public class MyMDB implements MessageListener { 

public void onMessage(Message message) { 
    // Hello, message! 
} 

} 
+0

非常感謝你的答案.. NI只是好奇它如何處理回滾? – user796666

+0

你的意思是你如何回滾交易或者當你回滾時會發生什麼? – Behrang

+0

是的,當回滾發生時會發生什麼? n是否可以控制回滾? – user796666