Skip to content

Commit

Permalink
Add bean management functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
Jesper Pedersen committed Apr 22, 2012
1 parent b133214 commit 03db6cc
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public class KernelConfiguration
/** Deployment order */
private DeploymentOrder deploymentOrder;

/**Enable management */
/** Enable management */
private boolean management;

/** Use platform MBeanServer */
Expand All @@ -101,6 +101,9 @@ public class KernelConfiguration
/** Remote JMX access */
private boolean remoteJmxAccess;

/** Bean management */
private boolean beanManagement;

/** RMI registry port */
private int rmiRegistryPort;

Expand Down Expand Up @@ -132,6 +135,7 @@ public KernelConfiguration()
deploymentOrder = null;
management = true;
usePlatformMBeanServer = false;
beanManagement = false;
remoteJmxAccess = false;
rmiRegistryPort = 1203;
rmiServerPort = 1204;
Expand Down Expand Up @@ -595,6 +599,27 @@ public boolean isRemoteJmxAccess()
return remoteJmxAccess;
}

/**
* Enable management of deployed beans; default <code>false</code>
* @param v The value
* @return The configuration
*/
public KernelConfiguration beanManagement(boolean v)
{
this.beanManagement = v;

return this;
}

/**
* Is bean management enabled ?
* @return The value
*/
public boolean isBeanManagement()
{
return beanManagement;
}

/**
* Set the RMI registry port; default <code>1203</code>
* @param port The port
Expand Down
53 changes: 51 additions & 2 deletions core/src/main/java/com/github/fungal/impl/KernelImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.github.fungal.api.events.Event;
import com.github.fungal.api.events.EventListener;
import com.github.fungal.api.remote.Command;
import com.github.fungal.api.util.JMX;
import com.github.fungal.bootstrap.Bootstrap;
import com.github.fungal.impl.netboot.Netboot;
import com.github.fungal.impl.remote.CommunicationServer;
Expand Down Expand Up @@ -443,7 +444,7 @@ public void startup() throws Throwable
mainDeployer.addDeployer(new DeploymentDeployer(this));

// Add the kernel bean reference
addBean("Kernel", this);
addBean("Kernel", this, false);
setBeanStatus("Kernel", ServiceLifecycle.STARTED);

if (kernelConfiguration.isManagement())
Expand Down Expand Up @@ -824,7 +825,7 @@ public void shutdown() throws Throwable
// We are removing all deployments including all DeployerPhases beans => no postUndeploy call

// Remove kernel bean
removeBean("Kernel");
removeBean("Kernel", false);

// Check for additional beans
if (beans.size() > 0)
Expand Down Expand Up @@ -1059,10 +1060,34 @@ else if (status == ServiceLifecycle.STARTED || status == ServiceLifecycle.ERROR)
* @param bean The bean
*/
void addBean(String name, Object bean)
{
addBean(name, bean, true);
}

/**
* Add a bean
* @param name The name of the bean
* @param bean The bean
* @param mgt Add management
*/
private void addBean(String name, Object bean, boolean mgt)
{
if (!beans.containsKey(name))
{
beans.put(name, bean);

if (mgt && kernelConfiguration.isManagement() && kernelConfiguration.isBeanManagement())
{
try
{
ObjectName on = new ObjectName(kernelConfiguration.getName() + ":name=" + name + ",type=Bean");
mbeanServer.registerMBean(JMX.createMBean(bean), on);
}
catch (Throwable t)
{
log.log(Level.WARNING, "Error during management registering of bean [" + name + "]", t);
}
}
}
else
{
Expand All @@ -1076,6 +1101,16 @@ void addBean(String name, Object bean)
* @param name The name of the bean
*/
void removeBean(String name)
{
removeBean(name, true);
}

/**
* Remove a bean
* @param name The name of the bean
* @param mgt Remove management
*/
void removeBean(String name, boolean mgt)
{
if (trace)
log.log(Level.FINER, "Removing bean: " + name);
Expand Down Expand Up @@ -1126,6 +1161,20 @@ void removeBean(String name)
beans.remove(name);
beanStatus.remove(name);
beanLatches.remove(name);

if (mgt && kernelConfiguration.isManagement() && kernelConfiguration.isBeanManagement())
{
try
{
ObjectName on = new ObjectName(kernelConfiguration.getName() + ":name=" + name + ",type=Bean");
if (mbeanServer.isRegistered(on))
mbeanServer.unregisterMBean(on);
}
catch (Throwable t)
{
log.log(Level.FINER, "Error during management unregistering of bean [" + name + "]", t);
}
}
}

/**
Expand Down

0 comments on commit 03db6cc

Please sign in to comment.