私は、エンティティにアクセスして新しいデータでそれを更新し、それをJMSキューに送信し、このエンティティをデータベースに保存/永続化するコードを実装することになっているMDBによって消費されるEJBを持っています。現在、このBeanのエンティティを更新し、自身で変更をデータベースにコミットしHibernateエンティティオブジェクトを別のメソッドに渡してデータベースに保存するにはどうすればいいですか?
@Stateless(mappedName = "AccountAccessBean")
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@LocalBean
public class AccountAccessBean {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void resigterAccountEvent() {
Calendar calendar = Calendar.getInstance();
Date now = calendar.getTime();
Configuration configuration = new Configuration().configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.build();
SessionFactory sessionFactory = configuration
.addAnnotatedClass(Account.class)
.addAnnotatedClass(Accountaccesslog.class)
.buildSessionFactory(registry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Account accountEntity = (Account) session.get(Account.class, new Integer(1));
accountEntity.setAccessCount(accountEntity.getAccessCount() + 1);
Accountaccesslog accountAccessLogEntity = new Accountaccesslog();
accountAccessLogEntity.setAccessDateTime(new Timestamp(now.getTime()));
accountEntity.addAccountaccesslog(accountAccessLogEntity);
session.save(accountAccessLogEntity);
transaction.commit();
session.close();
EntityEnqueueBean enqueueObject = new EntityEnqueueBean();
enqueueObject.enqueueEntity(accountEntity);
}
}
AccountAccessBean.java:ここでは、データベースからエンティティにアクセスするEJBです。私は、JMSメッセージを受信し、次のMDBへのコードの「コミット」部分を移動したい:
AccountPersistenceMDB.java
@MessageDriven(
activationConfig = { @ActivationConfigProperty(
propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue ="java:/jms/queue/AccountAccessQueue")
})
public class AccountPersitenceMDB implements MessageListener {
public void onMessage(Message message) {
ObjectMessage objectMessage = null;
objectMessage = (ObjectMessage) message;
try {
Account accountEntity = (Account) objectMessage.getObject();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
私はこれを実装するかどうかはわかりません。また、accountEntityオブジェクトと一緒にセッションオブジェクトまたはトランザクションオブジェクトを渡す必要がありますか?どんな助けや指導も大歓迎です。