2010-11-12 67 views
2

使用NetBeans IDE和Glassfish服務器。出於某種原因,我無法獲得注入的數據源(已嘗試過一百萬個變體)。Glassfish - 資源注入不起作用

private DataSource iserver; 
@Resource(name="jdbc/iserver", type=DataSource.class) 
public void setIServer(DataSource dataSource) { 
    this.iserver = dataSource; 
} 

(我已經嘗試將@Resource註釋直接添加到字段中)。連接池和JDBC資源是在Glassfish的配置,並暫時,我已經添加了解決方法的代碼(在同一個班):

ctx = new InitialContext(); 
iserver = (DataSource) ctx.lookup("jdbc/iserver"); 

解決方法的代碼完美的作品。我在Glassfish日誌中看不到任何明顯的相關錯誤。我確實看到了這一點,但不知道它的關聯:

* 名稱不能javax.management.ObjectName.construct(ObjectName.java:405)爲空*在javax.management.ObjectName的(ObjectName.java: 1403)at org.glassfish.admingui.common.handlers.ProxyHandlers.getRuntimeProxyAttrs(ProxyHandlers.java:289)at org.glassfish.admingui.common.handlers.ProxyHandlers.getProxyAttrs(ProxyHandlers.java:273)at ...

有什麼建議嗎?

回答

1

確保你在會話bean或注入不起作用。

這裏是我如何注入

@Resource(name="jdbc/my_db") private DataSource dataSource; 
+0

感謝您的答覆選擇選項"name"。我完全不熟悉這一點 - 當你說「確保你在會話bean中」時,需要指定哪些內容(例如,我的課程是否必須擴展SessionBean?) – 2010-11-15 00:37:28

+1

注入只在你'在會話bean中不是pojo(普通的java對象)。所以,如果你注射你需要在一個實現你的遠程接口類 即: @Stateless(mappedName =「YourSessionBean」) 公共類YourSessionBean實現YourSessionRemote { – Preston 2010-11-15 16:28:14

+0

非常感謝!我讚賞澄清。 – 2010-11-15 23:13:35

2

一個例子由"lookup"-->

@Resource(lookup = "java:global/env/jdbc/__default") 
DataSource dataSource; 
+0

文件是不是誤導了一下? 'name'屬性的文檔說明:_資源的JNDI名稱._所以,謝謝你爲我節省了很多時間! – 2016-02-04 13:27:34