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