[PATCH] removed select *, used columns in inserts, removed some cursor leaks, changed some internal handling from vectors to collections, pre defined stmts and resultsets, to close them cleanly in case of an ex ception

Michael Jaszczyk <[email protected]>
Newsgroups gmane.comp.java.openjms.devel
Message-ID <[email protected]>
Index: org/exolab/jms/administration/AdminConnection.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/administration/AdminConnect
ion.java,v
retrieving revision 1.12
diff -u -r1.12 AdminConnection.java
--- org/exolab/jms/administration/AdminConnection.java	7 Aug 2003 13:32:46
-0000	1.12
+++ org/exolab/jms/administration/AdminConnection.java	14 Apr 2004 17:30:46
-0000
@@ -44,6 +44,7 @@
  */
 package org.exolab.jms.administration;
 
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -210,7 +211,7 @@
      * topic destination.
      *
      * @param       destination         the destination name
-     * @return      Vector              collection of strings
+     * @return      List              collection of strings
      * @throws      JMSException        on error
      */
     Vector getDurableConsumers(String destination) throws JMSException;
Index: org/exolab/jms/administration/JmsAdminServerIfc.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/administration/JmsAdminServ
erIfc.java,v
retrieving revision 1.9
diff -u -r1.9 JmsAdminServerIfc.java
--- org/exolab/jms/administration/JmsAdminServerIfc.java	2 Jan 2004
07:32:09 -0000	1.9
+++ org/exolab/jms/administration/JmsAdminServerIfc.java	14 Apr 2004
17:30:47 -0000
@@ -47,6 +47,7 @@
  */
 package org.exolab.jms.administration;
 
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -119,7 +120,7 @@
      * topic destination.
      *
      * @param       topic               the topic name
-     * @return      Vector              collection of strings
+     * @return      List              collection of strings
      * @exception   JMSException
      */
     public Vector getDurableConsumers(String destination)
Index: org/exolab/jms/administration/intravm/IntravmJmsAdminConnection.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/administration/intravm/Intr
avmJmsAdminConnection.java,v
retrieving revision 1.11
diff -u -r1.11 IntravmJmsAdminConnection.java
--- org/exolab/jms/administration/intravm/IntravmJmsAdminConnection.java
17 Aug 2003 01:32:21 -0000	1.11
+++ org/exolab/jms/administration/intravm/IntravmJmsAdminConnection.java
14 Apr 2004 17:30:47 -0000
@@ -44,6 +44,7 @@
  */
 package org.exolab.jms.administration.intravm;
 
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
Index: org/exolab/jms/message/BytesMessageConverter.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/message/BytesMessageConvert
er.java,v
retrieving revision 1.1
diff -u -r1.1 BytesMessageConverter.java
--- org/exolab/jms/message/BytesMessageConverter.java	1 Jan 2004 13:45:03
-0000	1.1
+++ org/exolab/jms/message/BytesMessageConverter.java	14 Apr 2004 17:30:47
-0000
@@ -78,7 +78,7 @@
      */
     protected void populate(Message source, Message target) 
         throws JMSException {
-        byte[] buffer = new byte[512];
+        byte[] buffer = new byte[4096*12];
         BytesMessage from = (BytesMessage) source;
         BytesMessage to = (BytesMessage) target;
 
Index: org/exolab/jms/messagemgr/DurableConsumerEndpoint.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/messagemgr/DurableConsumerE
ndpoint.java,v
retrieving revision 1.22
diff -u -r1.22 DurableConsumerEndpoint.java
--- org/exolab/jms/messagemgr/DurableConsumerEndpoint.java	25 Sep 2003
11:24:16 -0000	1.22
+++ org/exolab/jms/messagemgr/DurableConsumerEndpoint.java	14 Apr 2004
17:30:48 -0000
@@ -49,6 +49,8 @@
 
 import java.sql.Connection;
 import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -63,6 +65,7 @@
 import org.exolab.jms.message.MessageImpl;
 import org.exolab.jms.persistence.DatabaseService;
 import org.exolab.jms.persistence.PersistenceException;
+import org.exolab.jms.persistence.SQLHelper;
 import org.exolab.jms.scheduler.Scheduler;
 import org.exolab.jms.server.JmsServerSession;
 
@@ -124,23 +127,17 @@
             // remove expired messages
             DatabaseService.getAdapter().removeExpiredMessageHandles(
                 connection, _name);
-            Vector handles =
DatabaseService.getAdapter().getMessageHandles(
+            List handles = DatabaseService.getAdapter().getMessageHandles(
                 connection, getDestination(), _name);
             connection.commit();
             // iterate over each handle and add them to the list of
messages
             // for the durable consumer
-            Enumeration iter = handles.elements();
-            while (iter.hasMoreElements()) {
-                addMessage((MessageHandle) iter.nextElement());
+            Iterator iter = handles.iterator();
+            while (iter.hasNext()) {
+                addMessage((MessageHandle) iter.next());
             }
         } catch (PersistenceException exception) {
-            if (connection != null) {
-                try {
-                    connection.rollback();
-                } catch (Exception nested) {
-                    // ignore
-                }
-            }
+        	SQLHelper.rollback(connection);
             throw new JMSException("DurableConusmerEndpoint not activated "
+
                 exception);
         } catch (Exception exception) {
@@ -148,13 +145,7 @@
             throw new JMSException("DurableConusmerEndpoint not activated "
+
                 exception);
         } finally {
-            if (connection != null) {
-                try {
-                    connection.close();
-                } catch (Exception nested) {
-                    // ignore
-                }
-            }
+              SQLHelper.close(connection);        
         }
     }
 
Index: org/exolab/jms/messagemgr/MessageLeaseHelper.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/messagemgr/MessageLeaseHelp
er.java,v
retrieving revision 1.16
diff -u -r1.16 MessageLeaseHelper.java
--- org/exolab/jms/messagemgr/MessageLeaseHelper.java	17 Aug 2003 01:32:24
-0000	1.16
+++ org/exolab/jms/messagemgr/MessageLeaseHelper.java	14 Apr 2004 17:30:48
-0000
@@ -48,6 +48,8 @@
 import java.sql.SQLException;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -283,14 +285,14 @@
         // lease manager
         if (DatabaseService.getAdapter().checkDestination(
             connection, listener.getDestinationByName())) {
-            Vector handles =
+            List handles =
                 DatabaseService.getAdapter().getNonExpiredMessages(
                     connection, listener.getDestination());
             if (handles != null) {
-                Enumeration iter = handles.elements();
-                while (iter.hasMoreElements()) {
+                Iterator iter = handles.iterator();
+                while (iter.hasNext()) {
                     PersistentMessageHandle handle =
-                        (PersistentMessageHandle) iter.nextElement();
+                        (PersistentMessageHandle) iter.next();
                     addLease(handle);
                 }
             }
Index: org/exolab/jms/messagemgr/QueueDestinationCache.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/messagemgr/QueueDestination
Cache.java,v
retrieving revision 1.34
diff -u -r1.34 QueueDestinationCache.java
--- org/exolab/jms/messagemgr/QueueDestinationCache.java	29 Dec 2003
13:09:25 -0000	1.34
+++ org/exolab/jms/messagemgr/QueueDestinationCache.java	14 Apr 2004
17:30:48 -0000
@@ -228,12 +228,12 @@
 
         DatabaseService.getAdapter().removeExpiredMessageHandles(
             connection, destination.getName());
-        Vector handles = DatabaseService.getAdapter().getMessageHandles(
+        List handles = DatabaseService.getAdapter().getMessageHandles(
             connection, destination, destination.getName());
         if (handles != null) {
-            Enumeration iter = handles.elements();
-            while (iter.hasMoreElements()) {
-                addMessage((MessageHandle) iter.nextElement());
+            Iterator iter = handles.iterator();
+            while (iter.hasNext()) {
+                addMessage((MessageHandle) iter.next());
             }
         }
     }
Index: org/exolab/jms/persistence/BatchingRdbmsAdapter.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/BatchingRdbmsAd
apter.java,v
retrieving revision 1.11
diff -u -r1.11 BatchingRdbmsAdapter.java
--- org/exolab/jms/persistence/BatchingRdbmsAdapter.java	8 Jan 2004
05:55:05 -0000	1.11
+++ org/exolab/jms/persistence/BatchingRdbmsAdapter.java	14 Apr 2004
17:30:59 -0000
@@ -55,6 +55,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -213,7 +214,7 @@
     }
 
     // implementation of PersistenceAdapter.getUnprocessedMessages
-    public Vector getUnprocessedMessages(Connection connection)
+    public List getUnprocessedMessages(Connection connection)
         throws PersistenceException {
         flush();
         return _rdbms.getUnprocessedMessages(connection);
@@ -234,7 +235,7 @@
     }
 
     // implementation of PersistenceAdapter.getMessages
-    public Vector getMessages(Connection connection,
+    public List getMessages(Connection connection,
                               PersistentMessageHandle handle)
         throws PersistenceException {
         flush();
@@ -263,7 +264,7 @@
     }
 
     // implementation of PersistenceAdapter.getMessageHandles
-    public Vector getMessageHandles(Connection connection,
+    public List getMessageHandles(Connection connection,
                                     JmsDestination destination, String
name)
         throws PersistenceException {
         flush();
@@ -368,7 +369,7 @@
     }
 
     // implementation of PersistenceAdapter.getQueueMessageCount
-    public Vector getNonExpiredMessages(Connection connection,
+    public List getNonExpiredMessages(Connection connection,
                                         JmsDestination destination)
         throws PersistenceException {
         flush();
Index: org/exolab/jms/persistence/Consumers.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/Consumers.java,
v
retrieving revision 1.9
diff -u -r1.9 Consumers.java
--- org/exolab/jms/persistence/Consumers.java	7 Aug 2003 13:33:06 -0000
1.9
+++ org/exolab/jms/persistence/Consumers.java	14 Apr 2004 17:30:59 -0000
@@ -47,9 +47,12 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -278,7 +281,7 @@
      * @param topic - the topic to query
      */
     public synchronized Vector getDurableConsumers(String destination) {
-        Vector result = new Vector(); // vector for legacy reasons
+        Vector result = new Vector(); 
         long destinationId = Destinations.instance().getId(destination);
         if (destinationId != 0) {
             Iterator iter = _consumers.values().iterator();
@@ -385,15 +388,19 @@
         PreparedStatement select = null;
         ResultSet set = null;
         try {
-            select = connection.prepareStatement("select * from
consumers");
+            select = connection.prepareStatement("select name, consumerid,
destinationid, created from consumers");
             set = select.executeQuery();
-
+			String name = null;
+			long consumerId  = 0;
+			long destinationId = 0;
+			long created = 0;
+			Consumer map = null;
             while (set.next()) {
-                String name = set.getString("name");
-                long consumerId = set.getLong("consumerId");
-                long destinationId = set.getLong("destinationId");
-                long created = set.getLong("created");
-                Consumer map = new Consumer(name, consumerId,
destinationId,
+                name = set.getString(1);
+                consumerId = set.getLong(2);
+                destinationId = set.getLong(3);
+                created = set.getLong(4);
+                map = new Consumer(name, consumerId, destinationId,
                     created);
                 _consumers.put(name, map);
             }
Index: org/exolab/jms/persistence/Destinations.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/Destinations.ja
va,v
retrieving revision 1.10
diff -u -r1.10 Destinations.java
--- org/exolab/jms/persistence/Destinations.java	7 Aug 2003 13:33:06
-0000	1.10
+++ org/exolab/jms/persistence/Destinations.java	14 Apr 2004 17:30:59
-0000
@@ -156,7 +156,7 @@
             boolean isQueue = (destination instanceof JmsQueue);
 
             insert = connection.prepareStatement(
-                "insert into destinations values (?, ?, ?)");
+                "insert into destinations (name, isqueue, destinationid)
values (?, ?, ?)");
             insert.setString(1, destination.getName());
             insert.setBoolean(2, isQueue);
             insert.setLong(3, Id);
@@ -324,16 +324,20 @@
         ResultSet set = null;
         try {
             select = connection.prepareStatement(
-                "select * from destinations");
+                "select name, isqueue, destinationid from destinations");
 
             set = select.executeQuery();
+            String name = null;
+			boolean isQueue = false;
+			JmsDestination destination = null;
+			long Id = 0;
             while (set.next()) {
-                String name = set.getString("name");
-                boolean isQueue = set.getBoolean("isQueue");
-                JmsDestination destination = (isQueue)
+                name = set.getString(1);
+                isQueue = set.getBoolean(2);
+                destination = (isQueue)
                     ? (JmsDestination) new JmsQueue(name)
                     : (JmsDestination) new JmsTopic(name);
-                long Id = set.getLong("destinationId");
+                Id = set.getLong(3);
                 destination.setPersistent(true);
                 cache(destination, Id);
             }
@@ -341,13 +345,8 @@
             throw new PersistenceException("Error in Destinations.load " +
                 error.toString());
         } finally {
-            if (select != null) {
                 SQLHelper.close(select);
-            }
-
-            if (set != null) {
                 SQLHelper.close(set);
-            }
         }
     }
 
Index: org/exolab/jms/persistence/MessageHandles.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/MessageHandles.
java,v
retrieving revision 1.30
diff -u -r1.30 MessageHandles.java
--- org/exolab/jms/persistence/MessageHandles.java	8 Jan 2004 05:55:07
-0000	1.30
+++ org/exolab/jms/persistence/MessageHandles.java	14 Apr 2004 17:30:59
-0000
@@ -72,7 +72,8 @@
      * prepared statement for inserting a message handle
      */
     private static final String INSERT_MSG_HANDLE_STMT =
-        "insert into message_handles values " + "(?,?,?,?,?,?,?,?)";
+        "insert into message_handles (messageid, destinationid, consumerid,
priority, acceptedtime, sequencenumber, expirytime, delivered) values "
+         + "(?,?,?,?,?,?,?,?)";
 
     /**
      * prepared statements for deleting message handle
@@ -118,7 +119,7 @@
      * Retrieve all message handles for a particular consumer
      */
     private static final String GET_MSG_HANDLES_FOR_DEST =
-        "select * from message_handles where consumerId=? order by " +
+        "select messageid, destinationid, consumerid, priority,
acceptedtime, sequencenumber, expirytime, delivered from message_handles
where consumerId=? order by " +
         "acceptedTime asc";
 
     /**
@@ -344,7 +345,7 @@
                         + "handle=" + id + " destination id="
                         + destinationId + " consumer id=" + consumerId);
                 }
-
+              
                 // if there are no more handles with the specified message
id
                 // then delete the corresponding message from the message
table
                 select = connection.prepareStatement(GET_MSG_HANDLE_COUNT);
@@ -539,26 +540,27 @@
 
             // iterate through the result set and construct the
corresponding
             // PersistentMessageHandles
+			JmsDestination dest = null;
+			String consumer = null;
+			PersistentMessageHandle handle = null;
             set = select.executeQuery();
             while (set.next()) {
                 // Attempt to retrieve the corresponding destination
-                JmsDestination dest = Destinations.instance().get(
-                    set.getLong(2));
+                dest = Destinations.instance().get(set.getLong(2));
                 if (dest == null) {
                     throw new PersistenceException(
                         "Cannot create persistent handle, because " +
                         "destination mapping failed for " +
set.getLong(2));
                 }
 
-                String consumer = Consumers.instance().getConsumerName(
-                    set.getLong(3));
+                consumer =
Consumers.instance().getConsumerName(set.getLong(3));
                 if (name == null) {
                     throw new PersistenceException(
                         "Cannot create persistent handle because " +
                         "consumer mapping failed for " + set.getLong(3));
                 }
 
-                PersistentMessageHandle handle = new
PersistentMessageHandle();
+                handle = new PersistentMessageHandle();
                 handle.setMessageId(new MessageId(set.getString(1)));
                 handle.setDestination(dest);
                 handle.setConsumerName(consumer);
Index: org/exolab/jms/persistence/Messages.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/Messages.java,v
retrieving revision 1.24
diff -u -r1.24 Messages.java
--- org/exolab/jms/persistence/Messages.java	8 Jan 2004 05:55:07 -0000
1.24
+++ org/exolab/jms/persistence/Messages.java	14 Apr 2004 17:30:59 -0000
@@ -43,6 +43,8 @@
 
 package org.exolab.jms.persistence;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
@@ -51,16 +53,16 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Vector;
 
-import javax.jms.Destination;
 import javax.jms.JMSException;
-import javax.sql.DataSource;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import org.exolab.jms.client.JmsDestination;
 import org.exolab.jms.client.JmsTopic;
 import org.exolab.jms.message.MessageId;
@@ -172,7 +174,7 @@
         try {
             // create, populate and execute the insert
             insert = connection.prepareStatement(
-                "insert into messages values " + "(?,?,?,?,?,?,?)");
+                "insert into messages (messageid, destinationid, priority,
createtime, expirytime,processed,messageblob) values " + "(?,?,?,?,?,?,?)");
             insert.setString(1, messageId);
             insert.setLong(2, destinationId);
             insert.setInt(3, message.getJMSPriority());
@@ -182,11 +184,12 @@
 
             // serialize the message
             byte[] bytes = serialize(message);
-            insert.setBinaryStream(7, new ByteArrayInputStream(bytes),
+            insert.setBinaryStream(7, new BufferedInputStream(new
ByteArrayInputStream(bytes)),
                 bytes.length);
             //insert.setBytes(8, bytes);
 
             // execute the insert
+            long t1 = System.currentTimeMillis();
             if (insert.executeUpdate() != 1) {
                 throw new PersistenceException(
                     "Failed to add message=" + message.getMessageId() +
@@ -351,13 +354,13 @@
      * @return Vector - one or more MessageImpl objects
      * @throws PersistenceException - if an SQL error occurs
      */
-    public Vector getMessages(Connection connection, String destination,
+    public List getMessages(Connection connection, String destination,
                               int priority, long time)
         throws PersistenceException {
 
         PreparedStatement select = null;
         ResultSet set = null;
-        Vector messages = new Vector();
+        List messages = new ArrayList(89);
 
         try {
             JmsDestination dest = Destinations.instance().get(destination);
@@ -380,7 +383,7 @@
                 // on timestamp. This will fault in any message greater
than
                 // or equal to the specified timestamp.
                 select = connection.prepareStatement(
-                    "select * from messages where priority=? and
createTime>=? order by createTime asc");
+                    "select createtime,processed,messageblob from messages
where priority=? and createTime>=? order by createTime asc");
                 select.setInt(1, priority);
                 select.setLong(2, time);
             } else {
@@ -388,7 +391,7 @@
                 // more specialized query and fault in other messages for
                 // the same destination.
                 select = connection.prepareStatement(
-                    "select * from messages where destinationId=? and
priority=? and createTime>=? order by createTime asc");
+                    "select createtime,processed,messageblob from messages
where destinationId=? and priority=? and createTime>=? order by createTime
asc");
                 select.setLong(1, destinationId);
                 select.setInt(2, priority);
                 select.setLong(3, time);
@@ -398,19 +401,20 @@
             // now iterate through the result set
             int count = 0;
             long lastTimeStamp = time;
+			MessageImpl m = null;
             while (set.next()) {
-                MessageImpl m = deserialize(set.getBytes("messageBlob"));
-                m.setProcessed((set.getInt("processed") == 1 ? true :
false));
+                m = deserialize(set.getBytes(3));
+                m.setProcessed((set.getInt(2) == 1 ? true : false));
                 messages.add(m);
                 if (++count > 200) {
                     // if there are more than two hundred rows then exist
                     // the loop after 200 messages have been retrieved
                     // and the timestamp has changed.
-                    if (set.getLong("createTime") > lastTimeStamp) {
+                    if (set.getLong(1) > lastTimeStamp) {
                         break;
                     }
                 } else {
-                    lastTimeStamp = set.getLong("createTime");
+                    lastTimeStamp = set.getLong(1);
                 }
             }
         } catch (SQLException exception) {
@@ -421,7 +425,7 @@
             SQLHelper.close(select);
         }
 
-        return messages;
+        return Collections.unmodifiableList(messages);
     }
 
     /**
@@ -484,20 +488,21 @@
      * @return Vector - one or more MessageImpl objects
      * @throws PersistenceException - if an SQL error occurs
      */
-    public Vector getUnprocessedMessages(Connection connection)
+    public List getUnprocessedMessages(Connection connection)
         throws PersistenceException {
 
         PreparedStatement select = null;
         ResultSet set = null;
-        Vector messages = new Vector();
+        List messages =new ArrayList(89);
 
         try {
             select = connection.prepareStatement(
-                "select * from messages where processed=0");
+                "select messageblob from messages where processed=0");
             set = select.executeQuery();
+			MessageImpl m = null;
             // now iterate through the result set
             while (set.next()) {
-                MessageImpl m = deserialize(set.getBytes("messageBlob"));
+                m = deserialize(set.getBytes(1));
                 m.setProcessed(false);
                 messages.add(m);
             }
@@ -509,7 +514,7 @@
             SQLHelper.close(select);
         }
 
-        return messages;
+        return Collections.unmodifiableList(messages);
     }
 
     /**
@@ -543,9 +548,9 @@
                 " from messages where expiryTime>0 and destinationId=?
order by expiryTime asc");
             select.setLong(1, destinationId);
             set = select.executeQuery();
-
+			PersistentMessageHandle handle = null;
             while (set.next()) {
-                PersistentMessageHandle handle = new
PersistentMessageHandle();
+                handle = new PersistentMessageHandle();
                 handle.setMessageId(new MessageId(set.getString(1)));
                 handle.setDestination(destination);
                 handle.setPriority(set.getInt(3));
@@ -621,15 +626,18 @@
         throws PersistenceException {
 
         byte[] result = null;
+		ByteArrayOutputStream bstream = null;
+		ObjectOutputStream ostream = null;
         try {
-            ByteArrayOutputStream bstream = new ByteArrayOutputStream();
-            ObjectOutputStream ostream = new ObjectOutputStream(bstream);
+            bstream = new ByteArrayOutputStream();
+            ostream = new  ObjectOutputStream(new
BufferedOutputStream(bstream));
             ostream.writeObject(message);
-            ostream.close();
             result = bstream.toByteArray();
         } catch (Exception exception) {
             throw new PersistenceException("Failed to serialize message",
                 exception);
+        } finally {
+        	SQLHelper.close(ostream);
         }
 
         return result;
@@ -645,14 +653,17 @@
         MessageImpl message = null;
 
         if (blob != null) {
+			ByteArrayInputStream bstream = null;
+			ObjectInputStream istream = null;
             try {
-                ByteArrayInputStream bstream = new
ByteArrayInputStream(blob);
-                ObjectInputStream istream = new ObjectInputStream(bstream);
+                bstream = new ByteArrayInputStream(blob);
+                istream = new ObjectInputStream(bstream);
                 message = (MessageImpl) istream.readObject();
-                istream.close();
             } catch (Exception exception) {
                 throw new PersistenceException(
                     "Failed to de-serialize message", exception);
+            } finally{
+				SQLHelper.close(istream);
             }
         } else {
             throw new PersistenceException(
Index: org/exolab/jms/persistence/ObjectAdapter.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/ObjectAdapter.j
ava,v
retrieving revision 1.30
diff -u -r1.30 ObjectAdapter.java
--- org/exolab/jms/persistence/ObjectAdapter.java	17 Aug 2003 01:32:25
-0000	1.30
+++ org/exolab/jms/persistence/ObjectAdapter.java	14 Apr 2004 17:30:59
-0000
@@ -54,8 +54,12 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -659,9 +663,9 @@
     }
 
     // implementation of PersistenceAdapter.getUnprocessedMessages
-    public synchronized Vector getUnprocessedMessages(Connection
connection)
+    public synchronized List getUnprocessedMessages(Connection connection)
         throws PersistenceException {
-        Vector result = new Vector();
+        List result = new ArrayList(89);
 
         try {
             PMDHashMap map;
@@ -698,14 +702,14 @@
             throw new PersistenceException("Error in getUnprocessedMessages
"
                 + err.toString());
         }
-        return result;
+        return Collections.unmodifiableList(result);
     }
 
     // implementation of PersistenceAdapter.getMessages
-    public synchronized Vector getMessages(Connection connection,
+    public synchronized List getMessages(Connection connection,
                                            PersistentMessageHandle handle)
         throws PersistenceException {
-        Vector messages = new Vector();
+        List messages = new ArrayList(89);
 
         // for the jdbm only ever retrieve a single message. We could
improve
         // this at a later date.
@@ -715,7 +719,7 @@
             messages.add(message);
         }
 
-        return messages;
+        return Collections.unmodifiableList(messages);
     }
 
     // implementation of PersistenceAdapter.addMessageHandle
@@ -845,10 +849,10 @@
     }
 
     // implementation of PersistenceAdapter.getMessageHandles
-    public synchronized Vector getMessageHandles(Connection connection,
+    public synchronized List getMessageHandles(Connection connection,
                                                  JmsDestination
destination, String name)
         throws PersistenceException {
-        Vector result = new Vector();
+        List result = new ArrayList();
 
         try {
             PMDVector vector;
@@ -866,7 +870,7 @@
                     while (handles.hasMoreElements()) {
                         PersistentMessageHandle handle =
                             (PersistentMessageHandle)
handles.nextElement();
-                        result.addElement(handle.clone());
+                        result.add(handle.clone());
                     }
                 } catch (Exception err) {
                     throw new PersistenceException("Error in
getMessageHandles " +
@@ -882,7 +886,7 @@
             throw new PersistenceException("Error in getMessageHandles " +
                 err.toString());
         }
-        return result;
+        return Collections.unmodifiableList(result);
     }
 
     // implementation of PersistenceAdapter.addDurableConsumer
@@ -1056,7 +1060,7 @@
     public synchronized Enumeration getDurableConsumers(Connection
connection,
                                                         String topic)
         throws PersistenceException {
-        Vector consumers = new Vector();
+        Vector consumers = new Vector(89);
 
         try {
             PMDVector vector;
@@ -1070,11 +1074,11 @@
                     String target = TOPIC + topic + "@";
 
                     Enumeration entries = vector.elements();
+					PersistentString entry = null;
                     while (entries.hasMoreElements()) {
-                        PersistentString entry =
-                            (PersistentString) entries.nextElement();
+                        entry = (PersistentString) entries.nextElement();
                         if (entry.toString().startsWith(target)) {
-                            consumers.addElement(
+                            consumers.add(
 
entry.toString().substring(target.length()));
                         }
                     }
@@ -1493,9 +1497,11 @@
 
                     // collect a list of messages that have expired so that
                     // they can be deleted later
+					PMDHandle handle = null;
+					PersistentMessage msg = null;
                     while (iter.hasMoreElements()) {
-                        PMDHandle handle = (PMDHandle) iter.nextElement();
-                        PersistentMessage msg = (PersistentMessage)
handle.resolve();
+                        handle = (PMDHandle) iter.nextElement();
+                        msg = (PersistentMessage) handle.resolve();
                         if ((msg.getExpiryTime() != 0) &&
                             (msg.getExpiryTime() <= now)) {
                             session.deleteObject(msg);
@@ -1520,27 +1526,31 @@
                         session.acquireLock(vector, MAX_WAIT_TIME);
                         Enumeration entries = vector.elements();
                         Vector to_remove = new Vector();
-
+						PersistentString entry =
null;
+						String name = null;
+						PMDVector handles_vector =
null;
+						Enumeration handles = null;
+						PersistentMessageHandle
handle = null;
                         while (entries.hasMoreElements()) {
                             to_remove.clear();
-                            PersistentString entry = (PersistentString)
entries.nextElement();
-                            String name =
getHandlesRootNameFromDestination(
+                            entry = (PersistentString)
entries.nextElement();
+                            name = getHandlesRootNameFromDestination(
                                 entry.toString());
                             if (name == null) {
                                 continue;
                             }
 
                             // retrieve the handle tbale based on the name
-                            PMDVector handles_vector = handleTable(name,
session);
+                            handles_vector = handleTable(name, session);
                             if (handles_vector == null) {
                                 continue;
                             }
 
                             // we have the handle table. Now iterate over
all the
                             // messages and removed expired messages
-                            Enumeration handles =
handles_vector.elements();
+                            handles = handles_vector.elements();
                             while (handles.hasMoreElements()) {
-                                PersistentMessageHandle handle =
+                                handle =
                                     (PersistentMessageHandle)
handles.nextElement();
                                 if ((handle.getExpiryTime() != 0) &&
                                     (handle.getExpiryTime() <= now)) {
@@ -1588,10 +1598,10 @@
     }
 
     // implementation of PersistenceAdapter.getQueueMessageCount
-    public synchronized Vector getNonExpiredMessages(Connection connection,
+    public synchronized List getNonExpiredMessages(Connection connection,
                                                      JmsDestination
destination)
         throws PersistenceException {
-        Vector result = new Vector();
+        List result = new ArrayList(89);
 
         SessionIfc session = null;
         try {
@@ -1608,8 +1618,13 @@
                 try {
                     session.acquireLock(vector, MAX_WAIT_TIME);
                     Enumeration entries = vector.elements();
+					PersistentString entry = null;
+					String name = null;
+					Enumeration handles = null;
+					PMDVector handles_vector = null;
+					PersistentMessageHandle handle =
null;
                     while (entries.hasMoreElements()) {
-                        PersistentString entry = (PersistentString)
entries.nextElement();
+                        entry = (PersistentString) entries.nextElement();
 
                         // check to see if we are interested in this
destination
                         if (entry.toString().indexOf(destination.getName())
== -1) {
@@ -1618,23 +1633,23 @@
 
                         // attempt to retrieve the handle name table for
the specified
                         // destination,
-                        String name = getHandlesRootNameFromDestination(
+                        name = getHandlesRootNameFromDestination(
                             entry.toString());
                         if (name == null) {
                             continue;
                         }
 
-                        // retrieve the handle tbale based on the name
-                        PMDVector handles_vector = handleTable(name,
session);
+                        // retrieve the handle table based on the name
+                        handles_vector = handleTable(name, session);
                         if (handles_vector == null) {
                             continue;
                         }
 
                         // we have the handle table. Now iterate over all
the
                         // messages and removed expired messages
-                        Enumeration handles = handles_vector.elements();
+                        handles = handles_vector.elements();
                         while (handles.hasMoreElements()) {
-                            PersistentMessageHandle handle =
+                            handle =
                                 (PersistentMessageHandle)
handles.nextElement();
                             if ((handle.getExpiryTime() != 0) &&
                                 (handle.getExpiryTime() > now)) {
@@ -1664,13 +1679,13 @@
                 err.toString());
         }
 
-        return result;
+        return Collections.unmodifiableList(result);
     }
 
     // implementation of PersistenceAdapter.purgeMessages
     public synchronized int purgeMessages() {
         boolean errorSet = false;
-        Vector keep = new Vector();
+        List keep = new ArrayList(89);
         int count = -1;
 
         try {
@@ -1687,29 +1702,38 @@
                 try {
                     session.acquireLock(vector, MAX_WAIT_TIME);
                     Enumeration entries = vector.elements();
+					
+					
+					// preallocate needed objects to
save GC time by reusing temp objects
+					PersistentString entry = null;
+					String name = null;
+					PMDVector handles_vector = null;
+					Enumeration handles = null;
+					PersistentMessageHandle handle =
null;
+					String id = null;
                     while (entries.hasMoreElements()) {
-                        PersistentString entry = (PersistentString)
entries.nextElement();
+                        entry = (PersistentString) entries.nextElement();
 
                         // attempt to retrieve the handle name table for
the specified
                         // destination,
-                        String name = getHandlesRootNameFromDestination(
+                        name = getHandlesRootNameFromDestination(
                             entry.toString());
                         if (name == null) {
                             continue;
                         }
                         // retrieve the handle table based on the name
-                        PMDVector handles_vector = handleTable(name,
session);
+                        handles_vector = handleTable(name, session);
                         if (handles_vector == null) {
                             continue;
                         }
 
                         // we have the handle table. Now iterate over all
the
                         // messages and removed expired messages
-                        Enumeration handles = handles_vector.elements();
+                        handles = handles_vector.elements();
                         while (handles.hasMoreElements()) {
-                            PersistentMessageHandle handle =
+                            handle =
                                 (PersistentMessageHandle)
handles.nextElement();
-                            String id = handle.getMessageId().getId();
+                            id = handle.getMessageId().getId();
                             if (!keep.contains(id)) {
                                 keep.add(id);
                             }
@@ -1723,12 +1747,12 @@
                         try {
                             session.acquireLock(map, MAX_WAIT_TIME);
                             Enumeration iter = map.keys();
-                            Vector to_remove = new Vector();
+                            List to_remove = new ArrayList(89);
 
                             // collect a list of messages that have expired
so that
                             // they can be deleted later
                             while (iter.hasMoreElements()) {
-                                String id = (String) iter.nextElement();
+                                id = (String) iter.nextElement();
                                 if (!keep.contains(id)) {
 
session.deleteObject((PersistentMessage)
                                         ((PMDHandle)
map.get(id)).resolve());
Index: org/exolab/jms/persistence/PersistenceAdapter.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/PersistenceAdap
ter.java,v
retrieving revision 1.39
diff -u -r1.39 PersistenceAdapter.java
--- org/exolab/jms/persistence/PersistenceAdapter.java	17 Aug 2003 01:32:25
-0000	1.39
+++ org/exolab/jms/persistence/PersistenceAdapter.java	14 Apr 2004 17:30:59
-0000
@@ -51,6 +51,8 @@
 import java.sql.Connection;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -167,7 +169,7 @@
      * @return Vector - collection of unexpired message handles
      * @throws PersistenceException
      */
-    public abstract Vector getNonExpiredMessages(Connection connection,
+    public abstract List getNonExpiredMessages(Connection connection,
                                                  JmsDestination
destination)
         throws PersistenceException;
 
@@ -191,10 +193,10 @@
      *
      * @param connection - the connection to use
      * @param handle - the persistent handle to resolve
-     * @return Vector - a vector of MessageImpl
+     * @return List - a list of MessageImpl
      * @throws PersistenceException
      */
-    public abstract Vector getMessages(Connection connection,
+    public abstract List getMessages(Connection connection,
                                        PersistentMessageHandle handle)
         throws PersistenceException;
 
@@ -203,10 +205,10 @@
      * been stored in the database but not processed.
      *
      * @param connection - the connection to use
-     * @return Vector - a collection of un processed messages
+     * @return List - a collection of un processed messages
      * @throws PersistenceException
      */
-    public abstract Vector getUnprocessedMessages(Connection connection)
+    public abstract List getUnprocessedMessages(Connection connection)
         throws PersistenceException;
 
     /**
@@ -256,7 +258,7 @@
      * @param name - the consumer name
      * @throws PersistenceException
      */
-    public abstract Vector getMessageHandles(Connection connection,
+    public abstract List getMessageHandles(Connection connection,
                                              JmsDestination destination,
String name)
         throws PersistenceException;
 
@@ -301,7 +303,7 @@
      *
      * @param connection - the connection to use
      * @param topic - the topic to query
-     * @return Vector - list of durable subscriber names
+     * @return Iterator - list of durable subscriber names
      * @throws PersistenceException
      */
     public abstract Enumeration getDurableConsumers(Connection connection,
Index: org/exolab/jms/persistence/RDBMSAdapter.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/RDBMSAdapter.ja
va,v
retrieving revision 1.54
diff -u -r1.54 RDBMSAdapter.java
--- org/exolab/jms/persistence/RDBMSAdapter.java	8 Jan 2004 05:55:07
-0000	1.54
+++ org/exolab/jms/persistence/RDBMSAdapter.java	14 Apr 2004 17:31:00
-0000
@@ -54,6 +54,8 @@
 import java.sql.SQLException;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import EDU.oswego.cs.dl.util.concurrent.FIFOReadWriteLock;
@@ -268,11 +270,11 @@
         PreparedStatement insert = null;
         try {
             query = connection.prepareStatement(
-                "select * from message_id where id = 1");
+                "select maxid from message_id where id = 1");
             result = query.executeQuery();
 
             if (result.next()) {
-                lastId = result.getInt("maxId");
+                lastId = result.getInt(1);
             } else {
                 // first entry create.
                 insert = connection.prepareStatement(
@@ -362,7 +364,7 @@
     }
 
     // implementation of PersistenceAdapter.getUnprocessedMessages
-    public Vector getUnprocessedMessages(Connection connection)
+    public List getUnprocessedMessages(Connection connection)
         throws PersistenceException {
         long start = 0;
         if (_log.isDebugEnabled()) {
@@ -420,7 +422,7 @@
     }
 
     // implementation of PersistenceAdapter.getMessages
-    public Vector getMessages(Connection connection,
PersistentMessageHandle handle)
+    public List getMessages(Connection connection, PersistentMessageHandle
handle)
         throws PersistenceException {
         long start = 0;
         if (_log.isDebugEnabled()) {
@@ -505,7 +507,7 @@
     }
 
     // implementation of PersistenceAdapter.getMessageHandles
-    public Vector getMessageHandles(Connection connection,
+    public List getMessageHandles(Connection connection,
                                     JmsDestination destination, String
name)
         throws PersistenceException {
         long start = 0;
@@ -666,7 +668,7 @@
     }
 
     // implementation of PersistenceAdapter.getNonExpiredMessages
-    public Vector getNonExpiredMessages(Connection connection,
+    public List getNonExpiredMessages(Connection connection,
                                         JmsDestination destination)
         throws PersistenceException {
 
@@ -873,10 +875,10 @@
         ResultSet result = null;
         try {
             query = connection.prepareStatement(
-                "select * from system_data where id = 1");
+                "select version from system_data where id = 1");
             result = query.executeQuery();
             if (result.next()) {
-                version = result.getString("version");
+                version = result.getString(1);
             }
         } catch (SQLException exception) {
             throw new PersistenceException(
@@ -901,7 +903,7 @@
         PreparedStatement insert = null;
         try {
             insert = connection.prepareStatement(
-                "insert into system_data values (?,?,?)");
+                "insert into system_data (id, version, creationdate) values
(?,?,?)");
             insert.setInt(1, 1);
             insert.setString(2, SCHEMA_VERSION);
             insert.setDate(3, new Date(System.currentTimeMillis()));
Index: org/exolab/jms/persistence/SQLHelper.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/SQLHelper.java,
v
retrieving revision 1.3
diff -u -r1.3 SQLHelper.java
--- org/exolab/jms/persistence/SQLHelper.java	8 Jul 2003 11:38:58 -0000
1.3
+++ org/exolab/jms/persistence/SQLHelper.java	14 Apr 2004 17:31:00 -0000
@@ -44,6 +44,9 @@
 package org.exolab.jms.persistence;
 
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -105,4 +108,27 @@
         }
         return closed;
     }
+
+	public static boolean close(InputStream is) {
+		boolean closed = false;
+		if (is != null) {
+				try {
+					is.close();
+					closed = true;
+				} catch (IOException ignore) {}
+		}
+		return closed;
+	}
+	public static boolean close(OutputStream os) {
+		boolean closed = false;
+		if (os != null) {
+				try {
+					os.close();
+					closed = true;
+				} catch (IOException ignore) {}
+		}
+		return closed;
+	}
+
 }
+
Index: org/exolab/jms/persistence/SeedGenerator.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/SeedGenerator.j
ava,v
retrieving revision 1.6
diff -u -r1.6 SeedGenerator.java
--- org/exolab/jms/persistence/SeedGenerator.java	11 Jan 2004 02:35:45
-0000	1.6
+++ org/exolab/jms/persistence/SeedGenerator.java	14 Apr 2004 17:31:00
-0000
@@ -121,12 +121,12 @@
         boolean successful = false;
         try {
             select = connection.prepareStatement(
-                "select * from seeds where name=?");
+                "select seed from seeds where name=?");
             select.setString(1, name);
 
             result = select.executeQuery();
             if (result.next()) {
-                value = result.getLong("seed");
+                value = result.getLong(1);
                 value++;
                 update = connection.prepareStatement(
                     "update seeds set seed=? where name=?");
@@ -136,7 +136,7 @@
             } else {
                 value = 1;
                 insert = connection.prepareStatement(
-                    "insert into seeds values (?,?)");
+                    "insert into seeds (name, seed) values (?,?)");
                 insert.setString(1, name);
                 insert.setLong(2, value);
                 insert.executeUpdate();
@@ -144,10 +144,10 @@
         } catch (Exception exception) {
             throw new PersistenceException("next " +
exception.getMessage());
         } finally {
-            SQLHelper.close(select);
-            SQLHelper.close(update);
-            SQLHelper.close(insert);
-            SQLHelper.close(result);
+                SQLHelper.close(select);
+                SQLHelper.close(update);
+                SQLHelper.close(insert);
+                SQLHelper.close(result);
         }
 
         return value;
Index: org/exolab/jms/persistence/Users.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/Users.java,v
retrieving revision 1.4
diff -u -r1.4 Users.java
--- org/exolab/jms/persistence/Users.java	8 Jan 2004 05:55:07 -0000
1.4
+++ org/exolab/jms/persistence/Users.java	14 Apr 2004 17:31:00 -0000
@@ -106,7 +106,8 @@
             synchronized (_block) {
                 if (_instance == null) {
                     _instance = new Users();
-                    _instance.load(connection);
+                  // call to load users does nothing, since loaded values
are just ignored. 
+                  //  _instance.load(connection);
                 }
             }
         }
@@ -127,7 +128,7 @@
         PreparedStatement insert = null;
         try {
             insert = connection.prepareStatement(
-                "insert into users values (?, ?)");
+                "insert into users (username,password) values (?, ?)");
             insert.setString(1, user.getUsername());
             insert.setString(2, user.getPassword());
             insert.executeUpdate();
@@ -217,7 +218,7 @@
         if (user != null) {
             try {
                 getUser = connection.prepareStatement(
-                    "select * from users where username=?");
+                    "select username,password  from users where
username=?");
                 getUser.setString(1, user.getUsername());
                 set = getUser.executeQuery();
                 if (set.next()) {
@@ -253,7 +254,7 @@
 
         try {
             getUsers = connection.prepareStatement(
-                "select * from users");
+                "select username,password  from users");
             set = getUsers.executeQuery();
             while (set.next()) {
                 user = new User(set.getString(1), set.getString(2));
@@ -290,12 +291,12 @@
         PreparedStatement select = null;
         ResultSet set = null;
         try {
-            select = connection.prepareStatement("select * from users");
+            select = connection.prepareStatement("select username,password
from users");
 
             set = select.executeQuery();
             while (set.next()) {
-                String name = set.getString("username");
-                String password = set.getString("password");
+                String name = set.getString(1);
+                String password = set.getString(2);
             }
         } catch (Exception error) {
             throw new PersistenceException("Error in Users.load "
Index: org/exolab/jms/server/AdminConnection.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/server/AdminConnection.java
,v
retrieving revision 1.2
diff -u -r1.2 AdminConnection.java
--- org/exolab/jms/server/AdminConnection.java	7 Aug 2003 13:33:08 -0000
1.2
+++ org/exolab/jms/server/AdminConnection.java	14 Apr 2004 17:31:00 -0000
@@ -46,7 +46,10 @@
 package org.exolab.jms.server;
 
 import java.sql.Connection;
+import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Vector;
 
 import javax.jms.JMSException;
@@ -299,11 +302,11 @@
      * topic destination.
      *
      * @param       topic               the topic name
-     * @return      Vector              collection of strings
+     * @return      List              collection of strings
      */
     public Vector getDurableConsumers(String topic) {
         Enumeration iter = null;
-        Vector result = new Vector();
+        Vector result = new Vector(89);
         Connection connection = null;
 
         try {
@@ -313,7 +316,7 @@
                 connection, topic);
             // copy the elements into the vector
             while (iter.hasMoreElements()) {
-                result.addElement(iter.nextElement());
+                result.add(iter.nextElement());
             }
             connection.commit();
         } catch (Exception exception) {
Index: org/exolab/jms/server/JmsServer.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/server/JmsServer.java,v
retrieving revision 1.48
diff -u -r1.48 JmsServer.java
--- org/exolab/jms/server/JmsServer.java	3 Jan 2004 04:00:56 -0000
1.48
+++ org/exolab/jms/server/JmsServer.java	14 Apr 2004 17:31:01 -0000
@@ -160,7 +160,7 @@
      * @throws ServerException if the server cannot be initialised
      */
     public void init() throws NamingException, ServerException {
-        // initialise the logger
+         // initialise the logger
         LoggerConfiguration log = _config.getLoggerConfiguration();
 
         // @todo - need to do this in main(), to allow pluggable log
factories
Index: org/exolab/jms/tools/db/SchemaHelper.java
===================================================================
RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/tools/db/SchemaHelper.java,
v
retrieving revision 1.2
diff -u -r1.2 SchemaHelper.java
--- org/exolab/jms/tools/db/SchemaHelper.java	7 Aug 2003 13:33:11 -0000
1.2
+++ org/exolab/jms/tools/db/SchemaHelper.java	14 Apr 2004 17:31:01 -0000
@@ -54,6 +54,7 @@
 import org.exolab.castor.xml.MarshalException;
 import org.exolab.castor.xml.ValidationException;
 import org.exolab.jms.persistence.PersistenceException;
+import org.exolab.jms.persistence.SQLHelper;
 
 
 /**
@@ -81,37 +82,42 @@
         throws PersistenceException {
 
         String version = null;
-
+		PreparedStatement query = null;
+		ResultSet result = null;
         try {
-            PreparedStatement query = connection.prepareStatement(
-                "select * from system_data where id = 1");
-            ResultSet result = query.executeQuery();
+            query = connection.prepareStatement(
+                "select version from system_data where id = 1");
+            result = query.executeQuery();
             if (result.next()) {
-                version = result.getString("version");
+                version = result.getString(1);
             }
-            query.close();
-            result.close();
         } catch (SQLException exception) {
             throw new PersistenceException(
                 "Failed to get the schema version", exception);
+        } finally{
+        	SQLHelper.close(result);
+        	SQLHelper.close(query);
         }
         return version;
     }
 
     public static void setVersion(Connection connection, String version)
         throws PersistenceException {
+		PreparedStatement update = null;
         try {
-            PreparedStatement update = connection.prepareStatement(
+            update = connection.prepareStatement(
                 "update system_data set version=? where id = 1");
             update.setString(1, version);
             if (update.executeUpdate() != 1) {
                 throw new PersistenceException(
                     "Failed to update system_data.version");
             }
-            update.close();
+            
         } catch (SQLException exception) {
             throw new PersistenceException(
                 "Failed to update system_data.version", exception);
+        }finally{
+        	SQLHelper.close(update);
         }
     }
 
Index: src/main/org/exolab/jms/persistence/BatchingRdbmsAdapter.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/BatchingRdbmsAdapter.patch
diff -N src/main/org/exolab/jms/persistence/BatchingRdbmsAdapter.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/BatchingRdbmsAdapter.patch	1
Jan 1970 00:00:00 -0000
@@ -0,0 +1,20 @@
+Index: BatchingRdbmsAdapter.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/BatchingRdbmsAd
apter.java,v
+retrieving revision 1.10
+diff -u -w -i -b -r1.10 BatchingRdbmsAdapter.java
+--- BatchingRdbmsAdapter.java	28 Oct 2003 07:27:29 -0000	1.10
++++ BatchingRdbmsAdapter.java	5 Jan 2004 09:01:21 -0000
+@@ -482,11 +482,7 @@
+                     _messages.clear();
+                     _handles.clear();
+                 } catch (PersistenceException exception) {
+-                    try {
+-                        connection.rollback();
+-                    } catch (Exception ignore) {
+-                        // ignore
+-                    }
++                 	SQLHelper.rollback(connection);
+                     _log.error("Failure in flush()", exception);
+                 } catch (Exception exception) {
+                     _log.error("Failure in flush()", exception);
Index: src/main/org/exolab/jms/persistence/DatabaseService.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/DatabaseService.patch
diff -N src/main/org/exolab/jms/persistence/DatabaseService.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/DatabaseService.patch	1 Jan 1970
00:00:00 -0000
@@ -0,0 +1,36 @@
+Index: DatabaseService.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/DatabaseService
.java,v
+retrieving revision 1.12
+diff -u -w -i -b -r1.12 DatabaseService.java
+--- DatabaseService.java	28 Oct 2003 07:27:29 -0000	1.12
++++ DatabaseService.java	5 Jan 2004 09:00:00 -0000
+@@ -182,26 +182,14 @@
+             connection.commit();
+ 
+         } catch (PersistenceException exception) {
+-            if (connection != null) {
+-                try {
+-                    connection.rollback();
+-                } catch (Exception nested) {
+-                    // ignore
+-                }
+-            }
++         	SQLHelper.rollback(connection);
+             throw exception;
+         } catch (Exception exception) {
+             // rethrow as an appropriate exception
+             throw new ServiceException("Failed to start the
DatabaseService",
+                 exception);
+         } finally {
+-            if (connection != null) {
+-                try {
+-                    connection.close();
+-                } catch (Exception nested) {
+-                    // ignore
+-                }
+-            }
++          	SQLHelper.close(connection);
+         }
+     }
+ 
Index: src/main/org/exolab/jms/persistence/MessageHandles.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/MessageHandles.patch
diff -N src/main/org/exolab/jms/persistence/MessageHandles.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/MessageHandles.patch	1 Jan 1970
00:00:00 -0000
@@ -0,0 +1,126 @@
+Index: MessageHandles.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/MessageHandles.
java,v
+retrieving revision 1.29
+diff -u -w -i -b -r1.29 MessageHandles.java
+--- MessageHandles.java	28 Oct 2003 05:10:50 -0000	1.29
++++ MessageHandles.java	5 Jan 2004 08:59:18 -0000
+@@ -305,6 +305,7 @@
+ 
+         PreparedStatement delete = null;
+         PreparedStatement select = null;
++		ResultSet rs = null;
+ 
+         try {
+             // first check to see that the consumer exists and only
+@@ -348,7 +349,7 @@
+                 // then delete the corresponding message from the message
table
+                 select =
connection.prepareStatement(GET_MSG_HANDLE_COUNT);
+                 select.setString(1, id);
+-                ResultSet rs = select.executeQuery();
++                rs = select.executeQuery();
+                 if (rs.next() && (rs.getInt(1) == 0)) {
+                     delete.close();
+                     delete = connection.prepareStatement(DELETE_MESSAGE);
+@@ -365,13 +366,13 @@
+                     }
+                 }
+ 
+-                // close the result set
+-                SQLHelper.close(rs);
++            
+             }
+         } catch (SQLException exception) {
+             throw new PersistenceException("Failed to remove message
handle=" +
+                 handle, exception);
+         } finally {
++			SQLHelper.close(rs);
+             SQLHelper.close(delete);
+             SQLHelper.close(select);
+         }
+@@ -521,6 +522,7 @@
+ 
+         Vector result = new Vector();
+         PreparedStatement select = null;
++		ResultSet set = null;
+ 
+         // if the consumer and/or destination cannot be mapped then
+         // return an empty vector
+@@ -539,7 +541,7 @@
+ 
+             // iterate through the result set and construct the
corresponding
+             // PersistentMessageHandles
+-            ResultSet set = select.executeQuery();
++            set = select.executeQuery();
+             while (set.next()) {
+                 // Attempt to retrieve the corresponding destination
+                 JmsDestination dest = Destinations.instance().get(
+@@ -570,12 +572,13 @@
+                 result.add(handle);
+             }
+ 
+-            SQLHelper.close(set);
++            
+         } catch (SQLException exception) {
+             throw new PersistenceException(
+                 "Failed to get message handles for destination=" +
+                 destination + ", consumer=" + name, exception);
+         } finally {
++			SQLHelper.close(set);
+             SQLHelper.close(select);
+         }
+ 
+@@ -597,6 +600,7 @@
+ 
+         Vector result = new Vector();
+         PreparedStatement select = null;
++		ResultSet set = null;
+ 
+         try {
+             select =
connection.prepareStatement(GET_MESSAGE_HANDLES_IN_RANGE);
+@@ -605,16 +609,17 @@
+ 
+             // iterate through the result set and construct the
corresponding
+             // PersistentMessageHandles
+-            ResultSet set = select.executeQuery();
++            set = select.executeQuery();
+             while (set.next()) {
+                 result.add(set.getString(1));
+             }
+ 
+-            SQLHelper.close(set);
++           
+         } catch (SQLException exception) {
+             throw new PersistenceException("Failed to retrieve message
ids",
+                 exception);
+         } finally {
++			SQLHelper.close(set);
+             SQLHelper.close(select);
+         }
+ 
+@@ -635,21 +640,23 @@
+ 
+         boolean result = false;
+         PreparedStatement select = null;
++		ResultSet set = null;
+ 
+         try {
+             select =
connection.prepareStatement(GET_MESSAGE_HANDLE_WITH_ID);
+             select.setLong(1, messageId);
+-            ResultSet set = select.executeQuery();
++            set = select.executeQuery();
+ 
+             if (set.next()) {
+                 result = true;
+             }
+-            SQLHelper.close(set);
++            
+         } catch (SQLException exception) {
+             throw new PersistenceException(
+                 "Failed to determine if message exists, id=" + messageId,
+                 exception);
+         } finally {
++			SQLHelper.close(set);
+             SQLHelper.close(select);
+         }
+         return result;
Index: src/main/org/exolab/jms/persistence/Messages.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/Messages.patch
diff -N src/main/org/exolab/jms/persistence/Messages.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/Messages.patch	1 Jan 1970 00:00:00
-0000
@@ -0,0 +1,15 @@
+Index: Messages.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/Messages.java,v
+retrieving revision 1.23
+diff -u -w -i -b -r1.23 Messages.java
+--- Messages.java	9 Oct 2003 12:31:25 -0000	1.23
++++ Messages.java	5 Jan 2004 08:57:58 -0000
+@@ -579,6 +579,7 @@
+                 "delete from messages where expiryTime > 0 and expiryTime
< ?");
+             delete.setLong(1, time);
+             delete.executeUpdate();
++			delete.close();
+ 
+             // delete the message handles
+             delete = connection.prepareStatement(
Index: src/main/org/exolab/jms/persistence/RDBMSAdapter.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/RDBMSAdapter.patch
diff -N src/main/org/exolab/jms/persistence/RDBMSAdapter.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/RDBMSAdapter.patch	1 Jan 1970
00:00:00 -0000
@@ -0,0 +1,189 @@
+Index: RDBMSAdapter.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/RDBMSAdapter.ja
va,v
+retrieving revision 1.53
+diff -u -w -i -b -r1.53 RDBMSAdapter.java
+--- RDBMSAdapter.java	28 Oct 2003 07:27:29 -0000	1.53
++++ RDBMSAdapter.java	5 Jan 2004 08:48:27 -0000
+@@ -54,36 +54,25 @@
+ import java.sql.SQLException;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+-import java.util.Iterator;
+ import java.util.Vector;
+ 
+-import javax.jms.JMSException;
+-import javax.sql.ConnectionPoolDataSource;
+-import javax.sql.DataSource;
+-import javax.transaction.Transaction;
+-import javax.transaction.TransactionManager;
+-
+ import org.apache.commons.logging.Log;
+ import org.apache.commons.logging.LogFactory;
+-
+-import EDU.oswego.cs.dl.util.concurrent.FIFOReadWriteLock;
+-import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
+ import org.exolab.core.foundation.HandleIfc;
+ import org.exolab.jms.authentication.User;
+ import org.exolab.jms.client.JmsDestination;
+ import org.exolab.jms.client.JmsQueue;
+ import org.exolab.jms.client.JmsTopic;
+-import org.exolab.jms.config.Configuration;
+ import org.exolab.jms.config.ConfigurationManager;
+ import org.exolab.jms.config.DatabaseConfiguration;
+ import org.exolab.jms.config.RdbmsDatabaseConfiguration;
+-import org.exolab.jms.events.BasicEventManager;
+-import org.exolab.jms.events.Event;
+ import org.exolab.jms.events.EventHandler;
+-import org.exolab.jms.events.IllegalEventDefinedException;
+ import org.exolab.jms.message.MessageImpl;
+ import org.exolab.jms.messagemgr.PersistentMessageHandle;
+ 
++import EDU.oswego.cs.dl.util.concurrent.FIFOReadWriteLock;
++import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
++
+ 
+ /**
+  * This adapter is a wrapper class around the persistency mechanism.
+@@ -208,24 +197,14 @@
+             connection.commit();
+             Users.initialise(connection);
+         } catch (PersistenceException exception) {
+-            // rollback and rethrow the exception
+-            if (connection != null) {
+-                try {
+-                    connection.rollback();
+-                } catch (Exception ignore) {
+-                }
+-            }
++            	SQLHelper.rollback(connection);
+             throw exception;
+         } catch (Exception exception) {
+             throw new PersistenceException(
+                 "Failed to initialise database adapter", exception);
+         } finally {
+-            if (connection != null) {
+-                try {
+-                    connection.close();
+-                } catch (Exception ignore) {
+-                }
+-            }
++            SQLHelper.close(connection);
++            
+         }
+ 
+         // check whether we should initiate automatic garbage collection
+@@ -283,28 +262,33 @@
+ 
+         long lastId = -1;
+         boolean successful = false;
+-
++		PreparedStatement query = null;
++		ResultSet result = null;
++		PreparedStatement insert = null;
+         try {
+-            PreparedStatement query = connection.prepareStatement(
++            query = connection.prepareStatement(
+                 "select * from message_id where id = 1");
+-            ResultSet result = query.executeQuery();
++            result = query.executeQuery();
+ 
+             if (result.next()) {
+                 lastId = result.getInt("maxId");
+             } else {
+                 // first entry create.
+-                PreparedStatement insert = connection.prepareStatement(
++                insert = connection.prepareStatement(
+                     "insert into message_id values (?,?)");
+                 insert.setInt(1, 1);
+                 insert.setLong(2, 0);
+                 insert.executeUpdate();
+                 lastId = 0;
+-                insert.close();
+             }
+-            query.close();
+         } catch (Exception exception) {
+             throw new PersistenceException("Failed to get last message
id",
+                 exception);
++        }finally{
++        	SQLHelper.close(result);
++        	SQLHelper.close(insert);
++			SQLHelper.close(query);
++        	
+         }
+ 
+         return lastId;
+@@ -313,18 +297,19 @@
+     // implementation of PersistenceAdapter.updateIds
+     public void updateIds(Connection connection, long id)
+         throws PersistenceException {
+-
++		PreparedStatement insert = null;
+         try {
+-            PreparedStatement insert =
++            insert =
+                 connection.prepareStatement
+                 ("update message_id set maxId = ? where id = 1");
+ 
+             insert.setLong(1, id);
+             insert.executeUpdate();
+-            insert.close();
+         } catch (Exception exception) {
+             throw new PersistenceException("Failed to update message id",
+                 exception);
++        }finally{
++        	SQLHelper.close(insert);
+         }
+     }
+ 
+@@ -885,19 +870,22 @@
+         throws PersistenceException {
+ 
+         String version = null;
+-
++		PreparedStatement query = null;
++		ResultSet result = null;
+         try {
+-            PreparedStatement query = connection.prepareStatement(
++            query = connection.prepareStatement(
+                 "select * from system_data where id = 1");
+-            ResultSet result = query.executeQuery();
++            result = query.executeQuery();
+             if (result.next()) {
+                 version = result.getString("version");
+             }
+-            query.close();
+-            result.close();
+         } catch (SQLException exception) {
+             throw new PersistenceException(
+                 "Failed to get the schema version", exception);
++        } finally{
++        	SQLHelper.close(result);
++			SQLHelper.close(query);
++        	
+         }
+         return version;
+     }
+@@ -911,17 +899,20 @@
+         throws PersistenceException {
+ 
+         _log.info("Initialising schema version " + SCHEMA_VERSION);
++		PreparedStatement insert = null;
+         try {
+-            PreparedStatement insert = connection.prepareStatement(
++            insert = connection.prepareStatement(
+                 "insert into system_data values (?,?,?)");
+             insert.setInt(1, 1);
+             insert.setString(2, SCHEMA_VERSION);
+             insert.setDate(3, new Date(System.currentTimeMillis()));
+             insert.executeUpdate();
+-            insert.close();
++            
+         } catch (SQLException exception) {
+             throw new PersistenceException(
+                 "Failed to initialise schema version", exception);
++        } finally{
++        	SQLHelper.close(insert);
+         }
+     }
+ 
Index: src/main/org/exolab/jms/persistence/SeedGenerator.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/SeedGenerator.patch
diff -N src/main/org/exolab/jms/persistence/SeedGenerator.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/SeedGenerator.patch	1 Jan 1970
00:00:00 -0000
@@ -0,0 +1,30 @@
+Index: SeedGenerator.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/SeedGenerator.j
ava,v
+retrieving revision 1.5
+diff -u -w -i -b -r1.5 SeedGenerator.java
+--- SeedGenerator.java	7 Aug 2003 13:33:07 -0000	1.5
++++ SeedGenerator.java	5 Jan 2004 08:50:17 -0000
+@@ -144,22 +144,11 @@
+         } catch (Exception exception) {
+             throw new PersistenceException("next " +
exception.getMessage());
+         } finally {
+-            if (select != null) {
+                 SQLHelper.close(select);
+-            }
+-
+-            if (update != null) {
+                 SQLHelper.close(update);
+-            }
+-
+-            if (insert != null) {
+                 SQLHelper.close(insert);
+-            }
+-
+-            if (result != null) {
+                 SQLHelper.close(result);
+             }
+-        }
+ 
+         return value;
+     }
Index: src/main/org/exolab/jms/persistence/Users.patch
===================================================================
RCS file: src/main/org/exolab/jms/persistence/Users.patch
diff -N src/main/org/exolab/jms/persistence/Users.patch
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/main/org/exolab/jms/persistence/Users.patch	1 Jan 1970 00:00:00
-0000
@@ -0,0 +1,38 @@
+Index: Users.java
+===================================================================
+RCS file:
/cvsroot/openjms/openjms/src/main/org/exolab/jms/persistence/Users.java,v
+retrieving revision 1.3
+diff -u -w -i -b -r1.3 Users.java
+--- Users.java	7 Aug 2003 13:33:07 -0000	1.3
++++ Users.java	5 Jan 2004 08:50:56 -0000
+@@ -227,6 +227,7 @@
+                 throw new PersistenceException("Users.remove failed "
+                     + error.toString());
+             } finally {
++                SQLHelper.close(set);
+                 SQLHelper.close(getUser);
+             }
+         }
+@@ -262,6 +263,7 @@
+             throw new PersistenceException("Users.remove failed "
+                 + error.toString());
+         } finally {
++           	SQLHelper.close(set);
+             SQLHelper.close(getUsers);
+         }
+ 
+@@ -300,13 +302,8 @@
+             throw new PersistenceException("Error in Users.load "
+                 + error.toString());
+         } finally {
+-            if (select != null) {
+-                SQLHelper.close(select);
+-            }
+-
+-            if (set != null) {
+                 SQLHelper.close(set);
+-            }
++                SQLHelper.close(select);
+         }
+     }
+ 


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.