Oops, did you remove the excess debug statements I put in or can you point
a bit to where they might be? I'm not at all sure I could recognize such
places..

David Jencks

On 2001.11.14 14:56:29 -0500 David Maplesden wrote:
> Looks good Hiram,
> 
> Can I make one suggestion.  When I was profiling and improving JBossMQ's
> performance I implemented a couple of static methods
> SpyMessage.writeMessage() and SpyMessage.readMessage() to use instead of
> the
> standard writeObject and readObject methods.  I think you should use them
> here.
> 
> They work fine, you get back exactly the same object you write out, and
> they
> are used by all the persistence and communication mechanisms currently
> because they are many times quicker than the standard object
> serialization
> (which is horribly slow).
> 
> Oh, and if we are talking about performance, I would appreciate everyone
> being very careful about placing debug statements inside any code that is
> executed for every message through the system.  Several of these have
> been
> introduced with the advent of the message caching and David J's new
> stuff.
> 
> The cost of constructing all the message strings, even if they aren't
> used,
> can add considerable overhead to the system (if you don't believe me then
> create a test and see).  Remember I managed to get somewhere between a 10
> to
> 20 times speed improvement by improving the serialisation code and
> removing
> these debug statements from inside the inner loop.  If you really, really
> want them then place them behind a static final boolean flag i.e.
> 
> if(DEBUG) log.debug("a message");
>  
> so that we can easily set the flag to false and recompile a higher
> performance version of the engine.  With the static flag set to false the
> compiler removes the line completely, so there is no performance hit at
> all.
> 
> Thanks David.
> 
> > -----Original Message-----
> > From: Hiram Chirino [mailto:[EMAIL PROTECTED]]
> > Sent: Wednesday, November 14, 2001 5:24 PM
> > To: [EMAIL PROTECTED]
> > Subject: [JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/pm/file
> > CacheStore.java CacheStoreMBean.java
> > 
> > 
> >   User: chirino 
> >   Date: 01/11/13 20:24:08
> > 
> >   Added:       src/main/org/jboss/mq/pm/file CacheStore.java
> >                         CacheStoreMBean.java
> >   Log:
> >   Factored out a CacheStore object from the message store.  
> > This should lay the
> >   ground work needed so that the MessageCache can use a PM 
> > for saving and loading
> >   messages.
> >   
> >   Also fixed a small bug in the file PM.  It was not properly 
> > restoring the message
> >   after a server restart.
> >   
> >   Revision  Changes    Path
> >   1.1                  
> > jbossmq/src/main/org/jboss/mq/pm/file/CacheStore.java
> >   
> >   Index: CacheStore.java
> >   ===================================================================
> >   /*
> >    * JBoss, the OpenSource J2EE webOS
> >    *
> >    * Distributable under LGPL license.
> >    * See terms of license at gnu.org.
> >    */
> >   package org.jboss.mq.pm.file;
> >   
> >   import java.io.BufferedInputStream;
> >   import java.io.BufferedOutputStream;
> >   import java.io.File;
> >   import java.io.FileInputStream;
> >   import java.io.FileOutputStream;
> >   import java.io.IOException;
> >   import java.io.ObjectInputStream;
> >   import java.io.ObjectOutputStream;
> >   
> >   import javax.jms.JMSException;
> >   import org.jboss.mq.SpyJMSException;
> >   import org.jboss.mq.SpyMessage;
> >   import org.jboss.mq.server.MessageReference;
> >   import org.jboss.system.ServiceMBeanSupport;
> >   
> >   /**
> >    *  This class manages the persistence needs of the MessageCache
> >    *
> >    * @author     Hiram Chirino 
> >    * @version    $Revision: 1.1 $
> >    */
> >   public class CacheStore extends ServiceMBeanSupport 
> > implements org.jboss.mq.pm.CacheStore, CacheStoreMBean {
> >      String dataDirectory;
> >      File dataFile;
> >   
> >      /**
> >       * @see ServiceMBeanSupport#getName()
> >       */
> >      public String getName() {
> >         return "JBossMQ-CacheStore";
> >      }
> >   
> >      /**
> >       * @see CacheStore#loadFromStorage(MessageReference)
> >       */
> >      public SpyMessage loadFromStorage(MessageReference mh) 
> > throws JMSException {
> >         try {
> >            File f = new File(dataFile, "Message-" + mh.referenceId);
> >            ObjectInputStream is = new ObjectInputStream(new 
> > BufferedInputStream(new FileInputStream(f)));
> >            Object rc = is.readObject();
> >            is.close();
> >            return (SpyMessage) rc;
> >         } catch (ClassNotFoundException e) {
> >            throw new SpyJMSException("Could not load message 
> > from secondary storage: ", e);
> >         } catch (IOException e) {
> >            throw new SpyJMSException("Could not load message 
> > from secondary storage: ", e);
> >         }
> >      }
> >   
> >      /**
> >       * @see CacheStore#saveToStorage(MessageReference, SpyMessage)
> >       */
> >      public void saveToStorage(MessageReference mh, 
> > SpyMessage message) throws JMSException {
> >         try {
> >            File f = new File(dataFile, "Message-" + mh.referenceId);
> >            ObjectOutputStream os = new ObjectOutputStream(new 
> > BufferedOutputStream(new FileOutputStream(f)));
> >            os.writeObject(message);
> >            os.close();
> >         } catch (IOException e) {
> >            throw new SpyJMSException("Could not load message 
> > from secondary storage: ", e);
> >         }
> >      }
> >   
> >      /**
> >       * @see CacheStore#removeFromStorage(MessageReference)
> >       */
> >      public void removeFromStorage(MessageReference mh) 
> > throws JMSException {
> >         File f = new File(dataFile, "Message-" + mh.referenceId);
> >         f.delete();
> >      }
> >   
> >      /**
> >       * @see CacheStoreMBean#getDataDirectory()
> >       */
> >      public String getDataDirectory() {
> >         return null;
> >      }
> >   
> >      /**
> >       * @see CacheStoreMBean#setDataDirectory(String)
> >       */
> >      public void setDataDirectory(String newDataDirectory) {
> >         dataDirectory = newDataDirectory;
> >      }
> >   
> >      /**
> >       * This gets called to start the service. 
> >       */
> >      protected void startService() throws Exception {
> >         File jbossHome = new 
> > File(System.getProperty("jboss.system.home"));
> >         dataFile = new File(jbossHome, dataDirectory);
> >         log.debug("Data directory set to: " + 
> > dataFile.getCanonicalPath());
> >   
> >         dataFile.mkdirs();
> >         if (!dataFile.isDirectory())
> >            throw new Exception("The configured data directory 
> > is not valid: " + dataDirectory);
> >   
> >         // Clean out the directory of any previous files.
> >         File files[] = dataFile.listFiles();
> >         log.debug("Removing " + files.length + " file(s) 
> > from: " + dataFile.getCanonicalPath());
> >         for (int i = 0; i < files.length; i++) {
> >            files[i].delete();
> >         }
> >   
> >      }
> >   
> >      /**
> >       * @see CacheStoreMBean#getCacheStoreInstance()
> >       */
> >      public Object getInstance() {
> >         return this;
> >      }
> >   
> >   }
> >   
> >   
> >   1.1                  
> > jbossmq/src/main/org/jboss/mq/pm/file/CacheStoreMBean.java
> >   
> >   Index: CacheStoreMBean.java
> >   ===================================================================
> >   /*
> >    * JBoss, the OpenSource J2EE webOS
> >    *
> >    * Distributable under LGPL license.
> >    * See terms of license at gnu.org.
> >    */
> >   package org.jboss.mq.pm.file;
> >   
> >   import org.jboss.system.ServiceMBean;
> >   import javax.management.ObjectName;
> >   
> >   /**
> >    *  <description>MBean interface for the JBossMQ JMX service.
> >    *
> >    * @author     Vincent Sheffer ([EMAIL PROTECTED])
> >    * @see        <related>
> >    * @version    $Revision: 1.1 $
> >    */
> >   public interface CacheStoreMBean
> >      extends ServiceMBean, org.jboss.mq.pm.CacheStoreMBean
> >   {
> >      /**
> >       *  Gets the DataDirectory attribute of the 
> > CacheStoreMBean object
> >       *
> >       * @return    The DataDirectory value
> >       */
> >      public java.lang.String getDataDirectory();
> >   
> >      /**
> >       *  Sets the DataDirectory attribute of the 
> > CacheStoreMBean object
> >       *
> >       * @param  newDataDirectory  The new DataDirectory value
> >       */
> >      public void setDataDirectory(java.lang.String newDataDirectory);
> >   }
> >   
> >   
> >   
> > 
> > _______________________________________________
> > Jboss-development mailing list
> > [EMAIL PROTECTED]
> > https://lists.sourceforge.net/lists/listinfo/jboss-development
> > 
> 
> _______________________________________________
> Jboss-development mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-development
> 
> 

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to