Via annotation
Usable by EJB, Interceptor, Servlet, Filter, or Listener
package org.superbiz.refs; import javax.annotation.Resource; import javax.ejb.Stateless; import javax.naming.InitialContext; import javax.sql.DataSource; @Stateless @Resource(name = "myFooDataSource", type = DataSource.class) public class MyDataSourceRefBean implements MyBeanInterface { @Resource private DataSource myBarDataSource; public void someBusinessMethod() throws Exception { if (myBarDataSource == null) throw new NullPointerException("myBarDataSource not injected"); // Both can be looked up from JNDI as well InitialContext context = new InitialContext(); DataSource fooDataSource = (DataSource) context.lookup("java:comp/env/myFooDataSource"); DataSource barDataSource = (DataSource) context.lookup("java:comp/env/org.superbiz.refs.MyDataSourceRefBean/myBarDataSource"); } }
Via xml
The above @Resource annotation usage is 100% equivalent to the following xml.
ejb-jar.xml or web.xml
<resource-ref> <res-ref-name>myFooDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> </resource-ref> <resource-ref> <res-ref-name>org.superbiz.refs.MyDataSourceRefBean/myBarDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <injection-target> <injection-target-class>org.superbiz.refs.MyDataSourceRefBean</injection-target-class> <injection-target-name>myBarDataSource</injection-target-name> </injection-target> </resource-ref>