Adding Web Beans JSR 299 to Jersey for REST
While playing with Web Beans I thought it would be nice to add Web Beans support to Jersey. Jersey is a JSR 311 implementation for RESTful web services in Java. Though it has taken some flak, I – and others – think it’s easy to use. Because it’s easy in Jersey to control the creation of objects by writing your own servlet with a Jersey ComponentProvider, I finished a quick hack in no time. Some help was the integration examples for Spring.
public class WebbeansJerseyServlet extends ServletContainer {
private static class WebbeansComponentProvider
implements ComponentProvider {
private WebBeansContainer webBeans = WebBeansContainer.create();
public Object getInstance(ComponentProvider.Scope scope, Class c)
throws InstantiationException, IllegalAccessException {
return webBeans.getObject(c);
}
public Object getInstance(Scope scope, Constructor contructor,
Object[] parameters)
throws InstantiationException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
return null;
}
public void inject(Object instance) { }
}
protected void initiate(ResourceConfig rc, WebApplication wa) {
wa.initiate(rc, new WebbeansComponentProvider());
}
}
Having defined this servlet, a REST resource example for the UuidService from my last post about Web Beans, looks like this
@Path("/uuid")
public class UuidResource {
@Named("uuid")
UUIDService service;
public UuidResource() {
}
@GET
@ProduceMime("text/plain")
public String getUuuid() {
return service.getValue();
}
}
Works like a charm. The UUIDService is injected through Web Beans and the scopes from Web Beans, @RequestScope and @SessionScope seem to work. This takes a big burden from the developer.
I hope to implement a SOFEA web application with Javascript parts which communicate with the backend via REST. For performance reasons it would be nice to populate and render the Javascript on the server. Therefore I would wish I could resolve REST calls to Jersey internally like
jersey.get("/helloworld/3");
to pre-populate pages with REST calls in them.
Thanks for listening.
Update:The Jersey lead wrote about a Jersey client API which perhaps does what I want. Splendid.
You can leave a Reply here. Of course, you should follow me on twitter here.

Nice post.
But the link to client api is broken.