簡體   English   中英

Websphere上的JPA問題-在Tomcat上工作正常

[英]JPA issue on Websphere — works fine on Tomcat

我有一個使用openJPA作為持久性管理的Spring 3應用程序,以下部分在STS / Tomcat中可以正常工作

@Transactional
createBalance(){
.....
    Balance balance = new SummaryBalance();
    balance.setName(name);
    balance.setCurrency(currency);
    balance.setClosingTimestamp(closingTime);
    balance.setStatus(BalanceStatus.OPEN);
    balance.persist(); // persist !!
 ......

    balance.setCloseAmount(amount);
    balance.setLastUpdateTimestamp(now);
}

但是,在Websphere 7中部署相同的代碼時, closeAmountlastUpdate不會更新(DB中的兩個字段都未獲取更新,但是從日志中,兩個字段都可以通過其getter返回值),然后顯示為null,但是對其他字段進行了更改在persist()之前,該方法完成后才生效。 因此,我敢打賭,當完成WS的方法沒有將更改刷新到這些字段時。

我認為JPA(不論供應商如何)都應在persist()之后保持對余額實體對象的管理,並在方法完成以后的更改之后刷新對象。 事實證明,Websphere 7無法做到這一點。 即使我放了merge()方法

    balance.setCloseAmount(amount);
    balance.setLastUpdateTimestamp(now);
    balance.merge();

仍然沒有幫助。

問題:

  1. OpenJPA已經作為依賴項包含在部署中,但是為什么Websphere仍需要參與JPA管理?
  2. 如何解決問題?

提前致謝。

我不確定這是否能回答您的問題,但是我認為您應該重新配置以使用WebSphere功能,請查看Spring 3.1文檔。

11.8.1 IBM WebSphere

在WebSphere 6.1.0.9及更高版本上,推薦使用的Spring JTA事務管理器是WebSphereUowTransactionManager。 這個特殊的適配器利用了IBM的UOWManager API,該API在WebSphere Application Server 6.0.2.19和更高版本以及6.1.0.9和更高版本中可用。 使用此適配器,IBM正式支持Spring驅動的事務掛起(由PROPAGATION_REQUIRES_NEW啟動的掛起/恢復)!

11.9.1為特定的數據源使用錯誤的事務管理器

根據您對事務技術和需求的選擇,使用正確的PlatformTransactionManager實現。 如果使用得當,Spring框架僅提供了直接且可移植的抽象。 如果您正在使用全局事務,則必須對所有事務操作使用org.springframework.transaction.jta.JtaTransactionManager類(或其特定於應用程序服務器的子類)。 否則,事務基礎結構將嘗試對資源(例如容器DataSource實例)執行本地事務。 這樣的本地事務是沒有意義的,好的應用服務器會將它們視為錯誤。

自己通過猜測工作找出解決方案。 只需將persist()放在整個方法主體的末尾即可。

@Transactional
createBalance(){
.....
    Balance balance = new SummaryBalance();
    balance.setName(name);
    balance.setCurrency(currency);
    balance.setClosingTimestamp(closingTime);
    balance.setStatus(BalanceStatus.OPEN);
 ......

    balance.setCloseAmount(amount);
    balance.setLastUpdateTimestamp(now);
 ......
    balance.persist(); // persist !!
}

這樣可以確保在方法完成之前已設置每個字段。 merge()和顯式flush()都不會完成這項工作,而只會做出上述妥協。 仍然不太確定官方的解決方法。

對於任何新的想法,我都會保持開放狀態:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM