[jboss-svn-commits] JBL Code SVN: r20263 - in labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product: rosetta/src/org/jboss/internal/soa/esb/util and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 3 05:22:45 EDT 2008


Author: kevin.conner at jboss.com
Date: 2008-06-03 05:22:44 -0400 (Tue, 03 Jun 2008)
New Revision: 20263

Modified:
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/StreamUtils.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/samples/quickstarts/helloworld_tx_sql_action/src/h2/create.sql
Log:
Add support for CLOB and BLOB: JBESB-1690

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java	2008-06-03 09:20:21 UTC (rev 20262)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java	2008-06-03 09:22:44 UTC (rev 20263)
@@ -24,6 +24,7 @@
 
 import org.apache.log4j.Logger;
 import org.jboss.internal.soa.esb.couriers.helpers.JDBCEprDBResourceFactory;
+import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.addressing.Call;
 import org.jboss.soa.esb.addressing.eprs.JDBCEpr;
 import org.jboss.soa.esb.common.TransactionStrategy;
@@ -34,13 +35,18 @@
 import org.jboss.soa.esb.message.util.Type;
 import org.jboss.soa.esb.util.Util;
 
+import java.io.Reader;
 import java.io.Serializable;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.sql.Blob;
+import java.sql.Clob;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.sql.Types;
 import java.util.UUID;
 
 public class SqlTableCourier implements PickUpOnlyCourier, DeliverOnlyCourier
@@ -284,6 +290,8 @@
             selectUpdateStatement.setString(2, State.Pending.getColumnValue());
 
             ResultSet resultSet = selectUpdateStatement.executeQuery();
+            final ResultSetMetaData metaData = resultSet.getMetaData() ;
+            final int type = metaData.getColumnType(1) ;
             try
             {
                 if (resultSet.next())
@@ -292,8 +300,22 @@
 
                     try
                     {
-                        Serializable blob = (Serializable) resultSet.getObject(1);
-                        result = Util.deserialize(blob);
+                        final Serializable value ;
+                        if (type == Types.BLOB)
+                        {
+                            final Blob blob = resultSet.getBlob(1) ;
+                            value = StreamUtils.readStreamString(blob.getBinaryStream(), "UTF-8");
+                        }
+                        else if (type == Types.CLOB)
+                        {
+                            final Clob clob = resultSet.getClob(1) ;
+                            value = StreamUtils.readReader(clob.getCharacterStream());
+                        }
+                        else
+                        {
+                            value = (Serializable) resultSet.getObject(1);
+                        }
+                        result = Util.deserialize(value);
                     }
                     catch (Exception e)
                     {

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/StreamUtils.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/StreamUtils.java	2008-06-03 09:20:21 UTC (rev 20262)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/StreamUtils.java	2008-06-03 09:22:44 UTC (rev 20263)
@@ -61,6 +61,31 @@
 		
 		return outBuffer.toByteArray();
 	}
+	
+       /**
+         * Read the supplied Reader and return as a string.
+         * @param reader The reader to read.
+         * @return The reader contents as a string.
+         */
+        public static String readReader(Reader reader) {
+                if(reader == null) {
+                        throw new IllegalArgumentException("null 'reader' arg passed in method call.");
+                }
+                
+                StringWriter outBuffer = new StringWriter();
+                char[] buffer = new char[256];
+                int readCount = 0;
+                
+                try {
+                        while((readCount = reader.read(buffer)) != -1) {
+                                outBuffer.write(buffer, 0, readCount);
+                        }
+                } catch (IOException e) {
+                        throw new IllegalStateException("Error reading reader.", e);
+                }               
+                
+                return outBuffer.toString();
+        }
 
     public static String readStreamString(InputStream stream, String charset) throws UnsupportedEncodingException {
         return new String(StreamUtils.readStream(stream), charset);

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2008-06-03 09:20:21 UTC (rev 20262)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2008-06-03 09:22:44 UTC (rev 20263)
@@ -26,10 +26,13 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.sql.Blob;
+import java.sql.Clob;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -45,6 +48,7 @@
 import javax.sql.DataSource;
 
 import org.apache.log4j.Logger;
+import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.addressing.eprs.JDBCEpr;
@@ -479,8 +483,18 @@
                 Map<String, Object> row = new HashMap<String, Object>();
                 for (int iCurr = 1; iCurr <= meta.getColumnCount(); iCurr++) {
                     String sCol = meta.getColumnName(iCurr);
-                    if (!_inProcessField.equalsIgnoreCase(sCol))
-                        row.put(sCol, RS.getObject(iCurr));
+                    if (!_inProcessField.equalsIgnoreCase(sCol)) {
+                        final int type = meta.getColumnType(iCurr) ;
+                        if (type == Types.BLOB) {
+                            final Blob blob = RS.getBlob(iCurr) ;
+                            row.put(sCol, StreamUtils.readStreamString(blob.getBinaryStream(), "UTF-8"));
+                        } else if (type == Types.CLOB) {
+                            final Clob clob = RS.getClob(iCurr) ;
+                            row.put(sCol, StreamUtils.readReader(clob.getCharacterStream()));
+                        } else {
+                            row.put(sCol, RS.getObject(iCurr));
+                        }
+                    }
                 }
 
                 oResults.add(row);
@@ -601,37 +615,6 @@
     } // ________________________________
 
     /**
-     * Assemble the SQL "select for update" statement for the
-     * "inProcessField" parameter
-     * <p/>
-     * in the table row uniquely identified by the list of fields in the
-     * "keyFields" parameter
-     *
-     * @return - The resulting SQL statement
-     */
-    protected String selectForUpdStatement() {
-        StringBuilder sb = new StringBuilder().append("select ").append(
-                _inProcessField).append(" from ").append(_tableName).append(
-                " where ");
-        int iCurr = 0;
-        for (String sCurr : _keys) {
-            if (iCurr++ > 0)
-                sb.append(" and ");
-            sb.append(sCurr).append(" = ?");
-        }
-
-        /*
-        * HS QL does not support FOR UPDATE! All tables appear to be inherently
-        * updatable!
-        */
-
-        if (_driver.contains("hsqldb"))
-            return sb.toString();
-        else
-            return sb.append(" for update").toString();
-    } // ________________________________
-
-    /**
      * Assemble the SQL statement to delete the current row in the table row
      * uniquely identified by the list of fields in the "keyFields"
      * parameter
@@ -659,13 +642,13 @@
         try {
             int iParm = 1;
             for (String sColName : _keys) {
-            	String val = null;
+            	final Object val ;
             	if (_currentRow.containsKey(sColName)) {
-                    val = String.valueOf(_currentRow.get(sColName));            		
+                    val = _currentRow.get(sColName);
             	} else {
-                    val = String.valueOf(_upperCurrentRow.get(sColName));
+                    val = _upperCurrentRow.get(sColName.toUpperCase());
             	}
-                _PSdeleteRow.setString(iParm++, val);
+                _PSdeleteRow.setObject(iParm++, val);
             }
 
             try {
@@ -740,9 +723,9 @@
             for (String sColName : _keys) {
             	Object oVal = null;
             	if (_currentRow.containsKey(sColName)) {
-            		oVal = String.valueOf(_currentRow.get(sColName.toUpperCase()));
+            		oVal = _currentRow.get(sColName);
             	} else {
-            		oVal = String.valueOf(_upperCurrentRow.get(sColName.toUpperCase()));
+            		oVal = _upperCurrentRow.get(sColName.toUpperCase());
             	}
             	
                 _PSupdate.setObject(iParm++, oVal);

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/samples/quickstarts/helloworld_tx_sql_action/src/h2/create.sql
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/samples/quickstarts/helloworld_tx_sql_action/src/h2/create.sql	2008-06-03 09:20:21 UTC (rev 20262)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/samples/quickstarts/helloworld_tx_sql_action/src/h2/create.sql	2008-06-03 09:22:44 UTC (rev 20263)
@@ -9,7 +9,7 @@
 CREATE TABLE TX_ESB_MESSAGES
 (
 message_id VARCHAR(255) NOT NULL,
-data_column VARCHAR(6055) NOT NULL,
+data_column CLOB NOT NULL,
 status_col VARCHAR(255) NOT NULL,
 timestamp_col VARCHAR(255)
 );




More information about the jboss-svn-commits mailing list