package org.jboss.resteasy.plugins.server.resourcefactory;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.HttpResponse;
import org.jboss.resteasy.spi.ResourceFactory;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import javax.naming.InitialContext;
import javax.naming.NamingException;
Used for component jndi-based resources like EJBs.
Author: Bill Burke Version: $Revision: 1 $
/**
* Used for component jndi-based resources like EJBs.
*
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class JndiComponentResourceFactory implements ResourceFactory
{
private String jndiName;
private InitialContext ctx;
private volatile Object reference;
private Class scannable;
private boolean cache;
public JndiComponentResourceFactory(String jndiName, Class scannable, boolean cacheReference)
{
this.jndiName = jndiName;
this.scannable = scannable;
this.cache = cacheReference;
try
{
ctx = new InitialContext();
}
catch (NamingException e)
{
throw new RuntimeException(e);
}
}
public void registered(ResteasyProviderFactory factory)
{
}
public Object createResource(HttpRequest request, HttpResponse response, ResteasyProviderFactory factory)
{
if (reference != null) return reference;
Object ref = reference;
if (ref == null)
{
try
{
ref = ctx.lookup(jndiName);
}
catch (NamingException e)
{
throw new RuntimeException(e);
}
if (cache)
{
synchronized (this)
{
reference = ref;
}
}
}
return ref;
}
public void unregistered()
{
}
public Class<?> getScannableClass()
{
return scannable;
}
public void requestFinished(HttpRequest request, HttpResponse response, Object resource)
{
}
}