[wsas-java-dev] svn commit r9402 - in
branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice:
. beans
svn at wso2.org
svn at wso2.org
Thu Nov 1 23:55:36 PDT 2007
Author: sumedha
Date: Thu Nov 1 23:55:28 2007
New Revision: 9402
Added:
branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/beans/Result.java (contents, props changed)
Modified:
branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java
Log:
performance improvements/load tests done @ kaiser POC src/test/resources/many-columns.sql
Modified: branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java
==============================================================================
--- branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java (original)
+++ branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java Thu Nov 1 23:55:28 2007
@@ -33,6 +33,7 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
@@ -63,6 +64,7 @@
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.wso2.ws.dataservice.beans.CSVQuery;
import org.wso2.ws.dataservice.beans.ExcelQuery;
+import org.wso2.ws.dataservice.beans.Result;
import au.com.bytecode.opencsv.CSVReader;
@@ -198,7 +200,33 @@
// rowElementName = "row";
// }
// }
-
+
+ /*
+ * For RDBMS & JNDI connections re-establishing connection, if existing connection is closed.
+ */
+ private static Connection checkDBConnectionStatus(AxisService axisService,Connection conn) throws AxisFault{
+ if(log.isDebugEnabled()){
+ log.debug("checking database connection status");
+ }
+ if( DBConstants.DATASOURCE_TYPE_RDBMS.equals((String)axisService.getParameterValue(DBConstants.DATASOURCE_TYPE))
+ || DBConstants.DATASOURCE_TYPE_JNDI.equals((String)axisService.getParameterValue(DBConstants.DATASOURCE_TYPE))){
+ try {
+ if(conn.isClosed()){
+ if(log.isDebugEnabled()){
+ log.debug("Database connection is closed.Trying to re-establish.");
+ }
+ return createConnection(axisService);
+ }else{
+ //existing connection is not closed. Return it.
+ return conn;
+ }
+ } catch (SQLException e) {
+ log.error("Error occurred while trying to re-establish the database connection.", e);
+ throw new AxisFault("Error occurred while trying to re-establish the database connection.",e);
+ }
+ }
+ return null;
+ }
private static OMElement getSelectResult(OMElement queryElement, HashMap inputValues,
HashMap params, HashMap paramOrder, AxisService axisService, boolean isDML)
throws AxisFault {
@@ -211,6 +239,7 @@
throw new AxisFault("Database connection not found in Axis Configuration");
}
conn = (Connection)dbConnectionParam.getValue();
+ conn = checkDBConnectionStatus(axisService, conn);
conn.setAutoCommit(false);
PreparedStatement preparedStatement =
getProcessedPreparedStatement(inputValues, params, paramOrder, conn, sqlQuery);
@@ -223,18 +252,19 @@
}
OMElement result = queryElement.getFirstChildWithName(new QName("result"));
- String wrapperElementName = result.getAttributeValue(new QName("element"));
- String rowElementName = result.getAttributeValue(new QName("rowName"));
-
- //if wrapper element || row element is not set, set default values to them
- if(wrapperElementName == null || wrapperElementName.trim().length() == 0){
- //default value
- wrapperElementName = "results";
- }
- if(rowElementName == null || rowElementName.trim().length() == 0){
- //default value
- rowElementName = "row";
- }
+ Result resultObj = new Result(result);
+// String wrapperElementName = result.getAttributeValue(new QName("element"));
+// String rowElementName = result.getAttributeValue(new QName("rowName"));
+//
+// //if wrapper element || row element is not set, set default values to them
+// if(wrapperElementName == null || wrapperElementName.trim().length() == 0){
+// //default value
+// wrapperElementName = "results";
+// }
+// if(rowElementName == null || rowElementName.trim().length() == 0){
+// //default value
+// rowElementName = "row";
+// }
//TODO : need to define a way to get values automatically
//getDefaultValuesForResultsWrapper(wrapperElementName,rowElementName);
@@ -244,7 +274,7 @@
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(axisService.getTargetNamespace(), "data");
- resultElement = fac.createOMElement(wrapperElementName, omNs);
+ resultElement = fac.createOMElement(resultObj.getResultWrapper(), omNs);
if (isDML) {
resultElement
@@ -255,12 +285,21 @@
if ( !axisService.isElementFormDefault()) {
omNs =fac.createOMNamespace("", "data");
}
+
+ //put result elements into an array
+ Iterator tmpElements = result.getChildElements();
+ ArrayList tmpElementsArrayList = new ArrayList();
+ while(tmpElements.hasNext()){
+ OMElement element = (OMElement) tmpElements.next();
+ tmpElementsArrayList.add(element);
+ }
+
while (rs.next()) {
HashMap elementValues = new HashMap();
int columnCount = rs.getMetaData().getColumnCount();
- OMElement row = fac.createOMElement(rowElementName, omNs);
- if (rowElementName == null) {
+ OMElement row = fac.createOMElement(resultObj.getRowName(), omNs);
+ if (resultObj.getRowName() == null) {
row = resultElement;
}
for (int i = 1; i <= columnCount; i++) {
@@ -269,22 +308,26 @@
elementValues.put(columnName, columnValue);
}
- Iterator elements = result.getChildElements();
+ //Iterator elements = result.getChildElements();
boolean useAsParamToNextQuery = false;
- while (elements.hasNext()) {
- OMElement element = (OMElement) elements.next();
- if (element.getLocalName().equals("element")) {
- String displayTagName = element.getAttributeValue(new QName("name"));
- String resultSetFieldName =
- element.getAttributeValue(new QName("column"));
+ //while (elements.hasNext()) {
+ for(int a=0;a < resultObj.getDisplayColumnNames().length;a++){
+ //OMElement element = (OMElement) elements.next();
+ if (resultObj.getElementLocalNames()[a].equals("element")) {
+ //String displayTagName = element.getAttributeValue(new QName("name"));
+ String displayTagName = resultObj.getDisplayColumnNames()[a];
+ //String resultSetFieldName = element.getAttributeValue(new QName("column"));
+ String resultSetFieldName = resultObj.getResultSetColumnNames()[a];
// This means,the parameter is not part of the
// resultset. i.e. it is being passed from user's
// parameters.
- if (resultSetFieldName == null) {
- resultSetFieldName = element.getAttributeValue(new QName("param"));
- useAsParamToNextQuery = true;
- }
+
+ //TODO **********
+// if (resultSetFieldName == null) {
+// resultSetFieldName = element.getAttributeValue(new QName("param"));
+// useAsParamToNextQuery = true;
+// }
String elementValue;
if (useAsParamToNextQuery) {
@@ -301,12 +344,14 @@
} else if (columnDefalut.equals("attribute")) {
row.addAttribute(displayTagName, elementValue, omNs);
}
- } else if (element.getLocalName().equals("call-query")) {
+ } else if (resultObj.getElementLocalNames()[a].equals("call-query")) {
+ //OMElement element = (OMElement) elements.next();
+ OMElement element = (OMElement)tmpElementsArrayList.get(a);
OMElement rowElement = getRDBMSResult(element, axisService, elementValues);
row.addChild(rowElement);
}
}
- if (rowElementName != null) {
+ if (resultObj.getRowName() != null) {
resultElement.addChild(row);
}
}
@@ -851,7 +896,7 @@
try{
PreparedStatement sqlQuery = conn.prepareStatement(sqlStatement);
-
+ log.debug("Processing prepared statement for SQL " + sqlStatement);
Set paramNames = params.keySet();
Object pramNameArray[] = paramNames.toArray();
@@ -859,7 +904,11 @@
paramName = (String) paramOrder.get(new Integer(i + 1));
sqlType = (String) params.get(paramName);
value = (String) inputs.get(paramName);
+ log.debug("Param name : "+paramName
+ +" SQL Type : "+sqlType
+ +" Value : "+value);
+
if (sqlType == null) {
// Defaults to string
sqlQuery.setString(i + 1, value);
Added: branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/beans/Result.java
==============================================================================
--- (empty file)
+++ branches/wsas/java/2.1/commons/data-services/src/main/java/org/wso2/ws/dataservice/beans/Result.java Thu Nov 1 23:55:28 2007
@@ -0,0 +1,102 @@
+package org.wso2.ws.dataservice.beans;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+
+public class Result {
+ String resultWrapper = ""; //represents element attribute of result element
+ String rowName = ""; //represents rowName attribute of result element
+ String resultSetColumnNames[];
+ String displayColumnNames[];
+ String elementLocalNames[];
+
+ public String getResultWrapper() {
+ return resultWrapper;
+ }
+ public void setResultWrapper(String resultWrapper) {
+ this.resultWrapper = resultWrapper;
+ }
+ public String getRowName() {
+ return rowName;
+ }
+ public void setRowName(String rowName) {
+ this.rowName = rowName;
+ }
+ public String[] getResultSetColumnNames() {
+ return resultSetColumnNames;
+ }
+ public void setResultSetColumnNames(String[] resultSetColumnNames) {
+ this.resultSetColumnNames = resultSetColumnNames;
+ }
+ public String[] getDisplayColumnNames() {
+ return displayColumnNames;
+ }
+ public void setDisplayColumnNames(String[] displayColumnNames) {
+ this.displayColumnNames = displayColumnNames;
+ }
+
+
+ public String[] getElementLocalNames() {
+ return elementLocalNames;
+ }
+ public void setElementLocalNames(String[] elementLocalNames) {
+ this.elementLocalNames = elementLocalNames;
+ }
+ public Result(OMElement result){
+ String wrapperElementName = result.getAttributeValue(new QName("element"));
+ String rowElementName = result.getAttributeValue(new QName("rowName"));
+
+ //if wrapper element || row element is not set, set default values to them
+ if(wrapperElementName == null || wrapperElementName.trim().length() == 0){
+ //default value
+ wrapperElementName = "results";
+ }
+ if(rowElementName == null || rowElementName.trim().length() == 0){
+ //default value
+ rowElementName = "row";
+ }
+ this.resultWrapper = wrapperElementName;
+ this.rowName = rowElementName;
+
+ Iterator elements = result.getChildElements();
+ ArrayList displayColumns = new ArrayList();
+ ArrayList resultSetColumns = new ArrayList();
+ ArrayList elementLclNames = new ArrayList();
+
+ while (elements.hasNext()) {
+ OMElement element = (OMElement) elements.next();
+ String displayTagName = element
+ .getAttributeValue(new QName("name"));
+ String resultSetFieldName = element.getAttributeValue(new QName(
+ "column"));
+ displayColumns.add(displayTagName);
+ resultSetColumns.add(resultSetFieldName);
+ elementLclNames.add(element.getLocalName());
+ }
+
+ Object[] objDisplayColumns = displayColumns.toArray();
+ this.displayColumnNames = new String[objDisplayColumns.length];
+ for (int a = 0; a < objDisplayColumns.length; a++) {
+ this.displayColumnNames[a] = (String)objDisplayColumns[a];
+ }
+
+ Object[] objResultSetColumns = resultSetColumns.toArray();
+ this.resultSetColumnNames = new String[objResultSetColumns.length];
+ for (int a = 0; a < objResultSetColumns.length; a++) {
+ this.resultSetColumnNames[a] = (String)objResultSetColumns[a];
+ }
+
+ Object[] objElementLocalNames = elementLclNames.toArray();
+ this.elementLocalNames = new String[objElementLocalNames.length];
+ for (int a = 0; a < objElementLocalNames.length; a++) {
+ this.elementLocalNames[a] = (String)objElementLocalNames[a];
+ }
+
+
+ }
+
+}
More information about the Wsas-java-dev
mailing list