dev@jsr311.java.net

Re: JSR311: JAX-RS and EJB

From: Marc Hadley <Marc.Hadley_at_Sun.COM>
Date: Mon, 08 Dec 2008 16:01:07 -0500

On Dec 8, 2008, at 3:35 PM, Joel Smith wrote:

>
> Why is metadata being defined to provide for a JNDI name which will
> be used to bind the JAX-RS/EJB instance?
>
To solve problem (i) described below. Basically a JAX-RS runtime needs
a portable way to get an instance to dispatch requests to.

Marc.

>
> Marc Hadley <Marc.Hadley_at_Sun.COM>
> Sent by: Marc.Hadley_at_Sun.COM
> 12/08/2008 09:51 AM
> Please respond to
> dev_at_jsr311.dev.java.net
>
> To
> dev_at_jsr311.dev.java.net
> cc
> Subject
> Re: JSR311: JAX-RS and EJB
>
>
>
>
>
> Last call for comments and preferences.
>
> A slight tweak for #2 and #3 is that we'll need a way to specify an
> interface name if a bean implements more than one but that should be
> straightforward.
>
> I'm leaning towards #3 since it is minimally invasive for application
> code.
>
> Marc.
>
> On Nov 24, 2008, at 11:36 AM, Marc Hadley wrote:
>
> > Experts,
> >
> > Its time to start discussing the work we want to do for the first
> > maintenance release of JAX-RS. For 1.1 we'll be concentrating on
> > alignment with EE 6 and fixing any bugs that may have come to light
> > since 1.0 was finalized.
> >
> > One significant issue that we've only briefly touched on before is
> > how to combine JAX-RS and EJB in a portable way to expose an EJB
> > directly as a JAX-RS resource. There are a couple of technical
> > issues that prevent that today:
> >
> > (i) Given an EJB class name there's no portable way to work out the
> > JNDI name to use to obtain an instance.
> > (ii) Given a JNDI name one can lookup an instance but, at least for
> > the no-interface variant, the JAX-RS annotations will not be present
> > on the returned proxy.
> >
> > We discussed this with the EJB and EE spec leads and came up with
> > the following three potential solutions:
> >
> > (1) Declare a dependency on a resource EJB somewhere. E.g.:
> >
> > @EJB(name="OrdersResourceRef",
> > beanInterface=com.acme.OrdersResource.class)
> >
> > is placed on the Application class. The JAX-RS runtime will use the
> > following lookup to obtain an instance:
> >
> > OrdersResource o = (OrdersResource)
> > new InitialContext().lookup("java:comp/env/OrdersResourceRef");
> >
> > and will reflect on the com.acme.OrdersResource.class to determine
> > the JAX-RS annotations.
> >
> > (2) Declare the JNDI name on the resource class. E.g.:
> >
> > @Stateless
> > @Path("somepath")
> > @JNDIName("OrdersResourceRef")
> > public class OrdersResource { ... }
> >
> > Assuming the name is added to the global namespace, the lookup to
> > obtain an instance is:
> >
> > OrdersResource o = (OrdersResource)
> > new InitialContext().lookup("java:global/OrdersResourceRef");
> >
> > The JAX-RS runtime will reflect on the resource class as normal.
> >
> > (3) Introduce a new java:module/... context that contains all
> > components in the current module. Given:
> >
> > @Stateless
> > @Path("somepath")
> > public class OrdersResource { ... }
> >
> > The JAX-RS runtime would use the following lookup to obtain an
> > instance:
> >
> > OrdersResource o = (OrdersResource)
> > new InitialContext().lookup("java:module/OrdersResource");
> >
> > and will reflect on the resource class as normal.
> >
> > Thoughts, comments, preferences ?
> >
> > Thanks,
> > Marc.
> >
> > ---
> > Marc Hadley <marc.hadley at sun.com>
> > CTO Office, Sun Microsystems.
> >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe_at_jsr311.dev.java.net
> > For additional commands, e-mail: dev-help_at_jsr311.dev.java.net
> >
>
> ---
> Marc Hadley <marc.hadley at sun.com>
> CTO Office, Sun Microsystems.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_jsr311.dev.java.net
> For additional commands, e-mail: dev-help_at_jsr311.dev.java.net
>
>

---
Marc Hadley <marc.hadley at sun.com>
CTO Office, Sun Microsystems.