2010-10-25 80 views
3

我不是JSF的粉絲。 Spring MVC對我來說很有意義,我過去也使用過它。什麼是混合使用Spring MVC和CDI/JEE6的最佳方式?

你可以談談我嗎?或者提供將它很好地整合到JEE6以及與CDI共享和陷阱的技巧。

我不介意只爲MVC的東西有一個應用程序上下文,但如果我在我的MVC控制器中使用@Inject或@EJB,會出現什麼問題?

Seam3似乎很有趣,但它是否準備好生產?

回答

1

你能說服我放棄它還是提供了很好的將其集成到JEE6提示和分享,並與陷阱CDI

也許我錯了,但我認爲你無論如何都必須做出選擇在CDI和Spring的DI部分之間,他們中的一個必須負責創建發生魔法的對象。所以如果你想在Spring MVC中使用CDI,你必須製作你的控制器CDI bean。來自JavaOne 2010 : Java EE 6 Panel "What do we do now?" notes

SpringMVC和CDI? =>技術上可能:使用CDI bean作爲控制器(但是Reza說他們沒有看到SpringMVC做足夠的需求)。

我也熱烈地建議看看Java EE 6 (CDI/EJB 3.1) XOR Spring Core Reloaded

我不介意只爲MVC的東西有一個應用程序上下文,但如果我在我的MVC控制器中使用@Inject或@EJB,會出現什麼問題?

Spring提供了內置的support of "at inject" from JSR-330,也爲@EJB提供了一些魔力。如果這就是你要找的所有東西,那Spring就會起作用。但這不是CDI(JSR-299)給你的。

+1

是的,閱讀亞當的文章a發表時。我現在在一個綠地項目中,我想要做的選擇是JEE6全押,除了JSF。 ;) 我們都不喜歡JSF模型。如果沒有別的,我們將使用JAX-RS完成所有任務 - 這是我們的瀏覽器API,它是我們的自動化API。對於面向用戶的頁面來說,綁定的錯誤處理稍微好一些。 – pickles 2010-11-01 20:14:08

+0

和@pickles,你最終解決了這個難題:「如何在沒有這個愚蠢的JSF的情況下使用完整的JEE6堆棧」? – Lastnico 2012-03-23 13:14:10

3

另一個選擇是使用JAX-RS作爲控制器(使用澤西實現,您可以將控制轉發給JSP),並使用JSP作爲您的視圖。這樣您就不必擔心將Spring與Java EE集成。

例如,你可以有一個HomeController的:

@Path("/") 
@Stateless 
public class HomeController { 

    @Context 
    HttpRequest request; // Injects request object so you set attributes. 

    @EJB // Inject your EJB 
    EmployeeServiceLocal employeeService; 

    @GET 
    public Viewable getHomePage() { 

     Employee employee = employeeService.getEmployee(); 
     request.setAttribute("employee", employee); 
     return new Viewable("/home.jsp", null); 
    } 
} 

這將引導您進入一個JSP叫回到Home.jsp,你將能夠通過請求對象來獲取對JSP您的數據。請注意,JAX-RS用於RESTful Web服務,因此要了解下面的代碼中發生了什麼,您必須瞭解REST。

1

Using CDI from Spring解釋瞭如何使用BeanFactoryPostProcessor構建CDI到Spring橋接器,該BeanFactoryPostProcessor將所有Bean從CDI BeanManager導入到Spring應用程序上下文中。

帕斯卡說得對,你必須在彈簧DI和CDI之間作出選擇,但是通過這種方法,你可以選擇每個模塊

在典型的WAR佈局中,有一個Web模塊在WEB-INF/lib中使用了許多服務和持久性模塊。使用CDI到Spring橋接器,可以將WEB-INF/lib模塊轉換爲CDI Bean歸檔文件,而Web模塊是而不是 bean歸檔文件,並且只使用Spring DI。

橋接通過JNDI訪問CDI BeanManager併爲每個CDI bean創建一個Spring工廠bean。

我正在爲您的使用案例準確使用此橋:將Spring MVC Web前端與Java EE 6後端集成。

相關問題