package org.jboss.mq.il;
import java.util.Properties;
import javax.jms.IllegalStateException;
import javax.management.ObjectName;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.jboss.mq.GenericConnectionFactory;
import org.jboss.mq.SpyConnectionFactory;
import org.jboss.mq.SpyXAConnectionFactory;
import org.jboss.system.ServiceMBeanSupport;
public abstract class ServerILJMXService extends ServiceMBeanSupport implements ServerILJMXServiceMBean
{
private ObjectName jbossMQService;
private Invoker jmsServer;
protected String connectionFactoryJNDIRef;
protected String xaConnectionFactoryJNDIRef;
protected long pingPeriod = 60000L;
protected String clientID;
public ObjectName getJBossMQService()
{
return jbossMQService;
}
public void setInvoker(ObjectName jbossMQService)
{
this.jbossMQService = jbossMQService;
}
public void startService() throws Exception
{
jmsServer = (Invoker) getServer().getAttribute(jbossMQService, "Invoker");
if (jmsServer == null)
{
throw new IllegalStateException("Cannot find JBossMQService!");
} }
public void stopService() throws Exception
{
jmsServer = null;
}
public void setConnectionFactoryJNDIRef(java.lang.String newConnectionFactoryJNDIRef)
{
connectionFactoryJNDIRef = newConnectionFactoryJNDIRef;
}
public void setXAConnectionFactoryJNDIRef(java.lang.String newXaConnectionFactoryJNDIRef)
{
xaConnectionFactoryJNDIRef = newXaConnectionFactoryJNDIRef;
}
public java.util.Properties getClientConnectionProperties()
{
Properties rc = new Properties();
rc.setProperty(ServerILFactory.PING_PERIOD_KEY, "" + pingPeriod);
if (clientID != null)
rc.setProperty(ServerILFactory.CLIENTID, clientID);
return rc;
}
public abstract ServerIL getServerIL();
public java.lang.String getConnectionFactoryJNDIRef()
{
return connectionFactoryJNDIRef;
}
public java.lang.String getXAConnectionFactoryJNDIRef()
{
return xaConnectionFactoryJNDIRef;
}
public void bindJNDIReferences() throws javax.naming.NamingException
{
GenericConnectionFactory gcf = new GenericConnectionFactory(getServerIL(), getClientConnectionProperties());
SpyConnectionFactory scf = new SpyConnectionFactory(gcf);
SpyXAConnectionFactory sxacf = new SpyXAConnectionFactory(gcf);
InitialContext ctx = new InitialContext();
rebind(ctx, connectionFactoryJNDIRef, scf);
rebind(ctx, xaConnectionFactoryJNDIRef, sxacf);
}
protected void rebind(Context ctx, String name, Object val) throws NamingException
{
javax.naming.Name n = ctx.getNameParser("").parse(name);
while (n.size() > 1)
{
String ctxName = n.get(0);
try
{
ctx = (Context) ctx.lookup(ctxName);
}
catch (javax.naming.NameNotFoundException e)
{
ctx = ctx.createSubcontext(ctxName);
}
n = n.getSuffix(1);
}
ctx.rebind(n.get(0), val);
}
public void unbindJNDIReferences() throws javax.naming.NamingException
{
InitialContext ctx = new InitialContext();
ctx.unbind(connectionFactoryJNDIRef);
ctx.unbind(xaConnectionFactoryJNDIRef);
}
public Invoker lookupJMSServer()
{
return jmsServer;
}
public long getPingPeriod()
{
return pingPeriod;
}
public void setPingPeriod(long period)
{
pingPeriod = period;
}
public String getClientID()
{
return clientID;
}
public void setClientID(String clientID)
{
this.clientID = clientID;
}
}