GeeCON Prague 2014*
The moose likes EJB Certification (SCBCD/OCPJBCD) and the fly likes @Resource For A Non-EJB Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Certification » EJB Certification (SCBCD/OCPJBCD)
Bookmark "@Resource For A Non-EJB" Watch "@Resource For A Non-EJB" New topic
Author

@Resource For A Non-EJB

Mark Garland
Ranch Hand

Joined: Nov 11, 2006
Posts: 226
Hi all,

I have written a standard Java class (not an EJB) which I have packaged as a JAR within an EAR. This Java Class will put things on a queue when requested.

Rather than perform a manual JNDI lookup for the Queue and Connection Factory, I used the @Resource annotation, and assumed that because it was within a Container (GlassFish) that this would work.
I am pretty confident that the annotation/queue/connectionfactory is set up correctly because the deployment through NetBeans fails otherwise.
However, I keep getting a NullPointerException when the code is executed, so the @Resource annotation isn't working.

Does the @Resource annotation only work in EJBs? Or is this a GlassFish quirk?

Thanks,

MG


28/06/06 - SCJP - 69%, 05/06/07 - SCWCD - 92%, 28/02/08 - IBM DB2 v9 Fundamentals (Exam 730) - 87%, 18/11/08 - IBM DB2 v9 DBA (Exam 731) - 89%, 26/02/11 - SCBCD - 88%
Jaikiran Pai
Marshal

Joined: Jul 20, 2005
Posts: 10146
    
165

Mark Garland wrote:
Does the @Resource annotation only work in EJBs? Or is this a GlassFish quirk?



@Resource and other similar EE injection constructs work only with managed classes like servlets, EJBs, managed beans etc. They won't work with plain Java classes.


[My Blog] [JavaRanch Journal]
Mark Garland
Ranch Hand

Joined: Nov 11, 2006
Posts: 226
Hi Jaikiran,

Thanks for your quick and accurate reply.

I've removed the @Resource annotations and put in a manual JNDI lookup, and all is working great - thanks!

The @Resource annotation not working in a POJO which is sat in a container feels a bit of a shame if honest. A lot of the annotations are great for reducing repeating boilerplate code, yet I'd be forced to convert my POJOs to EJBs if I wanted to use them even though the container is capable. Just feels like a missed opportunity to me.

Thanks once again for your help - much appreciated.

MG
Jaikiran Pai
Marshal

Joined: Jul 20, 2005
Posts: 10146
    
165

Mark Garland wrote: A lot of the annotations are great for reducing repeating boilerplate code, yet I'd be forced to convert my POJOs to EJBs if I wanted to use them even though the container is capable. Just feels like a missed opportunity to me.



Java EE6 introduces Managed Beans which plugs this gap. A Managed Bean is a POJO which can have injection, lifecycle callbacks and interceptors. It however doesn't have any transactional, security related semantics unlike EJBs - which is understandable.
Jayavardhan geepi
Ranch Hand

Joined: Jul 21, 2010
Posts: 66
Hi,

I tried to use resource injection in a servlet with name parameter set to jndi name (which works in manual look up) in JBoss 4.2.x.x.

It is not working. Properties are null at run time.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: @Resource For A Non-EJB