package org.jboss.resteasy.plugins.server.netty.cdi;
import io.netty.channel.ChannelHandlerContext;
import org.jboss.resteasy.core.SynchronousDispatcher;
import org.jboss.resteasy.plugins.server.embedded.SecurityDomain;
import org.jboss.resteasy.plugins.server.netty.RequestDispatcher;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.HttpResponse;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.jboss.weld.context.bound.BoundRequestContext;
import javax.enterprise.inject.Vetoed;
import javax.enterprise.inject.spi.CDI;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* A request dispatcher that starts a RequestContext during invocation.
*/
@Vetoed
public class CdiRequestDispatcher extends RequestDispatcher {
public CdiRequestDispatcher(SynchronousDispatcher dispatcher, ResteasyProviderFactory providerFactory, SecurityDomain domain) {
super(dispatcher, providerFactory, domain);
}
@Override
public void service(ChannelHandlerContext ctx, HttpRequest request, HttpResponse response, boolean handleNotFound) throws IOException {
BoundRequestContext context = CDI.current().select(BoundRequestContext.class).get();
Map<String,Object> contextMap = new HashMap<String,Object>();
context.associate(contextMap);
context.activate();
try
{
super.service(ctx, request,response,handleNotFound);
}
finally
{
context.invalidate();
context.deactivate();
context.dissociate(contextMap);
}
}
}