簡體   English   中英

在分布式事務期間保持數據庫連接活動

[英]Keeping DB connection alive during distributed transaction

我在JBoss EAP 6.2上使用EJB在Java中運行了很長時間。 問題是,首先我必須修改一個數據庫中的數據,然后多次調用某些Web服務,並且根據我從這些Web服務獲得的結果,我還必須修改同一數據庫中的數據。

這些Web服務有點慢,我在應用程序服務器和數據庫服務器之間擁有的狀態防火牆會在事務結束之前終止與數據庫的連接,因為它在一段時間內處於非活動狀態。 我無法重新配置上述防火牆。

我的問題是:在整個事務中保持數據庫連接活動的最佳方法是什么?

概括您的要求。 你需要:

  1. 在DB1上執行更新操作。
  2. 執行各種WS操作。
  3. 根據步驟2的結果,更新DB2。

然后您說您的問題是保持數據庫連接活動。 您沒有提到哪一個,但是我想那一定是針對DB2的。 您也在談論事務,因此我想您必須將Session Bean與CMT或BMT一起使用。

我認為您遇到事務超時而不是數據庫連接超時。 我不使用EAP,但是根據我在各種JBOSS版本中的經驗(大約30秒)。

如果以上是您的情況,則有兩種選擇:

  1. 全局增加tx超時值,我不建議這樣做。
  2. 使用定制的@TransactionTimeout批注或調整JBOSS jboss-ejb3.xml部署描述符。

例子:

帶有注釋:

@TransactionTimeout(值= 10,單位= TimeUnit.SECONDS)

使用jboss-ejb3.xml:

<assembly-descriptor>
    <container-transaction>
        <method>
            <ejb-name>BeanWithTimeoutValue</ejb-name>
            <method-name>*</method-name>
            <method-intf>Local</method-intf>
        </method>
        <tx:trans-timeout>
            <tx:timeout>10</tx:timeout>
            <tx:unit>Seconds</tx:unit>
        </tx:trans-timeout>
    </container-transaction>
</assembly-descriptor>

以上所有內容均來自Jboss 7.1文檔,請特別注意,以上內容僅適用於新事務。

請參閱: Jboss 7.1文檔

暫無
暫無

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

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