public class MyServlet extends HttpServlet {
@Resource(name="java:comp/DefaultDataSource")
private javax.sql.DataSource dsc;
...
}
Java Platform, Enterprise Edition (Java EE) 8 The Java EE Tutorial |
Previous | Next | Contents |
Resource injection enables you to inject any resource available in the JNDI namespace into any container-managed object, such as a servlet, an enterprise bean, or a managed bean. For example, you can use resource injection to inject data sources, connectors, or custom resources available in the JNDI namespace.
The type you use for the reference to the injected instance is usually an interface, which decouples your code from the implementation of the resource.
For example, the following code injects a data source object that provides connections to the default Apache Derby database shipped with GlassFish Server:
public class MyServlet extends HttpServlet {
@Resource(name="java:comp/DefaultDataSource")
private javax.sql.DataSource dsc;
...
}
In addition to field-based injection as in the preceding example, you can inject resources using method-based injection:
public class MyServlet extends HttpServlet {
private javax.sql.DataSource dsc;
...
@Resource(name="java:comp/DefaultDataSource")
public void setDsc(java.sql.DataSource ds) {
dsc = ds;
}
}
To use method-based injection, the setter method must follow the
JavaBeans conventions for property names: The method name must begin
with set
, have a void
return type, and have only one parameter.
The @Resource
annotation is in the javax.annotation
package and is
defined in JSR 250 (Common Annotations for the Java Platform). Resource
injection resolves by name, so it is not typesafe: the type of the
resource object is not known at compile time, so you can get runtime
errors if the types of the object and its reference do not match.
Previous | Next | Contents |