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