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

Reply via email to