2013-08-28 79 views
0

在我的一個Vaadin視圖中,我嘗試通過注入@Inject來獲取駐留在另一個項目(bll)中的業務對象。從其他項目注入Vaadin視圖

Vaadin觀點:

public class FruitSaladView extends VerticalLayout implements View { 
    @Inject 
    BananaService bananaService; 
... 
} 

我不能做到這一點,當然bananaService對象是在運行時爲空,因爲我無處做組件的掃描包。

我使用註釋,所以我沒有在我的Vaadin web項目中的web.xml,我甚至沒有一個WEB-INF文件夾。

我也知道有一些替代品,像CDI-UtilsVaadin CDI Vaadin插件,以及some other解決方案,這一點,但他們似乎都注入東西到主UI(不意見),並從網絡應用程序本身,而不是其他模塊。

我使用Vaadin 7和Tomcat 7(只要它使用Tomcat給出的答案,下面的問題是可行的)

問:什麼是推薦的方式,從另一個模塊注入豆進入Vaadin的觀點,我需要做什麼才能做到這一點?

後續問題:使用上述方法後,使用Tomcat進行此應用會出現問題嗎?

+0

將您的其他項目轉換爲jar。放入您當前的項目類路徑。我不知道Vaadin,但必須有一個地方可以訪問IoC容器。在那裏聲明你的bean。 –

+0

這就是問題所在。我無法訪問IoC容器,因爲我不知道如何或在哪裏做。在其他項目中,我使用@Inject在代碼和組件掃描中成功注入了context.xml。 Vaadin本身不使用context.xml。 – Roger

回答

1

Tomcat只是Servlet容器,如果你想使用CDI,你必須使用符合JEE6的服務器,比如tomee或者jboss。 如果您對集成Vaadin和CDI的最佳實踐感興趣,我建議您從以下開始:http://www.adam-bien.com/roller/abien/entry/essential_vaadin_7_java_ee

您寫道您要直接注入bean Vaadin視圖。分析示例代碼https://github.com/vaadin/cdi/blob/master/vaadin-cdi-example/src/main/java/com/vaadin/cdi/example/view/RootView.java以瞭解如何使用vaadin-cdi附加組件

+0

謝謝!我知道Vaadin-CDI插件。如果可以,我寧願使用不需要完整應用程序服務器的方法。我想使用Tomcat。如果我想將@Inject/@ Autowired bean添加到Vaadin視圖類中,還有CDI/EJB的另一種選擇,還是我想要實現的最佳建議? – Roger

+0

@Roger,我想你應該開放你的應用服務器。如果你喜歡Tomcat,請檢查TomEE。 但是,如果你真的只喜歡Tomcat,請閱讀下面的解決方案:http://www.lucubratory.eu/getting-weld-cdi-into-tomcat-7/ – michaldo