package org.jboss.services.binding;
import java.net.URL;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.jboss.logging.Logger;
import org.jboss.system.server.ServerConfigLocator;
public class ServiceBindingManager
implements MBeanRegistration, ServiceBindingManagerMBean
{
private static Logger log = Logger.getLogger(ServiceBindingManager.class);
private MBeanServer server;
private String serverName;
private String storeFactoryClassName = "org.jboss.services.binding.XMLServicesStoreFactory";
private ServicesStore store;
private URL storeURL;
public String getServerName()
{
return this.serverName;
}
public void setServerName(String serverName)
{
this.serverName = serverName;
}
public String getStoreFactoryClassName()
{
return this.storeFactoryClassName;
}
public void setStoreFactoryClassName(String storeFactoryClassName)
{
this.storeFactoryClassName = storeFactoryClassName;
}
public URL getStoreURL()
{
return storeURL;
}
public void setStoreURL(URL storeURL)
{
this.storeURL = storeURL;
}
public ObjectName preRegister(MBeanServer server, ObjectName name)
throws Exception
{
this.server = server;
return name;
}
public void postRegister(Boolean registrationDone)
{
}
public void preDeregister()
throws Exception
{
if( store != null )
store.store(storeURL);
}
public void postDeregister()
{
}
public ServiceConfig getServiceConfig(ObjectName serviceName)
throws Exception
{
if( store == null )
initStore();
log.debug("getServiceConfig, server:"+serverName+";serviceName:" + serviceName);
ServiceConfig svcConfig = store.getService(serverName, serviceName);
ServiceConfig configCopy = null;
if( svcConfig != null )
configCopy = (ServiceConfig) svcConfig.clone();
return configCopy;
}
public void applyServiceConfig(ObjectName serviceName)
throws Exception
{
if( store == null )
initStore();
ServiceConfig svcConfig = store.getService(serverName, serviceName);
if( svcConfig != null )
{
log.debug("applyServiceConfig, server:"+serverName+";serviceName:" + serviceName+",config="+svcConfig);
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String delegateName = svcConfig.getServiceConfigDelegateClassName();
if( delegateName != null )
{
Class delegateClass = loader.loadClass(delegateName);
ServicesConfigDelegate delegate = (ServicesConfigDelegate) delegateClass.newInstance();
delegate.applyConfig(svcConfig, server);
}
}
}
private void initStore() throws Exception
{
log.info("Initializing store");
if( this.storeURL == null )
{
this.storeURL = ServerConfigLocator.locate().getServerConfigURL();
}
log.info("Using StoreURL: "+storeURL);
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class factoryClass = loader.loadClass(storeFactoryClassName);
ServicesStoreFactory storeFactory = (ServicesStoreFactory) factoryClass.newInstance();
store = storeFactory.newInstance();
store.load(storeURL);
}
}