ejb@glassfish.java.net

Re[2]: Defining DataSource JNDI name in ejb-jar.xml

From: AKostylev <akostylev_at_ipian.kazan.ru>
Date: Tue, 29 Aug 2006 17:30:45 +0400

But as I understand I can use injection without using annotation,
defining it in ejb-jar.xml.
Here is the sample:

@Stateless
public class FacadeBean implements Facade
{
        private DataSource ds;
        public void testDataSource()
        {
                try
                {
                        ds.getConnection();
                }
                catch (SQLException e)
                {
                        throw new EJBException(e);
                }
        }
...
}

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar 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/ejb-jar_3_0.xsd">
   <description>J2EE5 test application </description>
   <display-name>Facade</display-name>
   <enterprise-beans>
          <session>
                 <ejb-name>Facade</ejb-name>
                 <remote>ru.amfitel.test.bean.Facade</remote>
                 <ejb-class>ru.amfitel.test.bean.FacadeBean</ejb-class>
                 <session-type>Stateless</session-type>
                 <resource-ref>
                         <res-ref-name>jdbc/testIP</res-ref-name>
                         <res-type>javax.sql.DataSource</res-type>
                         <injection-target>
                                 <injection-target-class>ru.amfitel.test.bean.FacadeBean</injection-target-class>
                                 <injection-target-name>ds</injection-target-name>
                         </injection-target>
                 </resource-ref>
          </session>
        </enterprise-beans>
</ejb-jar>

Should this work due to EJB 3.0 specs?
At this time I get a NullPointerException (ds is not initialized):
Caused by: java.lang.NullPointerException
        at ru.amfitel.test.bean.FacadeBean.testDataSource(FacadeBean.java:90)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(
EJBSecurityManager.java:1050)
        at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:165
)
        at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseConta
iner.java:2788)
        at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:387
0)
        at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInv
ocationHandler.java:190)

What is wrong?
Thank you.



> If you need to declare a resource-ref in ejb-jar.xml, then annotation in
> java code doesn't simplify anything. In that case, I would suggest you
> not use @Resource in bean class.

> To use <resource-ref> in ejb-jar.xml, it's the same as in previous
> versions of ejb. Your FacadeBean will need to lookup the declared
> resource:

> DataSource ds = (DataSource) sessionContext.lookup("jdbc/my-ds");

> <?xml version="1.0" encoding="UTF-8"?>
> <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
> <enterprise-beans>
> <session>
> <ejb-name>FacadeBean</ejb-name>
> <business-remote>com.xxx.FacadeRemote</business-remote>
> <ejb-class>com.xxx.FacadeBean</ejb-class>
> <session-type>Stateless</session-type>
> <transaction-type>Container</transaction-type>
> <resource-ref>
> <description>description</description>
> <res-ref-name>jdbc/my-ds</res-ref-name>
> <res-type>javax.sql.DataSource</res-type>
> <res-auth>Container</res-auth>
> <res-sharing-scope>Shareable</res-sharing-scope>
> </resource-ref>
> </session>
> </enterprise-beans>


> Cheng

-- 
With best wishes,
 AKostylev                          mailto:akostylev_at_ipian.kazan.ru