我不是JSF的粉絲。 Spring MVC對我來說很有意義,我過去也使用過它。什麼是混合使用Spring MVC和CDI/JEE6的最佳方式?
你可以談談我嗎?或者提供將它很好地整合到JEE6以及與CDI共享和陷阱的技巧。
我不介意只爲MVC的東西有一個應用程序上下文,但如果我在我的MVC控制器中使用@Inject或@EJB,會出現什麼問題?
Seam3似乎很有趣,但它是否準備好生產?
我不是JSF的粉絲。 Spring MVC對我來說很有意義,我過去也使用過它。什麼是混合使用Spring MVC和CDI/JEE6的最佳方式?
你可以談談我嗎?或者提供將它很好地整合到JEE6以及與CDI共享和陷阱的技巧。
我不介意只爲MVC的東西有一個應用程序上下文,但如果我在我的MVC控制器中使用@Inject或@EJB,會出現什麼問題?
Seam3似乎很有趣,但它是否準備好生產?
你能說服我放棄它還是提供了很好的將其集成到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)給你的。
另一個選擇是使用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。
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後端集成。
是的,閱讀亞當的文章a發表時。我現在在一個綠地項目中,我想要做的選擇是JEE6全押,除了JSF。 ;) 我們都不喜歡JSF模型。如果沒有別的,我們將使用JAX-RS完成所有任務 - 這是我們的瀏覽器API,它是我們的自動化API。對於面向用戶的頁面來說,綁定的錯誤處理稍微好一些。 – pickles 2010-11-01 20:14:08
和@pickles,你最終解決了這個難題:「如何在沒有這個愚蠢的JSF的情況下使用完整的JEE6堆棧」? – Lastnico 2012-03-23 13:14:10