User: patriot1burke
Date: 02/01/30 16:04:23
Modified: src/main/org/jboss/ejb EntityContainer.java EntityCache.java
InstanceCache.java
Log:
added getCacheSize and flushCache to MBean interface for EntityContainer
Revision Changes Path
1.63 +237 -1 jboss/src/main/org/jboss/ejb/EntityContainer.java
Index: EntityContainer.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/EntityContainer.java,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- EntityContainer.java 2002/01/30 22:55:17 1.62
+++ EntityContainer.java 2002/01/31 00:04:23 1.63
@@ -9,10 +9,25 @@
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
+import java.rmi.MarshalledObject; // tmp
import java.util.Map;
import java.util.HashMap;
import java.util.Collection;
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.AttributeNotFoundException;
+import javax.management.DynamicMBean;
+import javax.management.InvalidAttributeValueException;
+import javax.management.MBeanConstructorInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanNotificationInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanParameterInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
import javax.ejb.Handle;
import javax.ejb.HomeHandle;
import javax.ejb.EJBObject;
@@ -45,7 +60,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel OConnor</a>
* @author <a href="[EMAIL PROTECTED]">Bill Burke</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Andreas Schaefer</a>
-* @version $Revision: 1.62 $
+* @version $Revision: 1.63 $
*
* <p><b>Revisions:</b>
*
@@ -897,6 +912,227 @@
}
}
+ /**
+ * Build the container MBean information on attributes, contstructors,
+ * operations, and notifications. Currently there are no attributes, no
+ * constructors, no notifications, and the following ops:
+ * <ul>
+ * <li>'home' -> invokeHome(Invocation);</li>
+ * <li>'remote' -> invoke(Invocation);</li>
+ * <li>'localHome' -> not implemented;</li>
+ * <li>'local' -> not implemented;</li>
+ * <li>'getHome' -> return EBJHome interface;</li>
+ * <li>'getRemote' -> return EJBObject interface</li>
+ * <li>'getCacheSize' -> return the entity's cache size</li>
+ * <li>'flushCache' -> flush the entity's cache</li>
+ * </ul>
+ */
+ public MBeanInfo getMBeanInfo()
+ {
+ MBeanParameterInfo miInfo = new MBeanParameterInfo("method",
Invocation.class.getName(), "Invocation data");
+ MBeanConstructorInfo[] ctorInfo = null;
+ MBeanOperationInfo[] opInfo = {
+ new MBeanOperationInfo("home", "Invoke an EJBHome interface method",
+ new MBeanParameterInfo[] {miInfo},
+ "java.lang.Object", MBeanOperationInfo.ACTION_INFO),
+ new MBeanOperationInfo("remote", "Invoke an EJBObject interface method",
+ new MBeanParameterInfo[] {miInfo},
+ "java.lang.Object", MBeanOperationInfo.ACTION_INFO),
+ new MBeanOperationInfo("getHome", "Get the EJBHome interface class",
+ null,
+ "java.lang.Class", MBeanOperationInfo.INFO),
+ new MBeanOperationInfo("getRemote", "Get the EJBObject interface class",
+ null,
+ "java.lang.Class", MBeanOperationInfo.INFO),
+ new MBeanOperationInfo("getCacheSize", "Get the Container cache size.",
+ null,
+ "java.lang.Integer", MBeanOperationInfo.INFO),
+ new MBeanOperationInfo("flushCache", "Flush the Container cache.",
+ null,
+ "", MBeanOperationInfo.ACTION_INFO)
+ };
+ MBeanNotificationInfo[] notifyInfo = null;
+ return new MBeanInfo(getClass().getName(), "EJB Container MBean",
+ null, ctorInfo, opInfo, notifyInfo);
+ }
+
+ /**
+ * Handle a operation invocation.
+ */
+ public Object invoke(String actionName, Object[] params, String[] signature)
+ throws MBeanException, ReflectionException
+ {
+
+
+ if( params != null && params.length == 1 && (params[0] instanceof Invocation)
== false )
+ throw new MBeanException(new IllegalArgumentException("Expected zero or
single Invocation argument"));
+
+ Object value = null;
+ Invocation mi = null;
+ if( params != null && params.length == 1 )
+ mi = (Invocation) params[0];
+
+ ClassLoader callerClassLoader =
Thread.currentThread().getContextClassLoader();
+ try
+ {
+ Thread.currentThread().setContextClassLoader(this.classLoader);
+ // Check against home, remote, localHome, local, getHome, getRemote,
getLocalHome, getLocal
+ if (actionName.equals("getCacheSize")) {
+ return new Integer(((EntityCache)instanceCache).getCacheSize());
+ }
+ if (actionName.equals("flushCache")) {
+ System.out.println("flushing cache");
+ ((EntityCache)instanceCache).flush();
+ return null;
+ }
+ else if( actionName.equals("remote") )
+ {
+
+ if (mi instanceof MarshalledInvocation)
+
+ {
+ ((MarshalledInvocation)
mi).setMethodMap(marshalledInvocationMapping);
+
+ if (log.isDebugEnabled())
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ log.debug("METHOD REMOTE INVOKE
"+mi.getContainer()+"||"+mi.getMethod().getName()+"||");
+
+ }
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ else if
(!mi.getMethod().getDeclaringClass().isAssignableFrom(remoteInterface))
+ {
+
+ if (log.isDebugEnabled())
+ {
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ log.debug("METHOD REMOTE INVOKE
"+mi.getContainer()+"||"+mi.getMethod().getName()+"||");
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ log.debug("WARNING: YOU ARE RUNNING NON-OPTIMIZED");
+ }
+
+ // TEMP FIXME HACK This makes user transactions on the server work
until
+ // local invocations stop going through Marshalled Invocation
+ Transaction hack = mi.getTransaction();
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ //Serialize deserialize
+ mi = (Invocation) new MarshalledObject(new
MarshalledInvocation(mi.payload)).get();
+
+ // TEMP FIXME HACK This makes user transactions on the server work
until
+ // local invocations stop going through Marshalled Invocation
+ mi.setTransaction(hack);
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ ((MarshalledInvocation)
mi).setMethodMap(marshalledInvocationMapping);
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ return new MarshalledObject(invoke(mi));
+ }
+
+ value = invoke(mi);
+ }
+
+ else if( actionName.equals("local") )
+ {
+ throw new MBeanException(new UnsupportedOperationException("local is
not supported yet"));
+ }
+ else if( actionName.equals("home") )
+ {
+
+ if (mi instanceof MarshalledInvocation)
+ {
+
+ ((MarshalledInvocation)
mi).setMethodMap(marshalledInvocationMapping);
+
+ if (log.isDebugEnabled())
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ log.debug("METHOD HOME INVOKE
"+mi.getContainer()+"||"+mi.getMethod().getName()+"||"+mi.getArguments().toString());
+
+ }
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ else if
(!mi.getMethod().getDeclaringClass().isAssignableFrom(remoteInterface))
+ {
+
+ if (log.isDebugEnabled())
+ {
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ log.debug("METHOD HOME INVOKE
"+mi.getContainer()+"||"+mi.getMethod().getName()+"||"+mi.getArguments().toString());
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ log.debug("WARNING: YOU ARE RUNNING NON-OPTIMIZED");
+ }
+
+ // TEMP FIXME HACK This makes user transactions on the server work
until
+ // local invocations stop going through Marshalled Invocation
+ Transaction hack = mi.getTransaction();
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ //Serialize deserialize
+ mi = (MarshalledInvocation) new MarshalledObject(new
MarshalledInvocation(mi.payload)).get();
+
+ // TEMP FIXME HACK This makes user transactions on the server work
until
+ // local invocations stop going through Marshalled Invocation
+ mi.setTransaction(hack);
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ ((MarshalledInvocation)
mi).setMethodMap(marshalledInvocationMapping);
+
+ // FIXME FIXME FIXME FIXME REMOVE WHEN CL ARE INTEGRATED
+ return new MarshalledObject(invokeHome(mi));
+
+ }
+
+ value = invokeHome(mi);
+ }
+ else if( actionName.equals("localHome") )
+ {
+ throw new MBeanException(new UnsupportedOperationException("localHome
is not supported yet"));
+ }
+ else if( actionName.equals("getHome") )
+ {
+ String className = this.getBeanMetaData().getHome();
+ if( className != null )
+ {
+ Class clazz = this.classLoader.loadClass(className);
+ value = clazz;
+ }
+ }
+ else if( actionName.equals("getRemote") )
+ {
+ String className = this.getBeanMetaData().getRemote();
+ if( className != null )
+ {
+ Class clazz = this.classLoader.loadClass(className);
+ value = clazz;
+ }
+ }
+ else if( actionName.equals("getLocalHome") )
+ {
+ value = this.localHomeInterface;
+ }
+ else if( actionName.equals("getLocal") )
+ {
+ value = this.localInterface;
+ }
+ else
+ {
+ throw new MBeanException(new IllegalArgumentException("Unknown action:
"+actionName));
+ }
+ }
+ catch (Exception e)
+ {
+ log.error("invoke returned an exception", e);
+ throw new MBeanException(e, "invoke returned an exception");
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader(callerClassLoader);
+ }
+
+ return value;
+ }
+
Interceptor createContainerInterceptor()
{
return new ContainerInterceptor();
1.5 +13 -1 jboss/src/main/org/jboss/ejb/EntityCache.java
Index: EntityCache.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/EntityCache.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EntityCache.java 2001/08/03 17:15:43 1.4
+++ EntityCache.java 2002/01/31 00:04:23 1.5
@@ -15,7 +15,7 @@
* @see EntityInstanceCache
*
* @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public interface EntityCache
extends InstanceCache
@@ -27,4 +27,16 @@
* @return Cache key
*/
Object createCacheKey(Object id);
+
+ /**
+ * Return number of cached objects;
+ *
+ */
+ int getCacheSize();
+
+ /**
+ * Flush the cache.
+ *
+ */
+ void flush();
}
1.11 +4 -1 jboss/src/main/org/jboss/ejb/InstanceCache.java
Index: InstanceCache.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/InstanceCache.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- InstanceCache.java 2001/08/03 17:15:43 1.10
+++ InstanceCache.java 2002/01/31 00:04:23 1.11
@@ -16,7 +16,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Rickard �berg</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Simone Bordet</a>
- * @version $Revision: 1.10 $
+ * @version $Revision: 1.11 $
*
* <p><b>Revisions:</b>
* <p><b>20010718 andreas schaefer:</b>
@@ -88,6 +88,9 @@
* @see #insert
*/
boolean isActive(Object id);
+
+
+
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development