2010-06-01 93 views
2

我已經理解,如果我在Spring上下文中使用EJB,那麼我將獲得與在「純」EJB3環境中使用EJB相同的好處,這是真的嗎?我用Google搜索了一下,但找不到明確的答案。EJB3 with Spring

例如,假設我有一個會話bean,它會更新數據庫中的某些表並引發系統異常。在「純」的EJB3環境中,事務被回滾。如果我舉個例子@Autowire這個使用Spring的bean,Spring是否會像EJB3容器一樣處理事務處理?或者是什麼?它可能需要一些特定的配置,還是完全「自動」?

+0

看起來你似乎已經回答了你自己的問題。我建議你發佈你的「更新」作爲答案。這樣你可以在幾天後接受它。 – ewernli 2010-06-08 07:23:37

+0

@ewernli:好的,按照你的建議 – fish 2010-06-08 08:42:49

回答

2

我鏈接到文章很好的答案,並從這些我編譯我的理解,是的,會話bean相同的方式工作,無論他們是否與Spring或不使用,只要因爲這些bean在Spring上下文中定義爲<jee:jndi-lookup>。還發現了一個很好的,簡單的文章:http://java.dzone.com/articles/ejb-30-and-spring-25

但是我不能接受只有一個答案,因爲對我來說他們都一樣好,但沒有一個完全在點:)可能是我的問題並不清楚足以開始...

(有人建議我發佈這個作爲我自己的問題的答案)

+0

+1您的調查 – ewernli 2010-06-08 09:54:40

+0

你得到了自己+1 – user1622058 2015-09-30 19:32:08

2

您可以讓Spring處理事務並相應地回滾。您必須對其進行配置才能這樣做,但EJBs也是如此。

生活中沒有什麼是真正的「自動」。你必須告訴代碼你想要什麼。

真正的問題是:爲什麼你認爲你需要EJB和Spring?任何你可以用EJB做的事情都可以通過使用Spring的POJO來完成。什麼是EJB在這裏購買你?

+1

'你必須配置它才能這樣做':公平:兩者都有明智的默認設置。在春天:定義一個platformtransactionmanager,使用@transactional註釋,你已經開始運行,這不是很多配置 – 2010-06-01 13:38:23

+1

你可以在Spring中使用POJO的遠程處理嗎? – fish 2010-06-01 13:44:58

+0

yes:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html – 2010-06-01 13:48:00

3

spring有很多功能,其中之一是transaction management,它在所有不同的orm實現(jpa,raw hibernate,jdbc,jdo等)中使用了一個通用抽象。默認行爲是在事務性方法中,運行時異常會導致回滾(這可能是您想要的),但您也可以使用fine-tune the rollback rules

但是,這些都不需要EJB。如果你不使用EJB(無狀態,有狀態,mdbs),那麼JPA就足夠了,spring jpa support非常好。在90%的情況下,Spring將提供您在沒有EJB的情況下所需的一切。


編輯:

閱讀本關於Spring EJB integration

6

我明白,如果我在 Spring上下文中使用EJB,我得到的所有相同 好處,如果我在使用它「純」的EJB3環境,這是真的嗎?

您通常使用POJO + Spring EJB3。我有點被你「春EJB」的意思迷茫......

POJO + Spring和EJB3現在相當接近,並且具有相同的設施,當談到聲明式事務管理

我不知道安全的所有細節,但我會說這兩種技術也非常相似。

實際上Spring和EJB3都依賴於其他規範。重要的是:JPA(持久性),JTA(分佈式事務),JMS(消息傳遞),JDBC(數據源)。對這兩個技術堆棧存在良好的支持。

這兩種技術都變得非常靈活,您可以選擇使用或不使用。所以你可以在應用中使用EJB3。服務器和非常輕。或者,您可以使用Spring,所有模塊幾乎與完整的應用程序一樣重。服務器。

我認爲EJB3模型仍然有點更豐富,像遠程處理,有狀態會話bean(SFSB),容器管理事務和擴展持久化上下文。加上可能的支持聚集取決於應用程序。服務器。但這些是很少使用的高級功能(並且IMO需要專業知識)。

EJB3 vs Spring

+0

那麼可以使用Spring來連接會話bean。這樣做有什麼意義是一個很好的問題,但到目前爲止,我有兩個原因:1)我們要求後端服務是EJB的「規則」。 2)使用Spring上下文文件很容易模擬EJB使用的某些服務。我不明白的是,Spring如何使用EJB,並且會丟失容器的一些「自動」功能。 – fish 2010-06-02 07:44:09

+0

@fish啊!所以你的問題真的是關於如何將EJB與Spring集成。我錯了,我的不好。看看http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html,我的看法是Spring啓動了JTA事務,而EJB只是註冊爲它只要它們標有「REQUIRED」,這是默認設置。所以這應該透明地工作。但是如果我是你,無論如何我都會做一些測試。 – ewernli 2010-06-02 08:28:42