Author: julien(a)jboss.com
Date: 2007-03-16 08:14:24 -0400 (Fri, 16 Mar 2007)
New Revision: 6711
Modified:
trunk/jems/src/main/org/jboss/portal/jems/as/system/JBossServiceModelMBean.java
Log:
added getManagedResource which helps to retrieve the underlying pojo
Modified: trunk/jems/src/main/org/jboss/portal/jems/as/system/JBossServiceModelMBean.java
===================================================================
---
trunk/jems/src/main/org/jboss/portal/jems/as/system/JBossServiceModelMBean.java 2007-03-16
11:06:40 UTC (rev 6710)
+++
trunk/jems/src/main/org/jboss/portal/jems/as/system/JBossServiceModelMBean.java 2007-03-16
12:14:24 UTC (rev 6711)
@@ -56,72 +56,50 @@
// Attributes ----------------------------------------------------
- private static final Logger log = Logger.getLogger(JBossServiceModelMBean.class);
-
- // Constructors --------------------------------------------------
-
- private final boolean pojo;
-
- private final ServiceMBeanSupport support = new ServiceMBeanSupport()
+ static
{
- protected void createService() throws Exception
+ try
{
- execute("create");
+ serviceMixinInfo = JavaBeanModelMBeanBuilder.build(ServiceMixin.class,
Object.class);
}
- protected void startService() throws Exception
+ catch (Exception e)
{
- execute("start");
+ throw new Error(e);
}
- protected void stopService() throws Exception
- {
- execute("stop");
- }
- protected void destroyService() throws Exception
- {
- execute("destroy");
- }
- private void execute(String lifecycle) throws Exception
- {
- Method m = null;
- try
- {
- m = getResource().getClass().getMethod(lifecycle, new Class[0]);
- }
- catch (NoSuchMethodException ignore)
- {
- }
+ }
- //
- if (m != null)
- {
- try
- {
- m.invoke(getResource(), new Object[0]);
- }
- catch (IllegalAccessException e)
- {
- throw new Error(e);
- }
- catch (InvocationTargetException e)
- {
- Throwable t = e.getTargetException();
- if (t instanceof Exception)
- {
- throw (Exception)t;
- }
- else if (t instanceof Error)
- {
- throw (Error)t;
- }
- else
- {
- throw new Error(t);
- }
- }
- }
- }
- };
+ /** . */
+ private static final ModelMBeanInfo serviceMixinInfo;
+ /** . */
+ private static final Logger log = Logger.getLogger(JBossServiceModelMBean.class);
+
+ // Constructors --------------------------------------------------
+
+ /** . */
+ private final ServiceMixin serviceMixin;
+
+ /** . */
+ private final boolean createExists;
+
+ /** . */
+ private final boolean startExists;
+
+ /** . */
+ private final boolean stopExists;
+
+ /** . */
+ private final boolean destroyExists;
+
+ /** . */
+ private final boolean getStateExists;
+
+ /** . */
+ private final boolean getStateStringExists;
+
+ /** . */
+ private final boolean getManagedResourceExists;
+
public JBossServiceModelMBean(Object resource) throws MBeanException
{
this(resource, null, null);
@@ -134,96 +112,116 @@
setManagedResource(resource, "ObjectReference");
//
- pojo = !(resource instanceof ServiceMBeanSupport);
+ boolean pojo = !(resource instanceof ServiceMBeanSupport);
// Build
ModelMBeanInfo info = JavaBeanModelMBeanBuilder.build(resource.getClass(), pojo
? Object.class : ServiceMBeanSupport.class);
//
- if (pojo)
+ serviceMixin = new ServiceMixin(resource);
+
+ //
+ List mmois = Tools.toList(info.getOperations());
+ List mmais = Tools.toList(info.getAttributes());
+
+ //
+ boolean createExists = false;
+ boolean startExists = false;
+ boolean stopExists = false;
+ boolean destroyExists = false;
+ boolean getStateExists = false;
+ boolean getStateStringExists = false;
+ boolean getManagedResourceExists = false;
+
+ //
+ for (int i = 0;i < mmois.size();i++)
{
- //
- List mmois = Tools.toList(info.getOperations());
- List mmais = Tools.toList(info.getAttributes());
-
- //
- boolean createExists = false;
- boolean startExists = false;
- boolean stopExists = false;
- boolean destroyExists = false;
- boolean getStateExists = false;
- boolean getStateStringExists = false;
- for (int i = 0;i < mmois.size();i++)
+ ModelMBeanOperationInfo mmoi = (ModelMBeanOperationInfo)mmois.get(i);
+ if (mmoi.getSignature().length == 0)
{
- ModelMBeanOperationInfo mmoi = (ModelMBeanOperationInfo)mmois.get(i);
- if (mmoi.getSignature().length == 0)
+ if (mmoi.getName().equals("create"))
{
- if (mmoi.getName().equals("create"))
- {
- createExists = true;
- }
- else if (mmoi.getName().equals("start"))
- {
- startExists = true;
- }
- else if (mmoi.getName().equals("stop"))
- {
- stopExists = true;
- }
- else if (mmoi.getName().equals("destroy"))
- {
- destroyExists = true;
- }
- else if (mmoi.getName().equals("getState"))
- {
- getStateExists = true;
- }
- else if (mmoi.getName().equals("getStateString"))
- {
- getStateStringExists = true;
- }
+ createExists = true;
}
+ else if (mmoi.getName().equals("start"))
+ {
+ startExists = true;
+ }
+ else if (mmoi.getName().equals("stop"))
+ {
+ stopExists = true;
+ }
+ else if (mmoi.getName().equals("destroy"))
+ {
+ destroyExists = true;
+ }
+ else if (mmoi.getName().equals("getState"))
+ {
+ getStateExists = true;
+ }
+ else if (mmoi.getName().equals("getStateString"))
+ {
+ getStateStringExists = true;
+ }
+ else if (mmoi.getName().equals("getManagedResource"))
+ {
+ getManagedResourceExists = true;
+ }
}
+ }
- //
- if (!createExists)
- {
- mmois.add(templateInfo.getOperation("create"));
- }
- if (!startExists)
- {
- mmois.add(templateInfo.getOperation("start"));
- }
- if (!stopExists)
- {
- mmois.add(templateInfo.getOperation("stop"));
- }
- if (!destroyExists)
- {
- mmois.add(templateInfo.getOperation("destroy"));
- }
- if (!getStateExists)
- {
- mmois.add(templateInfo.getOperation("getState"));
- mmais.add(templateInfo.getAttribute("State"));
- }
- if (!getStateStringExists)
- {
- mmois.add(templateInfo.getOperation("getStateString"));
- mmais.add(templateInfo.getAttribute("StateString"));
- }
+ //
+ this.createExists = createExists;
+ this.startExists = startExists;
+ this.stopExists = stopExists;
+ this.destroyExists = destroyExists;
+ this.getStateExists = getStateExists;
+ this.getStateStringExists = getStateStringExists;
+ this.getManagedResourceExists = getManagedResourceExists;
- //
- info = new ModelMBeanInfoSupport(
- info.getClassName(),
- info.getDescription(),
- (ModelMBeanAttributeInfo[])mmais.toArray(new
ModelMBeanAttributeInfo[mmais.size()]),
- (ModelMBeanConstructorInfo[])info.getConstructors(),
- (ModelMBeanOperationInfo[])mmois.toArray(new
ModelMBeanOperationInfo[mmois.size()]),
- (ModelMBeanNotificationInfo[])info.getNotifications());
+ //
+ if (!createExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("create"));
}
+ if (!startExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("start"));
+ }
+ if (!stopExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("stop"));
+ }
+ if (!destroyExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("destroy"));
+ }
+ if (!getStateExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("getState"));
+ mmais.add(serviceMixinInfo.getAttribute("State"));
+ }
+ if (!getStateStringExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("getStateString"));
+ mmais.add(serviceMixinInfo.getAttribute("StateString"));
+ }
+ if (!getManagedResourceExists)
+ {
+ mmois.add(serviceMixinInfo.getOperation("getManagedResource"));
+ mmais.add(serviceMixinInfo.getAttribute("ManagedResource"));
+ }
//
+ info = new ModelMBeanInfoSupport(
+ info.getClassName(),
+ info.getDescription(),
+ (ModelMBeanAttributeInfo[])mmais.toArray(new
ModelMBeanAttributeInfo[mmais.size()]),
+ (ModelMBeanConstructorInfo[])info.getConstructors(),
+ (ModelMBeanOperationInfo[])mmois.toArray(new
ModelMBeanOperationInfo[mmois.size()]),
+ (ModelMBeanNotificationInfo[])info.getNotifications());
+
+ //
setModelMBeanInfo(info);
}
catch (InstanceNotFoundException e)
@@ -254,152 +252,202 @@
//
-
protected void initDispatchers()
{
super.initDispatchers();
//
- if (pojo)
+ for (Iterator i = attributeContextMap.values().iterator();i.hasNext();)
{
- //
- for (Iterator i = attributeContextMap.values().iterator();i.hasNext();)
+ InvocationContext ctx = (InvocationContext)i.next();
+ if ("State".equals(ctx.getName()) && !getStateExists)
{
- InvocationContext ctx = (InvocationContext)i.next();
- if ("State".equals(ctx.getName()))
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- return new Integer(support.getState());
- }
- });
- }
- else if ("StateString".equals(ctx.getName()))
+ return new Integer(serviceMixin.getState());
+ }
+ });
+ }
+ else if ("StateString".equals(ctx.getName()) &&
!getStateStringExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- return support.getStateString();
- }
- });
- }
+ return serviceMixin.getStateString();
+ }
+ });
}
+ else if ("ManagedResource".equals(ctx.getName()) &&
!getManagedResourceExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ return serviceMixin.getManagedResource();
+ }
+ });
+ }
+ }
- //
- for (Iterator i = operationContextMap.values().iterator();i.hasNext();)
+ //
+ for (Iterator i = operationContextMap.values().iterator();i.hasNext();)
+ {
+ InvocationContext ctx = (InvocationContext)i.next();
+ if ("create".equals(ctx.getName()) && !createExists)
{
- InvocationContext ctx = (InvocationContext)i.next();
- if ("create".equals(ctx.getName()))
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- support.create();
- return null;
- }
- });
- }
- else if ("start".equals(ctx.getName()))
+ serviceMixin.create();
+ return null;
+ }
+ });
+ }
+ else if ("start".equals(ctx.getName()) && !startExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- support.start();
- return null;
- }
- });
- }
- else if ("stop".equals(ctx.getName()))
+ serviceMixin.start();
+ return null;
+ }
+ });
+ }
+ else if ("stop".equals(ctx.getName()) && !stopExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- support.stop();
- return null;
- }
- });
- }
- else if ("destroy".equals(ctx.getName()))
+ serviceMixin.stop();
+ return null;
+ }
+ });
+ }
+ else if ("destroy".equals(ctx.getName()) && !destroyExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- support.destroy();
- return null;
- }
- });
- }
- else if ("getState".equals(ctx.getName()))
+ serviceMixin.destroy();
+ return null;
+ }
+ });
+ }
+ else if ("getState".equals(ctx.getName()) && !getStateExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- return new Integer(support.getState());
- }
- });
- }
- else if ("getStateString".equals(ctx.getName()))
+ return new Integer(serviceMixin.getState());
+ }
+ });
+ }
+ else if ("getStateString".equals(ctx.getName()) &&
!getStateExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
{
- ctx.setDispatcher(new AbstractInterceptor()
+ public Object invoke(Invocation invocation) throws Throwable
{
- public Object invoke(Invocation invocation) throws Throwable
- {
- return support.getStateString();
- }
- });
- }
+ return serviceMixin.getStateString();
+ }
+ });
}
+ else if ("getManagedResource".equals(ctx.getName()) &&
!getManagedResourceExists)
+ {
+ ctx.setDispatcher(new AbstractInterceptor()
+ {
+ public Object invoke(Invocation invocation) throws Throwable
+ {
+ return serviceMixin.getManagedResource();
+ }
+ });
+ }
}
}
- static
+ private static class ServiceMixin extends ServiceMBeanSupport
{
- try
+
+ /** . */
+ private final Object resource;
+
+ public ServiceMixin(Object resource)
{
- templateInfo = JavaBeanModelMBeanBuilder.build(Template.class, Object.class);
+ this.resource = resource;
}
- catch (Exception e)
+
+ protected void createService() throws Exception
{
- throw new Error(e);
+ execute("create");
}
- }
- /** . */
- private static final ModelMBeanInfo templateInfo;
-
- private static class Template
- {
- public int getState()
+ protected void startService() throws Exception
{
- throw new UnsupportedOperationException();
+ execute("start");
}
- public String getStateString()
+
+ protected void stopService() throws Exception
{
- throw new UnsupportedOperationException();
+ execute("stop");
}
- public void create()
+
+ protected void destroyService() throws Exception
{
- throw new UnsupportedOperationException();
+ execute("destroy");
}
- public void start()
+
+ public Object getManagedResource()
{
- throw new UnsupportedOperationException();
+ return resource;
}
- public void stop()
+
+ private void execute(String lifecycle) throws Exception
{
- throw new UnsupportedOperationException();
+ Method m = null;
+ try
+ {
+ m = resource.getClass().getMethod(lifecycle, new Class[0]);
+ }
+ catch (NoSuchMethodException ignore)
+ {
+ }
+
+ //
+ if (m != null)
+ {
+ try
+ {
+ m.invoke(resource, new Object[0]);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new Error(e);
+ }
+ catch (InvocationTargetException e)
+ {
+ Throwable t = e.getTargetException();
+ if (t instanceof Exception)
+ {
+ throw (Exception)t;
+ }
+ else if (t instanceof Error)
+ {
+ throw (Error)t;
+ }
+ else
+ {
+ throw new Error(t);
+ }
+ }
+ }
}
- public void destroy()
- {
- throw new UnsupportedOperationException();
- }
}
}
Show replies by date