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.