package org.jboss.jms.asf;
import javax.management.ObjectName;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.jboss.naming.NonSerializableFactory;
import org.jboss.system.ServiceMBeanSupport;
import org.jboss.tm.XidFactoryMBean;
public class ServerSessionPoolLoader
extends ServiceMBeanSupport
implements ServerSessionPoolLoaderMBean
{
private ServerSessionPoolFactory poolFactory;
private String name;
private String poolFactoryClass;
private ObjectName xidFactory;
public void setPoolName(final String name)
{
this.name = name;
}
public String getPoolName()
{
return name;
}
public void setPoolFactoryClass(final String classname)
{
this.poolFactoryClass = classname;
}
public String getPoolFactoryClass()
{
return poolFactoryClass;
}
public ObjectName getXidFactory()
{
return xidFactory;
}
public void setXidFactory(final ObjectName xidFactory)
{
this.xidFactory = xidFactory;
}
protected void startService() throws Exception
{
XidFactoryMBean xidFactoryObj = (XidFactoryMBean)getServer().getAttribute(xidFactory, "Instance");
Class cls = Class.forName(poolFactoryClass);
poolFactory = (ServerSessionPoolFactory)cls.newInstance();
poolFactory.setName(name);
poolFactory.setXidFactory(xidFactoryObj);
if (log.isDebugEnabled())
log.debug("initialized with pool factory: " + poolFactory);
InitialContext ctx = new InitialContext();
String name = poolFactory.getName();
String jndiname = "java:/" + name;
try {
NonSerializableFactory.rebind(ctx, jndiname, poolFactory);
log.debug("pool factory " + name + " bound to " + jndiname);
}
finally {
ctx.close();
}
}
protected void stopService()
{
InitialContext ctx = null;
try {
ctx = new InitialContext();
String name = poolFactory.getName();
String jndiname = "java:/" + name;
ctx.unbind(jndiname);
NonSerializableFactory.unbind(jndiname);
log.debug("pool factory " + name + " unbound from " + jndiname);
}
catch (NamingException ignore) {}
finally {
if (ctx != null) {
try {
ctx.close();
}
catch (NamingException ignore) {}
}
}
}
}