[英]How to pass a Hibernate entity object to another method to save to database?
我有一個EJB,它訪問一個實體並用新數據更新它,並將其發送到JMS隊列,然后由MDB消耗,該MDB應該實現將實體保存/持久化到數據庫的代碼。 這是從數據庫訪問實體的EJB:
AccountAccessBean.java
@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);
}
}
當前,此Bean更新實體,並自行將更改提交到數據庫。 我想將代碼的“提交”部分移至以下接收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對象一起傳遞嗎? 任何幫助或指導,我們將不勝感激。
你有兩個操作
您的交易不能也不應同時涉及這兩種操作
JMS消息可以
有關將JMS消耗和數據庫提交合並為單個事務的更多信息,請參見此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.