Skip to Content.
Sympa Menu

perfsonar-dev - perfsonar: r5022 - in branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage: . exist

Subject: perfsonar development work

List archive

perfsonar: r5022 - in branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage: . exist


Chronological Thread 
  • From:
  • To:
  • Subject: perfsonar: r5022 - in branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage: . exist
  • Date: Wed, 4 Mar 2009 09:09:41 -0500

Author: mac
Date: 2009-03-04 09:09:41 -0500 (Wed, 04 Mar 2009)
New Revision: 5022

Modified:

branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/LookupServiceDAO.java

branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/CommonExistDAOImpl.java

branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
Log:
necessary changes in DAO

Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/LookupServiceDAO.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/LookupServiceDAO.java
2009-03-04 14:09:02 UTC (rev 5021)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/LookupServiceDAO.java
2009-03-04 14:09:41 UTC (rev 5022)
@@ -8,6 +8,8 @@

public interface LookupServiceDAO {

+
+
/**
* The name of the store collection (containing LS data/metadata
*/
@@ -27,11 +29,11 @@
* Namespaces declaration for perfSONAR
*/
public final static String XQUERY_DECLARE_NAMESPACES =
- "declare namespace
perfsonar='http://ggf.org/ns/nmwg/tools/org/perfsonar/1.0/'; "+
+ "declare namespace
perfsonar='http://ggf.org/ns/nmwg/tools/org/perfsonar/1.0/'; \n"+
DECLARE_NMWG_NAMESPACE +
- "declare namespace
psservice='http://ggf.org/ns/nmwg/tools/org/perfsonar/service/1.0/'; "+
- "declare namespace nmwgt='http://ggf.org/ns/nmwg/topology/2.0/'; "+
- "declare namespace
netutil='http://ggf.org/ns/nmwg/characteristic/utilization/2.0/'; ";
+ "declare namespace
psservice='http://ggf.org/ns/nmwg/tools/org/perfsonar/service/1.0/'; \n"+
+ "declare namespace nmwgt='http://ggf.org/ns/nmwg/topology/2.0/';
\n"+
+ "declare namespace
netutil='http://ggf.org/ns/nmwg/characteristic/utilization/2.0/'; \n\n";

// --------------------------------------------------------- Public
methods

@@ -43,7 +45,7 @@
/**
* Removes Lookup Information from LSStore database
* @param metadataId
- * @return number of items removed
+ * @return number of items removed, -1 if error
* @throws PerfSONARException
*/
public int removeLookupInfo(String metadataId) throws
PerfSONARException;

Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/CommonExistDAOImpl.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/CommonExistDAOImpl.java
2009-03-04 14:09:02 UTC (rev 5021)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/CommonExistDAOImpl.java
2009-03-04 14:09:41 UTC (rev 5022)
@@ -2,6 +2,7 @@

import java.util.HashMap;

+import org.apache.log4j.Logger;
import org.perfsonar.base2.service.configuration.Component;
import org.perfsonar.base2.service.configuration.Configuration;
import org.perfsonar.base2.service.configuration.ConfigurationManager;
@@ -12,6 +13,7 @@
import org.perfsonar.base2.service.storage.xml.XMLDataStorage;
import org.perfsonar.base2.service.storage.xml.exist.ExistHTTPDataStorage;
import org.perfsonar.base2.xml.Element;
+import org.perfsonar.service.lookupservice.LSRegisterAction;
import org.perfsonar.service.lookupservice.storage.LookupServiceDAO;
/**
* Abstract implementation of LookupServiceDAO
@@ -25,6 +27,8 @@
*/
public abstract class CommonExistDAOImpl extends Component implements
LookupServiceDAO {

+ protected static final Logger logger =
Logger.getLogger(LSRegisterAction.class.getName());
+
private XMLDataStorage dataStorage;
private String dataCollection;
private DataCredential dataCredential;

Modified:
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
===================================================================
---
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
2009-03-04 14:09:02 UTC (rev 5021)
+++
branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage/exist/XQueryExistDAOImpl.java
2009-03-04 14:09:41 UTC (rev 5022)
@@ -8,204 +8,251 @@
import org.perfsonar.base2.xml.nmwg.Metadata;

/**
- * Implementation of LookupServiceDAO:
- * eXist HTTP connection
- * using XQuery for modification
- * using "+LS_STORE_COLLECTION_TYPE+".xml,
"+LS_STORE_COLLECTION_TYPE+"-control.xml files in one collection
+ * Implementation of LookupServiceDAO: eXist HTTP connection using XQuery for
+ * modification using "+LS_STORE_COLLECTION_TYPE+".xml,
+ * "+LS_STORE_COLLECTION_TYPE+"-control.xml files in one collection
+ *
* @author Maciej Glowiak
- *
+ *
*/
public class XQueryExistDAOImpl extends CommonExistDAOImpl {

- //
---------------------------------------------------------------constants
+ //
---------------------------------------------------------------constants

private static final String UPDATE_FOR = "for $i in ";
+
private static final String UPDATE_REMOVE = "return (update delete $i,
'removed')";

+ private static final String UPDATE_INSERT = "update insert ";

- private static final String UPDATE_INSERT = "update insert ";
private static final String UPDATE_INTO = " into ";
- private static final String UPDATE_LSSTORE =
"/nmwg:store[@type='"+LS_STORE_COLLECTION_TYPE+"']";
-
- // ------------------------------------------------------instance
variables
-
- public XQueryExistDAOImpl() {
+
+ private static final String UPDATE_LSSTORE =
"/nmwg:store[@type='"
+ + LS_STORE_COLLECTION_TYPE + "']";
+
+ // ------------------------------------------------------instance
variables
+
+ public XQueryExistDAOImpl() {
super();
- }
-
- // --------------------------------------------------------- Public
methods
+ }

-
- public void putLookupInfo(Metadata m, Data[] d) throws
PerfSONARException {
-
- String[] xmls = new String[d.length+1];
+ // --------------------------------------------------------- Public
methods
+
+ public void putLookupInfo(Metadata m, Data[] d) throws
PerfSONARException {
+
+ if (m == null) {
+ String msg = "No metadata. Cannot put into database";
+ logger.error(msg);
+ throw new PerfSONARException("error/ls/no_metadata",msg);
+ }
+ if (d == null) {
+ String msg = "No data (null). Cannot put into database";
+ logger.error(msg);
+ throw new PerfSONARException("error/ls/no_data",msg);
+ }
+ if (d.length<1) {
+ String msg = "No data (0). Cannot put into database";
+ logger.error(msg);
+ throw new PerfSONARException("error/ls/no_data",msg);
+ }
+
+ // serialize Metadata and Data
+
+ // send xquery update expression containing all metadata and data
+ // elements in one xquery
+ // instruction; should work faster than code above (commented)
ElementSerializer ser = new ElementSerializer();
ser.setStartingDocumentDeclaration(false);
- StringBufferOutputStream os = new StringBufferOutputStream();
-
- //convert metadata to String
- try {
+ StringBuffer xmls = new StringBuffer();
+ StringBufferOutputStream os = new StringBufferOutputStream(xmls);
+
+ //add xquery namespaces and UPDATE instruction
+ xmls.append(XQUERY_DECLARE_NAMESPACES);
+ xmls.append(UPDATE_INSERT);
+ xmls.append(" (\n"); //IMPORTANT - begin Xquery collection (m, d, d,
...)
+
+ try {
+
+ // add metadata to StringBuffer
+ ser.write(os, m);

- ser.write(os, m);
- xmls[0] = os.getString();
-
- os.reset();
-
- //convert data to Strings
- for (int i=0; i<d.length; i++) {
+ // convert data to Strings
+ for (int i = 0; i < d.length; i++) {
+ xmls.append(", \n"); //IMPORTANT - separator for next
element of Xquery collection (m, d, d, ...)
ser.write(os, d[i]);
- xmls[i+1]=os.getString();
+
}

} catch (Exception e) {
- throw new PerfSONARException("error/parse","Cannot serialize
elements in XQueryExistDAOImpl");
+ throw new PerfSONARException("error/parse",
+ "Cannot serialize elements in XQueryExistDAOImpl");
}
-
- //send XQuery
- for (int i=0; i<xmls.length; i++) {
- String xquery =
- XQUERY_DECLARE_NAMESPACES +
- UPDATE_INSERT +
- xmls[i] +
- UPDATE_INTO +
- UPDATE_LSSTORE;
- getDataStorage().performXQuery(xquery,
getDataCollection(), getDataCredential());
- }
- }
-
-
- public int removeLookupInfo(String metadataId) throws
PerfSONARException {
+ // send XQuery
+ xmls.append(" )\n"); //IMPORTANT - end of Xquery collection (m, d,
d, ...)
+ xmls.append(UPDATE_INTO);
+ xmls.append(UPDATE_LSSTORE);

- String xquery =
- XQUERY_DECLARE_NAMESPACES +
- UPDATE_FOR +
- getRemoveLookupInfoXQueryPart(metadataId) +
- UPDATE_REMOVE;
+ String query = xmls.toString();
+ getDataStorage().performXQuery(query, getDataCollection(),
+ getDataCredential());
+ }

- //remove by xquery
- XMLDBResult res = getDataStorage().performXQuery(xquery,
getDataCollection(), getDataCredential());
- return res.getCount();
+ public int removeLookupInfo(String metadataId) throws PerfSONARException
{

- }
+ String xquery = XQUERY_DECLARE_NAMESPACES + UPDATE_FOR
+ + getRemoveLookupInfoXQueryPart(metadataId) + UPDATE_REMOVE;

- public int cleanupLookupInfo(long timestamp, long defaultInterval)
throws PerfSONARException {
+ // remove by xquery
+ XMLDBResult res = getDataStorage().performXQuery(xquery,
+ getDataCollection(), getDataCredential());

- String xquery =
- DECLARE_NMWG_NAMESPACE +
-
- "let $now:="+timestamp+"\n" +
- "let $interval:="+defaultInterval+"\n" +
- //to be changed - get interval from parameter
-
- "for $meta in
/nmwg:store[@type='LSStore-control']/nmwg:metadata
\n" +
- " let $ts :=
data($meta/nmwg:parameters/nmwg:parameter[@name='timestamp']/@value)
cast as xs:integer\n" +
- " let $metaid := data($meta/@id)\n "+
- " where $ts + $interval < $now\n" +
- "return \n" +
-
- "(\n" +
- " $metaid,\n" +
- " update delete
/nmwg:store[@type='LSStore-control']/nmwg:metadata[@id=$metaid],\n"
+
- " update delete
/nmwg:store[@type='LSStore']/nmwg:metadata[@id=$metaid],
\n" +
- " update delete
/nmwg:store[@type='LSStore']/nmwg:data[@metadataIdRef=$metaid]\n"
+
- " )\n";
-
- //System.out.println("---\n"+xquery+"\n---\n");
-
- /*XmlDbResult res =*/ getDataStorage().performXQuery(xquery,
getDataCollection(), getDataCredential());
-
+ if (res != null)
+ return res.getCount();
+ else
+ return -1; // if error
+
+ }
+
+ public int cleanupLookupInfo(long timestamp, long defaultInterval)
+ throws PerfSONARException {
+
+ String xquery = DECLARE_NMWG_NAMESPACE
+ +
+
+ "let $now:="
+ + timestamp
+ + "\n"
+ + "let $interval:="
+ + defaultInterval
+ + "\n"
+ +
+ // to be changed - get interval from parameter
+
+ "for $meta in
/nmwg:store[@type='LSStore-control']/nmwg:metadata
\n"
+ + " let $ts :=
data($meta/nmwg:parameters/nmwg:parameter[@name='timestamp']/@value)
cast as xs:integer\n"
+ + " let $metaid := data($meta/@id)\n "
+ + " where $ts + $interval < $now\n"
+ + "return \n"
+ +
+
+ "(\n"
+ + " $metaid,\n"
+ + " update delete
/nmwg:store[@type='LSStore-control']/nmwg:metadata[@id=$metaid],\n"
+ + " update delete
/nmwg:store[@type='LSStore']/nmwg:metadata[@id=$metaid],
\n"
+ + " update delete
/nmwg:store[@type='LSStore']/nmwg:data[@metadataIdRef=$metaid]\n"
+ + " )\n";
+
+ // System.out.println("---\n"+xquery+"\n---\n");
+
+ /* XmlDbResult res = */getDataStorage().performXQuery(xquery,
+ getDataCollection(), getDataCredential());
+
return -1;
}
-
-
-
- public void setControlParameter(String metadataId, String parameter,
String value) throws PerfSONARException {

- String xquery =
- DECLARE_NMWG_NAMESPACE +
-
- "let $paramName := '"+parameter+"' \n" +
- "let $paramValue := '"+value+"' \n" +
- "let $metadataId := '"+metadataId+"' \n" +
-
- "let $command := \n" +
- " if
(count(/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters/nmwg:parameter[@name=$paramName])
> 0) then \n" +
- " update replace
/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters/nmwg:parameter[@name=$paramName]/@value
with $paramValue \n" +
- " else if
(count(/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters)
> 0) then \n" +
- " update insert <nmwg:parameter name='{$paramName}'
value='{$paramValue}'/> into
/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters
\n" +
- " else if
(count(/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId])
> 0) then \n" +
- " update insert <nmwg:parameters
id='control-parameters'><nmwg:parameter name='{$paramName}'
value='{$paramValue}'/></nmwg:parameters> into
/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId]
\n" +
- " else " +
- " update insert <nmwg:metadata
id='{$metadataId}'><nmwg:parameters id='control-parameters'><nmwg:parameter
name='{$paramName}' value='{$paramValue}'/></nmwg:parameters></nmwg:metadata>
into
/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+"'] \n" +
-
- "return $command \n";
-
- //put
- getDataStorage().performXQuery(xquery, getDataCollection(),
getDataCredential());
-
- } //set parameter
+ public void setControlParameter(String metadataId, String parameter,
+ String value) throws PerfSONARException {

+ String xquery = DECLARE_NMWG_NAMESPACE
+ +

- public void removeControlParameter(String metadataId, String parameter)
throws PerfSONARException {
- String xquery =
- DECLARE_NMWG_NAMESPACE +
-
- "let $paramName := '"+parameter+"'\n" +
- "let $metadataId := '"+metadataId+"'\n" +
-
- "let $metadata :=
/nmwg:store[@type='"+
- LS_STORE_CONTROL_COLLECTION_TYPE+
-
"']/nmwg:metadata[@id=$metadataId]\n"
+
- "let $parameters := \n" +
- " $metadata/nmwg:parameters\n" +
- "let $parameter := \n" +
- "
$parameters/nmwg:parameter[@name=$paramName]\n"
+
-
- "let $o := \n" +
- " if (count($parameter) > 0) \n" +
- " then if ((count($parameters/child::*) - count($parameter))
= 0)\n" +
- " then if (count($metadata/child::*) = 1) \n" +
- " then $metadata\n" +
- " else $parameters\n" +
- " else $parameter\n" +
- " else ()\n" +
-
- "for $i in $o return update delete $i\n";
-
- //remove
- getDataStorage().performXQuery(xquery, getDataCollection(),
getDataCredential());
-
+ "let $paramName := '"
+ + parameter
+ + "' \n"
+ + "let $paramValue := '"
+ + value
+ + "' \n"
+ + "let $metadataId := '"
+ + metadataId
+ + "' \n"
+ +
+
+ "let $command := \n"
+ + " if
(count(/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters/nmwg:parameter[@name=$paramName])
> 0) then \n"
+ + " update replace
/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters/nmwg:parameter[@name=$paramName]/@value
with $paramValue \n"
+ + " else if
(count(/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters)
> 0) then \n"
+ + " update insert <nmwg:parameter name='{$paramName}'
value='{$paramValue}'/> into
/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId]/nmwg:parameters
\n"
+ + " else if
(count(/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId])
> 0) then \n"
+ + " update insert <nmwg:parameters
id='control-parameters'><nmwg:parameter name='{$paramName}'
value='{$paramValue}'/></nmwg:parameters> into
/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId]
\n"
+ + " else "
+ + " update insert <nmwg:metadata
id='{$metadataId}'><nmwg:parameters id='control-parameters'><nmwg:parameter
name='{$paramName}' value='{$paramValue}'/></nmwg:parameters></nmwg:metadata>
into
/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE + "'] \n" +
+
+ "return $command \n";
+
+ // put
+ getDataStorage().performXQuery(xquery, getDataCollection(),
+ getDataCredential());
+
+ } // set parameter
+
+ public void removeControlParameter(String metadataId, String parameter)
+ throws PerfSONARException {
+ String xquery = DECLARE_NMWG_NAMESPACE
+ +
+
+ "let $paramName := '"
+ + parameter
+ + "'\n"
+ + "let $metadataId := '"
+ + metadataId
+ + "'\n"
+ +
+
+ "let $metadata :=
/nmwg:store[@type='"
+ + LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id=$metadataId]\n"
+ + "let $parameters := \n"
+ + " $metadata/nmwg:parameters\n"
+ + "let $parameter := \n"
+ + "
$parameters/nmwg:parameter[@name=$paramName]\n"
+ +
+
+ "let $o := \n"
+ + " if (count($parameter) > 0) \n"
+ + " then if ((count($parameters/child::*) -
count($parameter)) = 0)\n"
+ + " then if (count($metadata/child::*) = 1) \n"
+ + " then $metadata\n"
+ + " else $parameters\n"
+ + " else $parameter\n" + " else ()\n" +
+
+ "for $i in $o return update delete $i\n";
+
+ // remove
+ getDataStorage().performXQuery(xquery, getDataCollection(),
+ getDataCredential());
+
}
-
-

- protected String getRemoveLookupInfoXQueryPart(String metadataId) {
+ protected String getRemoveLookupInfoXQueryPart(String metadataId) {
return
- // a set of ()
- "(" +
- //metadata from "+LS_STORE_CONTROL_COLLECTION_TYPE+"
-
"/nmwg:store[@type='"+LS_STORE_CONTROL_COLLECTION_TYPE+"']/nmwg:metadata[@id='"+metadataId+"']"
+
- ", " +
- //metadata from "+LS_STORE_COLLECTION_TYPE+"
-
"/nmwg:store[@type='"+LS_STORE_COLLECTION_TYPE+"']/nmwg:metadata[@id='"+metadataId+"']"
+
- ", " +
- //data from "+LS_STORE_COLLECTION_TYPE+"
-
"/nmwg:store[@type='"+LS_STORE_COLLECTION_TYPE+"']/nmwg:data[@metadataIdRef='"+metadataId+"']"
+
- ")";
+ // a set of ()
+ "("
+ +
+ // metadata from "+LS_STORE_CONTROL_COLLECTION_TYPE+"
+
"/nmwg:store[@type='"
+ LS_STORE_CONTROL_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id='"
+ metadataId + "']"
+ + ", "
+ +
+ // metadata from "+LS_STORE_COLLECTION_TYPE+"
+
"/nmwg:store[@type='"
+ LS_STORE_COLLECTION_TYPE
+ +
"']/nmwg:metadata[@id='"
+ metadataId + "']" + ", "
+ +
+ // data from "+LS_STORE_COLLECTION_TYPE+"
+
"/nmwg:store[@type='"
+ LS_STORE_COLLECTION_TYPE
+ +
"']/nmwg:data[@metadataIdRef='"
+ metadataId + "']" + ")";
}

-
-} //SingleFileExistHttpDAOImpl
+} // SingleFileExistHttpDAOImpl



  • perfsonar: r5022 - in branches/new-structure-with-base2/ps-mdm-ls/src/main/java/org/perfsonar/service/lookupservice/storage: . exist, svnlog, 03/04/2009

Archive powered by MHonArc 2.6.16.

Top of Page