[jboss-cvs] JBossAS SVN: r86353 - in trunk: profileservice/src/main/org/jboss/profileservice/management and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Mar 25 10:37:29 EDT 2009
Author: scott.stark at jboss.org
Date: 2009-03-25 10:37:29 -0400 (Wed, 25 Mar 2009)
New Revision: 86353
Modified:
trunk/component-matrix/pom.xml
trunk/profileservice/src/main/org/jboss/profileservice/management/ManagedPropertyDelegate.java
trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
trunk/server/src/etc/conf/default/bootstrap/profile.xml
trunk/system/src/main/org/jboss/system/server/profileservice/ProfileServiceBootstrap.java
trunk/testsuite/src/main/org/jboss/test/profileservice/test/ServerManagedObjectsTestCase.java
Log:
JBAS-6631, expose shutdown operation on the MCServer component
Modified: trunk/component-matrix/pom.xml
===================================================================
--- trunk/component-matrix/pom.xml 2009-03-25 14:31:10 UTC (rev 86352)
+++ trunk/component-matrix/pom.xml 2009-03-25 14:37:29 UTC (rev 86353)
@@ -72,8 +72,8 @@
<version.org.jboss.jbossxb>2.0.0.GA</version.org.jboss.jbossxb>
<version.org.jboss.jpa>1.0.0-CR1</version.org.jboss.jpa>
<version.org.jboss.logbridge>1.0.0.CR3</version.org.jboss.logbridge>
- <version.org.jboss.logmanager>1.0.0.CR2</version.org.jboss.logmanager>
- <version.org.jboss.man>2.1.0.CR3</version.org.jboss.man>
+ <version.org.jboss.logmanager>1.0.0.CR3</version.org.jboss.logmanager>
+ <version.org.jboss.man>2.1.0.CR5</version.org.jboss.man>
<version.org.jboss.mdr>2.0.1.GA</version.org.jboss.mdr>
<version.org.jboss.metadata>1.0.0.CR16</version.org.jboss.metadata>
<version.org.jboss.microcontainer>2.0.4.GA</version.org.jboss.microcontainer>
Modified: trunk/profileservice/src/main/org/jboss/profileservice/management/ManagedPropertyDelegate.java
===================================================================
--- trunk/profileservice/src/main/org/jboss/profileservice/management/ManagedPropertyDelegate.java 2009-03-25 14:31:10 UTC (rev 86352)
+++ trunk/profileservice/src/main/org/jboss/profileservice/management/ManagedPropertyDelegate.java 2009-03-25 14:37:29 UTC (rev 86353)
@@ -160,6 +160,11 @@
return delegate.isMandatory();
}
+ public boolean isReadOnly()
+ {
+ return delegate.isReadOnly();
+ }
+
public boolean isModified()
{
return delegate.isModified();
Modified: trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
===================================================================
--- trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java 2009-03-25 14:31:10 UTC (rev 86352)
+++ trunk/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java 2009-03-25 14:37:29 UTC (rev 86353)
@@ -207,7 +207,32 @@
{
try
{
+ //
+ Map<String, ManagedComponent> comps = md.getComponents();
+ if(comps != null)
+ {
+ for(ManagedComponent comp : comps.values())
+ {
+ Map<String, Annotation> annotations = comp.getAnnotations();
+ if(annotations != null)
+ {
+ ManagementObject managementObject = (ManagementObject) annotations.get(ManagementObject.class.getName());
+ if(managementObject != null && managementObject.isRuntime())
+ {
+ if(comp instanceof MutableManagedComponent)
+ {
+ Set<ManagedOperation> ops = comp.getOperations();
+ Object componentName = comp.getComponentName();
+ ops = createOperationProxies(ops, componentName);
+ MutableManagedComponent mmc = MutableManagedComponent.class.cast(comp);
+ mmc.setOperations(ops);
+ }
+ }
+ }
+ }
+ }
processManagedDeployment(md, null, 0, trace);
+ //
}
catch(Exception e)
{
@@ -1372,6 +1397,12 @@
if (dispatcher == null)
throw new IllegalArgumentException("Missing RuntimeComponentDispatcher.");
+ Object componentName = mo.getComponentName();
+ return createOperationProxies(ops, componentName);
+ }
+ protected Set<ManagedOperation> createOperationProxies(Set<ManagedOperation> ops, Object componentName)
+ throws Exception
+ {
ClassLoader loader = getClass().getClassLoader();
ArrayList<Interceptor> interceptors = new ArrayList<Interceptor>();
interceptors.add(SecurityClientInterceptor.singleton);
@@ -1385,7 +1416,7 @@
{
// This is just a unique name registered with the dispatcher and remoting layers
String dispatchName = "ProfileService.ManagedOperation@"+System.identityHashCode(op);
- Dispatcher.singleton.registerTarget(dispatchName, new ManagedOperationDelegate(op, mo));
+ Dispatcher.singleton.registerTarget(dispatchName, new ManagedOperationDelegate(op, componentName));
ManagedOperation opProxy = (ManagedOperation) Remoting.createRemoteProxy(dispatchName,
loader, ifaces, locator, interceptors, "ProfileService");
opProxies.add(opProxy);
@@ -1434,21 +1465,18 @@
{
private static final long serialVersionUID = -775240509110032859L;
private ManagedOperation delegate;
- private ManagedObject managedObject;
+ private Object componentName;
- public ManagedOperationDelegate(ManagedOperation delegate, ManagedObject managedObject)
+ public ManagedOperationDelegate(ManagedOperation delegate, Object componentName)
{
if (delegate == null)
throw new IllegalArgumentException("Null delegate.");
this.delegate = delegate;
- if (managedObject == null)
- throw new IllegalArgumentException("Null managed object.");
- this.managedObject = managedObject;
+ this.componentName = componentName;
}
public MetaValue invoke(MetaValue... metaValues)
{
- Object componentName = managedObject.getComponentName();
MetaValue result = null;
if (componentName != null)
{
Modified: trunk/server/src/etc/conf/default/bootstrap/profile.xml
===================================================================
--- trunk/server/src/etc/conf/default/bootstrap/profile.xml 2009-03-25 14:31:10 UTC (rev 86352)
+++ trunk/server/src/etc/conf/default/bootstrap/profile.xml 2009-03-25 14:37:29 UTC (rev 86353)
@@ -49,6 +49,7 @@
<property name="mof"><inject bean="ManagedObjectFactory" /></property>
<property name="mgtDeploymentCreator"><inject bean="ManagedDeploymentCreator" /></property>
<property name="bootstrapProfileFactory"><inject bean="BootstrapProfileFactory" /></property>
+ <property name="configurator"><inject bean="jboss.kernel:service=Kernel" property="configurator"/></property>
</bean>
<!-- The profile factory -->
Modified: trunk/system/src/main/org/jboss/system/server/profileservice/ProfileServiceBootstrap.java
===================================================================
--- trunk/system/src/main/org/jboss/system/server/profileservice/ProfileServiceBootstrap.java 2009-03-25 14:31:10 UTC (rev 86352)
+++ trunk/system/src/main/org/jboss/system/server/profileservice/ProfileServiceBootstrap.java 2009-03-25 14:37:29 UTC (rev 86353)
@@ -26,17 +26,20 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.bootstrap.spi.Bootstrap;
import org.jboss.bootstrap.spi.Server;
import org.jboss.bootstrap.spi.ServerConfig;
import org.jboss.bootstrap.spi.microcontainer.MCServer;
+import org.jboss.config.spi.Configuration;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.deployers.client.spi.IncompleteDeploymentException;
@@ -48,12 +51,17 @@
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer.KernelDeploymentVisitor;
import org.jboss.kernel.Kernel;
+import org.jboss.kernel.plugins.registry.BeanKernelRegistryEntry;
+import org.jboss.kernel.spi.config.KernelConfigurator;
import org.jboss.kernel.spi.dependency.KernelController;
import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.kernel.spi.registry.KernelRegistryEntry;
+import org.jboss.kernel.spi.registry.KernelRegistryPlugin;
import org.jboss.logging.Logger;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedDeployment;
import org.jboss.managed.api.ManagedObject;
+import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.api.MutableManagedObject;
import org.jboss.managed.api.annotation.ManagementComponent;
@@ -62,6 +70,7 @@
import org.jboss.managed.api.factory.ManagedObjectFactory;
import org.jboss.managed.plugins.DefaultFieldsImpl;
import org.jboss.managed.plugins.ManagedComponentImpl;
+import org.jboss.managed.plugins.ManagedOperationImpl;
import org.jboss.managed.plugins.ManagedPropertyImpl;
import org.jboss.metatype.api.types.ArrayMetaType;
import org.jboss.metatype.api.types.MetaType;
@@ -86,7 +95,7 @@
* @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
* @version $Revision$
*/
-public class ProfileServiceBootstrap implements Bootstrap
+public class ProfileServiceBootstrap implements Bootstrap, KernelRegistryPlugin
{
/** The log */
private static final Logger log = Logger.getLogger(ProfileServiceBootstrap.class);
@@ -115,7 +124,11 @@
/** Whether we are shutdown */
private AtomicBoolean shutdown = new AtomicBoolean(false);
-
+ /** */
+ private Map<Object, KernelRegistryEntry> bootstrapEntries = new HashMap<Object, KernelRegistryEntry>();
+ /** */
+ private KernelConfigurator configurator;
+
/**
* Create a new ProfileServiceBootstrap.
*/
@@ -137,6 +150,15 @@
this.mainDeployer = mainDeployer;
}
+ public KernelConfigurator getConfigurator()
+ {
+ return configurator;
+ }
+ public void setConfigurator(KernelConfigurator configurator)
+ {
+ this.configurator = configurator;
+ }
+
/**
* Return the ProfileService bean.
*
@@ -340,6 +362,12 @@
}
}
+ public KernelRegistryEntry getEntry(Object name)
+ {
+ KernelRegistryEntry entry = bootstrapEntries.get(name);
+ return entry;
+ }
+
protected void deactivateProfiles(Collection<ProfileKey> profiles)
{
if(profiles != null && profiles.isEmpty() == false)
@@ -475,8 +503,29 @@
ComponentType type = KnownComponentTypes.MCBean.Any.getType();
// MCServer
ManagedObject serverMO = mof.initManagedObject(mcserver, null);
+ if (serverMO.getOperations() != null && serverMO.getOperations().size() == 0)
+ {
+ ManagedOperationImpl shutdown = new ManagedOperationImpl("Shutdown the server", "shutdown");
+ if(serverMO instanceof MutableManagedObject)
+ {
+ HashSet<ManagedOperation> ops = new HashSet<ManagedOperation>();
+ ops.add(shutdown);
+ MutableManagedObject mmo = MutableManagedObject.class.cast(serverMO);
+ mmo.setOperations(ops);
+ }
+ }
ManagedComponentImpl serverComp = new ManagedComponentImpl(type, firstDeployment, serverMO);
firstDeployment.addComponent("MCServer", serverComp);
+ try
+ {
+ BeanInfo mcserverInfo = configurator.getBeanInfo(mcserver.getClass());
+ BeanKernelRegistryEntry entry = new BeanKernelRegistryEntry(mcserver, mcserverInfo);
+ bootstrapEntries.put(serverComp.getComponentName(), entry);
+ }
+ catch(Throwable t)
+ {
+ log.error("Failed to create BeanInfo for: "+serverComp, t);
+ }
// ServerConfig
ServerConfig config = mcserver.getConfig();
ManagedObject mo = mof.initManagedObject(config, null);
Modified: trunk/testsuite/src/main/org/jboss/test/profileservice/test/ServerManagedObjectsTestCase.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/profileservice/test/ServerManagedObjectsTestCase.java 2009-03-25 14:31:10 UTC (rev 86352)
+++ trunk/testsuite/src/main/org/jboss/test/profileservice/test/ServerManagedObjectsTestCase.java 2009-03-25 14:37:29 UTC (rev 86353)
@@ -33,9 +33,12 @@
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedDeployment;
+import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.RunState;
import org.jboss.managed.api.ManagedProperty;
+import org.jboss.managed.plugins.ManagedOperationMatcher;
import org.jboss.metatype.api.types.EnumMetaType;
+import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.values.EnumValue;
import org.jboss.metatype.api.values.EnumValueSupport;
import org.jboss.metatype.api.values.MetaValue;
@@ -125,6 +128,7 @@
throws Exception
{
ManagementView mgtView = getManagementView();
+ mgtView.reload();
ComponentType type = KnownComponentTypes.MCBean.Any.getType();
ManagedComponent mc = mgtView.getComponent("jboss.system:type=MCServer", type);
assertNotNull(mc);
@@ -161,6 +165,16 @@
// The config should be the ServerConfig ManagedObject
ManagedProperty config = mc.getProperty("config");
assertNotNull(config);
+
+ // This should have a shutdown operation
+ Set<ManagedOperation> ops = mc.getOperations();
+ MetaType[] signature = {};
+ ManagedOperation shutdown = ManagedOperationMatcher.findOperation(ops, "shutdown", signature);
+ assertNotNull(shutdown);
+ /* Invoke it
+ MetaValue[] args = {};
+ shutdown.invoke(args);
+ */
}
/**
More information about the jboss-cvs-commits
mailing list