Как выполнить транзакцию XA в EJB? - PullRequest
3 голосов
/ 27 августа 2011

У меня есть MDB, слушающий конкретную тему.

Я настроил источник данных XA с помощью jboss ...

Я установил постоянство .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 Ответ

1 голос
/ 30 августа 2011

Если ваш источник данных настроен как источник данных XA, то все, что вам нужно сделать, это аннотировать MDB с помощью соответствующих аннотаций управления транзакциями:

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

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

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