#  Via annotation

    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.

    <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>
