package org.jboss.jms.server.container;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;
import org.jboss.jms.message.JBossMessage;
import org.jboss.jms.server.DeliveryEndpoint;
import org.jboss.jms.server.DeliveryEndpointFactory;
import org.jboss.jms.server.MessageReference;
public class ServerProducerInterceptor
implements Interceptor
{
public static ServerProducerInterceptor singleton = new ServerProducerInterceptor();
public String getName()
{
return "ServerProducerInterceptor";
}
public Object invoke(Invocation invocation) throws Throwable
{
MethodInvocation mi = (MethodInvocation) invocation;
String methodName = mi.getMethod().getName();
if (methodName.equals("send"))
{
JBossMessage message = (JBossMessage) mi.getArguments()[0];
JBossMessage clone = (JBossMessage) message.clone();
DeliveryEndpointFactory factory = (DeliveryEndpointFactory) mi.getMetaData("JMS", "DeliveryEndpointFactory");
MessageReference reference = factory.getMessageReference(clone);
DeliveryEndpoint endpoint = factory.getDeliveryEndpoint(reference);
endpoint.deliver(reference);
return null;
}
else if (methodName.equals("closing") || methodName.equals("close"))
return null;
throw new UnsupportedOperationException(mi.getMethod().toString());
}
}