2014-12-13 30 views
0

我正在試驗Java依賴注入。這裏討論關於jndi資源被連線的許多問題。但我認爲,可以使用@Resource註釋來連接java類。我有一個簡單的servlet,在這個servlet中我有兩個使用CDI連接的屬性。我正在使用Tomcat6,Servlet 2.5和Weld配置。如何在servlet(或任何其他Java類)中使用@Resource註釋?

servlet代碼:

@Inject 
private HikariConnectionProperties hikariConnectionProperties; 

@Resource(name = "connectionProvider") 
private IConnectionProvider connectionProvider; 

但是我得到的編譯代碼,部署。但是,當有相應的servlet的請求時,我得到javax.naming.NameNotFoundException: Name connectionProvider is not bound in this Context

但是,我對ConnectionProvider類有@Named註釋。 對於這兩個字段,相同的配置適用於@Inject

所以,我的第一個問題是我該如何解決這個問題?是否有任何方法可以指定特定注入的範圍(僅使用JSR註釋),而不使用Spring的@Scope?任何示例都非常有幫助,因爲我是CDI的新手。

+0

您可以看到[此鏈接](https://docs.jboss.org/cdi/spec/1.0/html/implementation.html#resources)'ConnectionProvider'不應該是'@ Named',它應該是' @ResourceContext'等 – Everv0id 2014-12-13 13:50:35

+0

@ Everv0id資源也不起作用 – phoenix 2014-12-13 13:55:22

+0

那麼,如果從注入點中刪除'(name =「connectionProvider」)'或將其添加到'ConnectionProvider'聲明會發生什麼? – Everv0id 2014-12-13 14:14:35

回答

3

@Resource只能在Tomcat中在您的容器中設置資源時使用。這裏有一個你自己參考的參考:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html

它期望你在Tomcat中綁定一個叫做「connectionProvider」的JNDI條目。 CDI不會將元素綁定到JNDI,它有自己的內部映射到範圍的對象。 @Inject在這裏工作,因爲您可能尚未在資源配置中爲此類設置資源。

相關問題