@Resource注释在运行时为null

时间:2010-06-12 23:28:14

标签: java annotations resources glassfish-3

我正在使用GlassFish v3。以下字段在类中声明:

@Resource
private javax.sql.DataSource _data_source;

以下是在web.xml中声明的:

<data-source>
  <name>java:app/env/data</name>
  <class-name>com.mysql.jdbc.Driver</class-name>
  <server-name>localhost</server-name>
  <port-number>3306</port-number>       
  <user>myUser</user>                           
  <password>myPass</password>
</data-source>

在运行时_data_source为空。我做错了什么?

4 个答案:

答案 0 :(得分:2)

你可以试试这个:

@Resource(lookup = "java:app/env/data")
private DataSource _data_source;

另见

答案 1 :(得分:1)

除了Pascal的答案:如果通过注释注入不起作用(没有发生异常,字段只是空),问题通常是旧的部署描述符版本。对于Glasfish v3,您可以使用:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

答案 2 :(得分:1)

尝试使用:

@Resource(lookup="java:app/env/data")
private DataSource _data_source;

答案 3 :(得分:0)

这样的东西应该有效,没有xml:

@Resource(name="jdbc/__default")
private DataSource ds
...
Connection con = null {
try {
  con = ds.getConnection();
  ...
} finally {
  if (con != null) con.close()
}