You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by as...@apache.org on 2007/09/28 11:39:51 UTC

svn commit: r580270 - in /webservices/synapse/trunk/java: ./ modules/core/src/main/java/org/apache/synapse/config/xml/ modules/core/src/main/java/org/apache/synapse/mediators/db/ modules/core/src/test/java/org/apache/synapse/config/xml/ modules/core/sr...

Author: asankha
Date: Fri Sep 28 02:39:50 2007
New Revision: 580270

URL: http://svn.apache.org/viewvc?rev=580270&view=rev
Log:
add unit tests for serialization and mediator functionality of the DB mediators and finish up the DB mediators

Added:
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/DBLookupMediatorSerializationTest.java
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/AbstractMediatorTestCase.java
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBLookupMediatorTest.java
    webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBReportMediatorTest.java
Modified:
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java
    webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/Statement.java
    webservices/synapse/trunk/java/pom.xml

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java Fri Sep 28 02:39:50 2007
@@ -31,28 +31,41 @@
 import org.jaxen.JaxenException;
 
 import javax.xml.namespace.QName;
+import javax.sql.DataSource;
+import javax.naming.InitialContext;
+import javax.naming.Context;
+import javax.naming.NamingException;
 import java.sql.Connection;
 import java.util.Iterator;
+import java.util.Hashtable;
 
 /**
  * <dbreport | dblookup | .. etc>
  *   <connection>
  *     <pool>
+ *     (
  *       <driver/>
  *       <url/>
  *       <user/>
  *       <password/>
+ *     | 
+ *       <dsName/>
+ *       <icClass/>
+ *       <url/>
+ *       <user/>
+ *       <password/>
+ *     )
  *       <property name="name" value="value"/>*
  *     </pool>
  *   </connection>
  *   <statement>
- *     <sql>insert into table values (?, ?, ..)</sql>
- *     <parameter [value="" | expression=""] type="INTEGER|VARCHAR"/>*
- *     <result name="string" column="int|string"/>*
+ *     <sql>insert into table values (?, ?, ..) OR select target from destinations where src = ?</sql>
+ *     <parameter (value="const" | expression="xpath") type="INTEGER|VARCHAR|..."/>*
+ *     <result name="propName" column="target | number"/>*
  *   </statement>+
  * </dbreport | dblookup | .. etc>
  *
- * Supported properties
+ * Supported properties for custom DataSources
  * autocommit = true | false
  * isolation = Connection.TRANSACTION_NONE
  *           | Connection.TRANSACTION_READ_COMMITTED
@@ -78,6 +91,9 @@
     static final QName USER_Q     = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "user");
     static final QName PASS_Q     = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "password");
 
+    static final QName DSNAME_Q   = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "dsName");
+    static final QName ICCLASS_Q  = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "icClass");
+
     static final QName STMNT_Q    = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "statement");
     static final QName SQL_Q      = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "sql");
     static final QName PARAM_Q    = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "parameter");
@@ -88,110 +104,178 @@
 
     protected void buildDataSource(OMElement elem, AbstractDBMediator mediator) {
 
-        BasicDataSource ds = new BasicDataSource();
-
+        OMElement pool = null;
+        // get the 'pool' element and determine if we need to create a DataSource or
+        // look up using JNDI
         try {
             AXIOMXPath xpath = new AXIOMXPath("//syn:connection/syn:pool");
             xpath.addNamespace("syn", XMLConfigConstants.SYNAPSE_NAMESPACE);
-            OMElement pool = (OMElement) xpath.selectSingleNode(elem);
+            pool = (OMElement) xpath.selectSingleNode(elem);
 
-            // load the minimum required properties
-            ds.setDriverClassName(getValue(pool, DRIVER_Q));
-            ds.setUsername(getValue(pool, USER_Q));
-            ds.setPassword(getValue(pool, PASS_Q));
-            ds.setUrl(getValue(pool, URL_Q));
-
-            //save loaded properties for later
-            mediator.addDataSourceProperty(DRIVER_Q, getValue(pool, DRIVER_Q));
-            mediator.addDataSourceProperty(URL_Q,  getValue(pool, URL_Q));
-            mediator.addDataSourceProperty(USER_Q, getValue(pool, USER_Q));
-            mediator.addDataSourceProperty(PASS_Q, getValue(pool, PASS_Q));
-
-            Iterator props = pool.getChildrenWithName(PROP_Q);
-            while (props.hasNext()) {
-
-                OMElement prop = (OMElement) props.next();
-                String name  = prop.getAttribute(ATT_NAME).getAttributeValue();
-                String value = prop.getAttribute(ATT_VALUE).getAttributeValue();
-                // save property for later
-                mediator.addDataSourceProperty(name, value);
-
-                if ("autocommit".equals(name)) {
-                    if ("true".equals(value)) {
-                        ds.setDefaultAutoCommit(true);
-                    } else if ("false".equals(value)) {
-                        ds.setDefaultAutoCommit(false);
-                    }
-                } else if ("isolation".equals(name)) {
-                    try {
-                        if ("Connection.TRANSACTION_NONE".equals(value)) {
-                            ds.setDefaultTransactionIsolation(Connection.TRANSACTION_NONE);
-                        } else if ("Connection.TRANSACTION_READ_COMMITTED".equals(value)) {
-                            ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-                        } else if ("Connection.TRANSACTION_READ_UNCOMMITTED".equals(value)) {
-                            ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
-                        } else if ("Connection.TRANSACTION_REPEATABLE_READ".equals(value)) {
-                            ds.setDefaultTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
-                        } else if ("Connection.TRANSACTION_SERIALIZABLE".equals(value)) {
-                            ds.setDefaultTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
-                        }
-                    } catch (NumberFormatException ignore) {}
-                } else if ("initialsize".equals(name)) {
-                    try {
-                        ds.setInitialSize(Integer.parseInt(value));
-                    } catch (NumberFormatException ignore) {}
-                } else if ("maxactive".equals(name)) {
-                    try {
-                        ds.setMaxActive(Integer.parseInt(value));
-                    } catch (NumberFormatException ignore) {}
-                } else if ("maxidle".equals(name)) {
-                    try {
-                        ds.setMaxIdle(Integer.parseInt(value));
-                    } catch (NumberFormatException ignore) {}
-                } else if ("maxopenstatements".equals(name)) {
-                    try {
-                        ds.setMaxOpenPreparedStatements(Integer.parseInt(value));
-                    } catch (NumberFormatException ignore) {}
-                } else if ("maxwait".equals(name)) {
-                    try {
-                        ds.setMaxWait(Long.parseLong(value));
-                    } catch (NumberFormatException ignore) {}
-                } else if ("minidle".equals(name)) {
-                    try {
-                        ds.setMinIdle(Integer.parseInt(value));
-                    } catch (NumberFormatException ignore) {}
-                } else if ("poolstatements".equals(name)) {
-                    if ("true".equals(value)) {
-                        ds.setPoolPreparedStatements(true);
-                    } else if ("false".equals(value)) {
-                        ds.setPoolPreparedStatements(false);
-                    }
-                } else if ("testonborrow".equals(name)) {
-                    if ("true".equals(value)) {
-                        ds.setTestOnBorrow(true);
-                    } else if ("false".equals(value)) {
-                        ds.setTestOnBorrow(false);
-                    }
-                } else if ("testonreturn".equals(name)) {
-                    if ("true".equals(value)) {
-                        ds.setTestOnReturn(true);
-                    } else if ("false".equals(value)) {
-                        ds.setTestOnReturn(false);
-                    }
-                } else if ("testwhileidle".equals(name)) {
-                    if ("true".equals(value)) {
-                        ds.setTestWhileIdle(true);
-                    } else if ("false".equals(value)) {
-                        ds.setTestWhileIdle(false);
+            if (pool.getFirstChildWithName(DRIVER_Q) != null) {
+                mediator.setDataSource(createCustomDataSource(pool, mediator));
+
+            } else if (
+                pool.getFirstChildWithName(ICCLASS_Q) != null &&
+                pool.getFirstChildWithName(DSNAME_Q) != null) {
+                mediator.setDataSource(lookupDataSource(pool, mediator));
+            } else {
+                handleException("The DataSource connection information must be specified for " +
+                    "using a custom DataSource connection pool or for a JNDI lookup");
+            }
+
+        } catch (JaxenException e) {
+            handleException("Error looking up DataSource connection information", e);
+        }
+    }
+
+    /**
+     * Lookup the DataSource on JNDI using the specified properties
+     * @param pool the toplevel 'pool' element that holds DataSource information
+     * @param mediator the mediator to store properties for serialization
+     * @return a DataSource looked up using specified properties
+     */
+    private DataSource lookupDataSource(OMElement pool, AbstractDBMediator mediator) {
+
+        Hashtable props = new Hashtable();
+        // load the minimum required properties
+        props.put(Context.INITIAL_CONTEXT_FACTORY, (getValue(pool, ICCLASS_Q)));
+        props.put(Context.SECURITY_PRINCIPAL, getValue(pool, USER_Q));
+        props.put(Context.SECURITY_CREDENTIALS, getValue(pool, PASS_Q));
+        props.put(Context.PROVIDER_URL, getValue(pool, URL_Q));
+        String dsName = getValue(pool, DSNAME_Q);
+
+        //save loaded properties for later
+        mediator.addDataSourceProperty(ICCLASS_Q, getValue(pool, ICCLASS_Q));
+        mediator.addDataSourceProperty(DSNAME_Q,  getValue(pool, DSNAME_Q));
+        mediator.addDataSourceProperty(URL_Q,  getValue(pool, URL_Q));
+        mediator.addDataSourceProperty(USER_Q, getValue(pool, USER_Q));
+        mediator.addDataSourceProperty(PASS_Q, getValue(pool, PASS_Q));
+
+        try {
+            Context ctx = new InitialContext(props);
+            if (ctx != null) {
+                Object ds = ctx.lookup(dsName);
+                if (ds != null && ds instanceof DataSource) {
+                    return (DataSource) ds;
+                } else {
+                    handleException("DataSource : " + dsName + " not found when looking up" +
+                        " using JNDI properties : " + props);
+                }
+            } else {
+                handleException("Error getting InitialContext using JNDI properties : " + props);
+            }
+        } catch (NamingException e) {
+            handleException("Error looking up DataSource : " + dsName +
+                " using JNDI properties : " + props, e);
+        }
+        return null;
+    }
+
+    /**
+     * Create a custom DataSource using the specified properties and Apache DBCP
+     * @param pool the toplevel 'pool' element that holds DataSource information
+     * @param mediator the mediator to store properties for serialization
+     * @return a DataSource created using specified properties
+     */
+    private DataSource createCustomDataSource(OMElement pool, AbstractDBMediator mediator) {
+
+        BasicDataSource ds = new BasicDataSource();
+
+        // load the minimum required properties
+        ds.setDriverClassName(getValue(pool, DRIVER_Q));
+        ds.setUsername(getValue(pool, USER_Q));
+        ds.setPassword(getValue(pool, PASS_Q));
+        ds.setUrl(getValue(pool, URL_Q));
+
+        //save loaded properties for later
+        mediator.addDataSourceProperty(DRIVER_Q, getValue(pool, DRIVER_Q));
+        mediator.addDataSourceProperty(URL_Q,  getValue(pool, URL_Q));
+        mediator.addDataSourceProperty(USER_Q, getValue(pool, USER_Q));
+        mediator.addDataSourceProperty(PASS_Q, getValue(pool, PASS_Q));
+
+        Iterator props = pool.getChildrenWithName(PROP_Q);
+        while (props.hasNext()) {
+
+            OMElement prop = (OMElement) props.next();
+            String name  = prop.getAttribute(ATT_NAME).getAttributeValue();
+            String value = prop.getAttribute(ATT_VALUE).getAttributeValue();
+            // save property for later
+            mediator.addDataSourceProperty(name, value);
+
+            if ("autocommit".equals(name)) {
+                if ("true".equals(value)) {
+                    ds.setDefaultAutoCommit(true);
+                } else if ("false".equals(value)) {
+                    ds.setDefaultAutoCommit(false);
+                }
+            } else if ("isolation".equals(name)) {
+                try {
+                    if ("Connection.TRANSACTION_NONE".equals(value)) {
+                        ds.setDefaultTransactionIsolation(Connection.TRANSACTION_NONE);
+                    } else if ("Connection.TRANSACTION_READ_COMMITTED".equals(value)) {
+                        ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+                    } else if ("Connection.TRANSACTION_READ_UNCOMMITTED".equals(value)) {
+                        ds.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+                    } else if ("Connection.TRANSACTION_REPEATABLE_READ".equals(value)) {
+                        ds.setDefaultTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
+                    } else if ("Connection.TRANSACTION_SERIALIZABLE".equals(value)) {
+                        ds.setDefaultTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
                     }
-                } else if ("validationquery".equals(name)) {
-                    ds.setValidationQuery(value);
+                } catch (NumberFormatException ignore) {}
+            } else if ("initialsize".equals(name)) {
+                try {
+                    ds.setInitialSize(Integer.parseInt(value));
+                } catch (NumberFormatException ignore) {}
+            } else if ("maxactive".equals(name)) {
+                try {
+                    ds.setMaxActive(Integer.parseInt(value));
+                } catch (NumberFormatException ignore) {}
+            } else if ("maxidle".equals(name)) {
+                try {
+                    ds.setMaxIdle(Integer.parseInt(value));
+                } catch (NumberFormatException ignore) {}
+            } else if ("maxopenstatements".equals(name)) {
+                try {
+                    ds.setMaxOpenPreparedStatements(Integer.parseInt(value));
+                } catch (NumberFormatException ignore) {}
+            } else if ("maxwait".equals(name)) {
+                try {
+                    ds.setMaxWait(Long.parseLong(value));
+                } catch (NumberFormatException ignore) {}
+            } else if ("minidle".equals(name)) {
+                try {
+                    ds.setMinIdle(Integer.parseInt(value));
+                } catch (NumberFormatException ignore) {}
+            } else if ("poolstatements".equals(name)) {
+                if ("true".equals(value)) {
+                    ds.setPoolPreparedStatements(true);
+                } else if ("false".equals(value)) {
+                    ds.setPoolPreparedStatements(false);
+                }
+            } else if ("testonborrow".equals(name)) {
+                if ("true".equals(value)) {
+                    ds.setTestOnBorrow(true);
+                } else if ("false".equals(value)) {
+                    ds.setTestOnBorrow(false);
                 }
+            } else if ("testonreturn".equals(name)) {
+                if ("true".equals(value)) {
+                    ds.setTestOnReturn(true);
+                } else if ("false".equals(value)) {
+                    ds.setTestOnReturn(false);
+                }
+            } else if ("testwhileidle".equals(name)) {
+                if ("true".equals(value)) {
+                    ds.setTestWhileIdle(true);
+                } else if ("false".equals(value)) {
+                    ds.setTestWhileIdle(false);
+                }
+            } else if ("validationquery".equals(name)) {
+                ds.setValidationQuery(value);
             }
-        } catch (JaxenException e) {
-            handleException("DataSource connection information must be specified");
         }
-        mediator.setDataSource(ds);
+        return ds;
     }
 
     protected void processStatements(OMElement elem, AbstractDBMediator mediator) {

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorSerializer.java?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorSerializer.java Fri Sep 28 02:39:50 2007
@@ -34,17 +34,25 @@
  * <dbreport | dblookup | .. etc>
  *   <connection>
  *     <pool>
+ *     (
  *       <driver/>
  *       <url/>
  *       <user/>
  *       <password/>
+ *     |
+ *       <dsName/>
+ *       <icClass/>
+ *       <url/>
+ *       <user/>
+ *       <password/>
+ *     )
  *       <property name="name" value="value"/>*
  *     </pool>
  *   </connection>
  *   <statement>
- *     <sql>insert into table values (?, ?, ..)</sql>
- *     <parameter [value="" | expression=""] type="INTEGER|VARCHAR"/>*
- *     <result name="string" column="int|string"/>*
+ *     <sql>insert into table values (?, ?, ..) OR select target from destinations where src = ?</sql>
+ *     <parameter (value="const" | expression="xpath") type="INTEGER|VARCHAR|..."/>*
+ *     <result name="propName" column="target | number"/>*
  *   </statement>+
  * </dbreport | dblookup | .. etc>
  *
@@ -82,12 +90,13 @@
 
             if (o instanceof QName) {
                 QName name = (QName) o;
-                OMElement elt = fac.createOMElement(name);
+                OMElement elt = fac.createOMElement(name.getLocalPart(), synNS);
                 elt.setText(value);
                 poolElt.addChild(elt);
 
             } else if (o instanceof String) {
-                OMElement elt = fac.createOMElement(AbstractDBMediatorFactory.PROP_Q);
+                OMElement elt = fac.createOMElement(
+                    AbstractDBMediatorFactory.PROP_Q.getLocalPart(), synNS);
                 elt.addAttribute(fac.createOMAttribute("name", nullNS, (String) o));
                 elt.addAttribute(fac.createOMAttribute("value", nullNS, value));
                 poolElt.addChild(elt);
@@ -102,9 +111,11 @@
         while (statementIter.hasNext()) {
 
             Statement statement = (Statement) statementIter.next();
-            OMElement stmntElt = fac.createOMElement(AbstractDBMediatorFactory.STMNT_Q);
+            OMElement stmntElt = fac.createOMElement(
+                AbstractDBMediatorFactory.STMNT_Q.getLocalPart(), synNS);
 
-            OMElement sqlElt = fac.createOMElement(AbstractDBMediatorFactory.SQL_Q);
+            OMElement sqlElt = fac.createOMElement(
+                AbstractDBMediatorFactory.SQL_Q.getLocalPart(), synNS);
             sqlElt.setText(statement.getRawStatement());
             stmntElt.addChild(sqlElt);
 
@@ -112,7 +123,8 @@
             for (Iterator it = statement.getParameters().iterator(); it.hasNext(); ) {
 
                 Statement.Parameter param = (Statement.Parameter) it.next();
-                OMElement paramElt = fac.createOMElement(AbstractDBMediatorFactory.PARAM_Q);
+                OMElement paramElt = fac.createOMElement(
+                    AbstractDBMediatorFactory.PARAM_Q.getLocalPart(), synNS);
 
                 if (param.getPropertyName() != null) {
                     paramElt.addAttribute(
@@ -125,16 +137,74 @@
                 }
 
                 switch (param.getType()) {
+                    case Types.CHAR: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "CHAR"));
+                        break;
+                    }
                     case Types.VARCHAR: {
                         paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "VARCHAR"));
                         break;
                     }
+                    case Types.LONGVARCHAR: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "LONGVARCHAR"));
+                        break;
+                    }
+                    case Types.NUMERIC: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "NUMERIC"));
+                        break;
+                    }
+                    case Types.DECIMAL: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "DECIMAL"));
+                        break;
+                    }
+                    case Types.BIT: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "BIT"));
+                        break;
+                    }
+                    case Types.TINYINT: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "TINYINT"));
+                        break;
+                    }
+                    case Types.SMALLINT: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "SMALLINT"));
+                        break;
+                    }
                     case Types.INTEGER: {
                         paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "INTEGER"));
                         break;
                     }
-                    default:
-                        // TODO handle
+                    case Types.BIGINT: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "BIGINT"));
+                        break;
+                    }
+                    case Types.REAL: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "REAL"));
+                        break;
+                    }
+                    case Types.FLOAT: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "FLOAT"));
+                        break;
+                    }
+                    case Types.DOUBLE: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "DOUBLE"));
+                        break;
+                    }
+                    case Types.DATE: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "DATE"));
+                        break;
+                    }
+                    case Types.TIME: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "TIME"));
+                        break;
+                    }
+                    case Types.TIMESTAMP: {
+                        paramElt.addAttribute(fac.createOMAttribute("type", nullNS, "TIMESTAMP"));
+                        break;
+                    }
+                    default: {
+                        throw new SynapseException("Unknown or unsupported JDBC type : " +
+                            param.getType());                            
+                    }
                 }
 
                 stmntElt.addChild(paramElt);
@@ -146,10 +216,11 @@
                 String name = (String) it.next();
                 String columnStr = (String) statement.getResultsMap().get(name);
 
-                OMElement resultElt = fac.createOMElement(AbstractDBMediatorFactory.RESULT_Q);
+                OMElement resultElt = fac.createOMElement(
+                    AbstractDBMediatorFactory.RESULT_Q.getLocalPart(), synNS);
 
                 resultElt.addAttribute(
-                    fac.createOMAttribute("name", nullNS, columnStr));
+                    fac.createOMAttribute("name", nullNS, name));
                 resultElt.addAttribute(
                     fac.createOMAttribute("column", nullNS, columnStr));
 

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractMediatorSerializer.java Fri Sep 28 02:39:50 2007
@@ -44,7 +44,7 @@
             = fac.createOMNamespace(XMLConfigConstants.SYNAPSE_NAMESPACE, "syn");
     protected static final OMNamespace nullNS
             = fac.createOMNamespace(XMLConfigConstants.NULL_NAMESPACE, "");
-    protected static final QName PROP_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "property");
+    protected static final QName PROP_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "property", "syn");
 
     /**
      * A constructor that makes subclasses pick up the correct logger

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java Fri Sep 28 02:39:50 2007
@@ -63,13 +63,13 @@
      * Destroys the mediator. If we are using our custom DataSource, then shut down the connections
      */
     public void destroy() {
-        try {
-            if (getDataSource() instanceof BasicDataSource) {
+        if (getDataSource() instanceof BasicDataSource) {
+            try {
                 ((BasicDataSource) getDataSource()).close();
+                log.info("Successfully shut down DB connection pool for URL : " + getDSName());
+            } catch (SQLException e) {
+                log.warn("Error shutting down DB connection pool for URL : " + getDSName());
             }
-            log.info("Successfully shut down DB connection pool for URL : " + getDSName());
-        } catch (SQLException e) {
-            log.warn("Error shutting down DB connection pool for URL : " + getDSName());
         }
     }
 
@@ -175,7 +175,7 @@
 
             Statement.Parameter param = (Statement.Parameter) pi.next();
             String value = (param.getPropertyName() != null ?
-                (String) msgCtx.getProperty(param.getPropertyName()) :
+                param.getPropertyName() :
                 Axis2MessageContext.getStringValue(param.getXpath(), msgCtx));
 
             if (traceOrDebugOn) {
@@ -254,7 +254,7 @@
 
         if (traceOrDebugOn) {
             traceOrDebug(traceOn, "Successfully prepared statement : " + stmnt.getRawStatement() +
-                "against DataSource : " + getDSName());
+                " against DataSource : " + getDSName());
         }
         return ps;
     }

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java Fri Sep 28 02:39:50 2007
@@ -51,7 +51,7 @@
             }
         } catch (SQLException e) {
             handleException("Error execuring insert statement : " + stmnt.getRawStatement() +
-                "against DataSource : " + getDSName(), e, msgCtx);
+                " against DataSource : " + getDSName(), e, msgCtx);
         }
     }
 }

Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/Statement.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/Statement.java?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/Statement.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/Statement.java Fri Sep 28 02:39:50 2007
@@ -94,6 +94,8 @@
                 this.type = Types.BIGINT;
             } else if ("REAL".equals(type)) {
                 this.type = Types.REAL;
+            } else if ("FLOAT".equals(type)) {
+                this.type = Types.FLOAT;
             } else if ("DOUBLE".equals(type)) {
                 this.type = Types.DOUBLE;
             } else if ("DATE".equals(type)) {

Added: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/DBLookupMediatorSerializationTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/DBLookupMediatorSerializationTest.java?rev=580270&view=auto
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/DBLookupMediatorSerializationTest.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/DBLookupMediatorSerializationTest.java Fri Sep 28 02:39:50 2007
@@ -0,0 +1,74 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.synapse.config.xml;
+
+public class DBLookupMediatorSerializationTest extends AbstractTestCase {
+
+    DBLookupMediatorFactory dbLookupFactory;
+    DBLookupMediatorSerializer dbLookupSerializer;
+
+    public DBLookupMediatorSerializationTest() {
+        super(DBLookupMediatorSerializationTest.class.getName());
+        dbLookupFactory = new DBLookupMediatorFactory();
+        dbLookupSerializer = new DBLookupMediatorSerializer();
+    }
+
+    public void testClassMediatorSerializationSenarioOne() throws Exception {
+        String inputXml = 
+            "<syn:dblookup xmlns:syn=\"http://ws.apache.org/ns/synapse\"><syn:connection><syn:pool><syn:driver>com.some.driver.JDBCDriver</syn:driver><syn:url>jdbc:/some/url</syn:url><syn:user>user</syn:user><syn:password>pass</syn:password><syn:property name=\"name1\" value=\"value1\"/></syn:pool></syn:connection><syn:statement><syn:sql>insert into table values (?, ?, ..)</syn:sql><syn:parameter value=\"ABC\" type=\"VARCHAR\"/><syn:parameter expression=\"4\" type=\"INTEGER\"/><syn:result name=\"2\" column=\"int\"/></syn:statement></syn:dblookup>";
+        
+//            "<dblookup xmlns=\"http://ws.apache.org/ns/synapse\">\n" +
+//            "  <connection>\n" +
+//            "    <pool>\n" +
+//            "      <driver>com.some.driver.JDBCDriver</driver>\n" +
+//            "      <url>jdbc:/some/url</url>\n" +
+//            "      <user>user</user>\n" +
+//            "      <password>pass</password>\n" +
+//            "      <property name=\"name1\" value=\"value1\"/>\n" +
+//            "      <property name=\"name2\" value=\"value2\"/>\n" +
+//            "    </pool>\n" +
+//            "  </connection>\n" +
+//            "  <statement>\n" +
+//            "    <sql>insert into table values (?, ?, ..)</sql>\n" +
+//            "    <parameter value=\"ABC\" type=\"VARCHAR\"/>\n" +
+//            "    <parameter expression=\"4\" type=\"INTEGER\"/>\n" +
+//            "    <result name=\"res1\" column=\"String\"/>\n" +
+//            "    <result name=\"2\" column=\"int\"/>\n" +
+//            "  </statement>\n" +
+//            "</dblookup>";
+        assertTrue(serialization(inputXml, dbLookupFactory, dbLookupSerializer));
+        assertTrue(serialization(inputXml, dbLookupSerializer));
+    }
+
+/*
+    public void testClassMediatorSerializationWithProperty() throws Exception {
+        String inputXml = "<class xmlns=\"http://ws.apache.org/ns/synapse\" name=\"org.apache.synapse.config.xml.TestMediator\"><property name=\"testProp\" value=\"This is a test\"/></class> ";
+        assertTrue(serialization(inputXml, dbLookupFactory, dbLookupSerializer));
+        assertTrue(serialization(inputXml, dbLookupSerializer));
+    }
+
+    public void testClassMediatorSerializationWithInlineProperty() throws Exception {
+        String inputXml = "<class xmlns=\"http://ws.apache.org/ns/synapse\" name=\"org.apache.synapse.config.xml.TestMediator\"><property name=\"testElemProp\"><test/></property></class> ";
+        assertTrue(serialization(inputXml, dbLookupFactory, dbLookupSerializer));
+        assertTrue(serialization(inputXml, dbLookupSerializer));
+    }
+*/
+
+}

Added: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/AbstractMediatorTestCase.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/AbstractMediatorTestCase.java?rev=580270&view=auto
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/AbstractMediatorTestCase.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/AbstractMediatorTestCase.java Fri Sep 28 02:39:50 2007
@@ -0,0 +1,46 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.synapse.mediators;
+
+import junit.framework.TestCase;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import java.io.StringReader;
+
+public class AbstractMediatorTestCase extends TestCase {
+
+    protected static OMElement createOMElement(String xml) {
+        try {
+
+            XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xml));
+            StAXOMBuilder builder = new StAXOMBuilder(reader);
+            OMElement omElement = builder.getDocumentElement();
+            return omElement;
+
+        }
+        catch (XMLStreamException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBLookupMediatorTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBLookupMediatorTest.java?rev=580270&view=auto
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBLookupMediatorTest.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBLookupMediatorTest.java Fri Sep 28 02:39:50 2007
@@ -0,0 +1,100 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.synapse.mediators.db;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.config.xml.DBLookupMediatorFactory;
+import org.apache.synapse.mediators.AbstractMediatorTestCase;
+import org.apache.synapse.mediators.TestUtils;
+
+import java.sql.SQLException;
+
+public class DBLookupMediatorTest extends AbstractMediatorTestCase {
+
+    private static DBLookupMediator lookup;
+
+    public void testLookupMediator1() throws Exception {
+        MessageContext synCtx = TestUtils.getTestContext("<dummy><source>5</source></dummy>");
+        assertTrue(lookup.mediate(synCtx));
+        assertEquals(synCtx.getProperty("targetProp"), "svr1");
+        assertEquals(synCtx.getProperty("categoryProp"), "A");
+    }
+
+    public void testLookupMediator2() throws Exception {
+        MessageContext synCtx = TestUtils.getTestContext("<dummy><source>6</source></dummy>");
+        assertTrue(lookup.mediate(synCtx));
+        assertEquals(synCtx.getProperty("targetProp"), "svr3");
+        assertEquals(synCtx.getProperty("categoryProp"), "B");
+    }
+
+    public static Test suite() {
+        return new TestSetup(new TestSuite(DBLookupMediatorTest.class)) {
+
+            protected void setUp() throws Exception {
+
+                String tempPath = System.getProperty("java.io.tmpdir");
+
+                lookup = (DBLookupMediator)
+                    new DBLookupMediatorFactory().createMediator(createOMElement(
+                        "<dblookup xmlns=\"http://ws.apache.org/ns/synapse\">\n" +
+                            "  <connection>\n" +
+                            "    <pool>\n" +
+                            "      <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>\n" +
+                            "      <url>jdbc:derby:" + tempPath + "/derbyDB;create=true</url>\n" +
+                            "      <user>user</user>\n" +
+                            "      <password>pass</password>\n" +
+                            "      <property name=\"initialsize\" value=\"2\"/>\n" +
+                            "      <property name=\"isolation\" value=\"Connection.TRANSACTION_SERIALIZABLE\"/>\n" +
+                            "    </pool>\n" +
+                            "  </connection>\n" +
+                            "  <statement>\n" +
+                            "    <sql>select target, category from destinations where source = ? and type = ?</sql>\n" +
+                            "    <parameter expression=\"//source\" type=\"INTEGER\"/>\n" +
+                            "    <parameter value=\"GOLD\" type=\"VARCHAR\"/>\n" +
+                            "    <result name=\"targetProp\" column=\"target\"/>\n" +
+                            "    <result name=\"categoryProp\" column=\"2\"/>\n" +
+                            "  </statement>\n" +
+                            "</dblookup>"
+                    ));
+
+                java.sql.Statement s = lookup.getDataSource().getConnection().createStatement();
+                try {
+                    s.execute("drop table destinations");
+                } catch (SQLException ignore) {}
+                try {
+                    s.execute("create table destinations(target varchar(10), source int, type varchar(10), category varchar(10))");
+                } catch (SQLException ignore) {}
+                try {
+                    s.execute("insert into destinations values ('svr1', 5, 'GOLD', 'A')");
+                    s.execute("insert into destinations values ('svr2', 5, 'SILVER', 'A')");
+                    s.execute("insert into destinations values ('svr3', 6, 'GOLD', 'B')");
+                } catch (SQLException ignore) {}
+                s.close();
+            }
+
+            protected void tearDown() throws Exception {
+
+            }
+        };
+    }
+}

Added: webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBReportMediatorTest.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBReportMediatorTest.java?rev=580270&view=auto
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBReportMediatorTest.java (added)
+++ webservices/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/db/DBReportMediatorTest.java Fri Sep 28 02:39:50 2007
@@ -0,0 +1,100 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.synapse.mediators.db;
+
+import org.apache.synapse.mediators.AbstractMediatorTestCase;
+import org.apache.synapse.mediators.TestUtils;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.config.xml.DBReportMediatorFactory;
+import junit.framework.TestSuite;
+import junit.framework.Test;
+import junit.extensions.TestSetup;
+
+import java.sql.SQLException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+
+public class DBReportMediatorTest extends AbstractMediatorTestCase {    
+
+    private static DBReportMediator report;
+
+    public void testLookupMediator1() throws Exception {
+        MessageContext synCtx = TestUtils.getTestContext(
+            "<dummy><from>me</from><count>5</count><to>you</to><category>GOLD</category></dummy>");
+        assertTrue(report.mediate(synCtx));
+        Connection con = report.getDataSource().getConnection();
+        ResultSet rs = con.createStatement().executeQuery(
+            "select fromepr, cnt, toepr, category from audit");
+        if (rs.next()) {
+            assertEquals("me", rs.getString("fromepr"));
+            assertEquals(5, rs.getInt("cnt"));
+            assertEquals("you", rs.getString("toepr"));
+            assertEquals("GOLD", rs.getString("category"));
+        } else {
+            fail("DB report failed");
+        }
+    }
+
+    public static Test suite() {
+        return new TestSetup(new TestSuite(DBReportMediatorTest.class)) {
+
+            protected void setUp() throws Exception {
+
+                String tempPath = System.getProperty("java.io.tmpdir");
+
+                report = (DBReportMediator)
+                    new DBReportMediatorFactory().createMediator(createOMElement(
+                        "<dblookup xmlns=\"http://ws.apache.org/ns/synapse\">\n" +
+                            "  <connection>\n" +
+                            "    <pool>\n" +
+                            "      <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>\n" +
+                            "      <url>jdbc:derby:" + tempPath + "/derbyDB;create=true</url>\n" +
+                            "      <user>user</user>\n" +
+                            "      <password>pass</password>\n" +
+                            "      <property name=\"initialsize\" value=\"2\"/>\n" +
+                            "      <property name=\"isolation\" value=\"Connection.TRANSACTION_SERIALIZABLE\"/>\n" +
+                            "    </pool>\n" +
+                            "  </connection>\n" +
+                            "  <statement>\n" +
+                            "    <sql>insert into audit values(?, ?, ?, ?)</sql>\n" +
+                            "    <parameter expression=\"//from\" type=\"VARCHAR\"/>\n" +
+                            "    <parameter expression=\"//count\" type=\"INTEGER\"/>\n" +
+                            "    <parameter expression=\"//to\" type=\"VARCHAR\"/>\n" +
+                            "    <parameter value=\"GOLD\" type=\"VARCHAR\"/>\n" +
+                            "  </statement>\n" +
+                            "</dblookup>"
+                    ));
+
+                java.sql.Statement s = report.getDataSource().getConnection().createStatement();
+                try {
+                    s.execute("drop table audit");
+                } catch (SQLException ignore) {}
+                try {
+                    s.execute("create table audit(fromepr varchar(10), cnt int, toepr varchar(10), category varchar(10))");
+                } catch (SQLException ignore) {}
+                s.close();
+            }
+
+            protected void tearDown() throws Exception {
+
+            }
+        };
+    }
+}

Modified: webservices/synapse/trunk/java/pom.xml
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/pom.xml?rev=580270&r1=580269&r2=580270&view=diff
==============================================================================
--- webservices/synapse/trunk/java/pom.xml (original)
+++ webservices/synapse/trunk/java/pom.xml Fri Sep 28 02:39:50 2007
@@ -543,6 +543,12 @@
             <version>${xmlunit.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.derby</groupId>
+            <artifactId>derby</artifactId>
+            <version>${derby.version}</version>
+            <scope>test</scope>
+        </dependency>
 
         <dependency>
             <groupId>backport-util-concurrent</groupId>
@@ -949,6 +955,7 @@
         <junit.version>3.8.2</junit.version>
         <log4j.version>1.2.13</log4j.version>
         <xmlunit.version>1.1</xmlunit.version>
+        <derby.version>10.1.1.0</derby.version>
         <wrapper.version>3.2.3</wrapper.version>
 
         <!-- dependencies of Synapse extensions module -->



---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org