users@jersey.java.net

Re: [Jersey] JBoss 5.1.0 GA + EJB 3.0: RESTful Web Services with Jersey

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Fri, 11 Dec 2009 12:01:45 +0100

Hi Celinio,

It is easier to discuss in email than in blog comments :-)

The EJB 3.0 support by annotating interfaces is not portable across
app servers. When Jersey finds an interface it will attempt to look up
a reference to that interface using JNDI, and that lookup is specific
to GlassFish.

If you annotate the EJB implementation they Jersey will instantiate an
instance of the Java class and that instance will not be managed by
the EJB container.

Perhaps one way you can get this to work is to create your own
implementation of Application:

   public class MyApplication extends javax.ws.rs.core.Application {
     private Set<Object> singletons = new HashSet<Object>();

     public MyApplication() {
       // Look up the EJBs references using JNDI using App server
specific naming
       // add those EJBs to the singleton set
     }

     public Set<Object> getSingletons() {
       return singletons;
     }
   }

and register MyApplication in the web.xml.

Paul.


On Dec 10, 2009, at 9:00 PM, Celinio Fernandes wrote:

> Hi,
> I am using the Jersey implementation of the RESTful API (JSR -311)
> in an Enterprise application using JBoss as a server.
>
> I am using EJB 3.0 of course. Not EJB 3.1, which is still not
> available with JBoss.
>
> I'd like to expose a stateless session bean as a restful web
> service . Here is the code of its interface :
> import javax.ejb.Remote;
> import javax.ws.rs.GET;
> import javax.ws.rs.Path;
>
> @Path("/something")
> @Remote
> public interface blablaRemote {
>
> @GET
> String get();
>
> //public boolean doSomething(String one);
>
> }
>
> And the code of the bean :
> import javax.ejb.Stateless;
>
> @Stateless
> public class blablaBean implements blablaRemote {
>
> public String get() {
>
> return "HELLO FROM SESSION BEAN";
> }
>
> }
> My EJBs are located in an EJB project which is inside an Enterprise
> application (EAR file).
> How do you call that exposed resftul web service ? I do have a Web
> project in that Enterprise application.
> If using an URL, for a GET resource, what would it be like ?
> http://localhost/EARname/something ?
> http://localhost/EARname/EJBProjectName/something ?
> ...
>
> Thanks for helping.