[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