Evenals het verstrekken van verkoper-onafhankelijke middelen om XSets te creëren, terug te winnen te wijzigen en te schrappen, bepaalt de v1.0 specificatie SNIA XAM ook een vraagtaal (XAM QL), die op een ondergroep van de SQL taal , voor het selecteren van en het terugwinnen van XUIDs van XSets wordt gebaseerd die op tevreden-bepaalde criteria wordt gebaseerd.
De reeks gereserveerde woorden voor deze vraagtaal is vrij klein: selecteer, waar, en, of, niet, als, bestaat, readonly binden, typeof, lengte, datum, WAAR, VALS, vóór, nadat, en binnen bevat. Door ontwerp, kijken de vragen XAM als een SQL uitgezochte verklaring. De vraagtaal is ongevoelig geval en gebruikt het karakter van ASCII - reeks.
Hier is een voorbeeld van een eenvoudige vraag XAM:
select ".xset.xuid" where "com.example.name" = ’Tuckers Plantation'
Versie 1.0 van de specificatie XAM bepaalt twee niveaus van de steun van de vraagtaal, d.w.z. Niveau 1 en Niveau 2. Niveau 1 bepaalt vragen op eigenschappen en gebiedsattributen in XSets en is verplicht. Om het even welke XSet bezitswaarde die voor een toepassingsprogramma via de bibliotheek toegankelijk is XAM kan worden gevraagd. Niveau 2 breidt Niveau 1 uit om vragen op XStreams te steunen en is facultatief. Beide niveaus van vraag worden betreden door een enig, bepaald baantype dat alle leveranciers XAM moeten steunen. Aangezien geen verkoper dat ik me bewust ben van eigenlijk niveau 2 vragen heeft uitgevoerd, concentreert de rest van deze post op niveau 1 vragen.
Een Xam- vraagverklaring bestaat uit een verplichte uitgezochte clausule die door facultatief wordt gevolgd waar clausule. Voor XAM v1.0 de enige geldige uitgezochte clausule is uitgezochte `.xset.xuid'. Dit specificeert dat de toepassing om een lijst van waarden XUID verzoekt. Bijvoorbeeld
select ".xset.xuid "
een lijst van elke XSet zal terugkeren die op het tijdstip van de vraag leesbaar is.
Waar de clausule wordt gebruikt om een ondergroep van aan te passen XSets te specificeren. Voor niveau 1 is de vragen het beperkt tot vergelijkingen tussen eigenschappen XSet en letterlijke waarden en/of gebiedsattributen en letterlijke waarden.
select ".xset.xuid" where ".xam.time.xuid" > date(’2009-02-01T00:00:00.0’)
de lijst van al Xsets zal terugkeren wat op of na 1 Februari 2009 werden gecreërd.
De volgende lijst toont welke gebied en letterlijke types geldig kunnen worden vergeleken.
| xam_int | xam_double | het xam_string | xam_datetime | xam_xuid | |
|---|---|---|---|---|---|
| int. | * | * | |||
| dubbel | * | * | |||
| koord | * | ||||
| datetime | * | ||||
| XUID | * |
De bibliotheek XAM bevestigt dat de koorden en de koordenliberalen utf-8 koorden in overeenstemming zijn. Niet-overeenkomende utf-8 koordliterals produceren een XAM non-fatal fout van de vraagsyntaxis. De kwesties zoals enige tegenover veelvoudige glyphkarakters en niet printable karakters zijn niet gespecificeerd en zijn afhankelijke implementatie en toepassing. De vergelijkingen van het koord zijn gevoelig geval en de vergelijkingsexploitanten werken op een byte-door-byte basis. Voor relationele exploitanten worden de verhoudingen bepaald door de bytewaarden. Al gegevensnormalisatie is de verantwoordelijkheid van de toepassing.
De gesteunde vluchtopeenvolgingen zijn de volgende. Een andere vluchtopeenvolging zal een non-fatal fout produceren.
| \ \ | Backslash (\) |
| \ „ | Dubbel citaat („) |
| \ ' | Kies citaat (') uit |
| \ uxxxx | Een karakter Unicode in hexadecimaal formaat (xxxx) |
Literals van het koord moeten met enige citaten worden geciteerd. Literals van het koord die één of meerdere enige citaatkarakters bevatten moeten aan elk enig citaatkarakter ontsnappen gebruikend backslash. Bijvoorbeeld, het koord letterlijk van 'dit is een koord literal in een vraag worden vertegenwoordigd zoals
select ".xset.xuid" where "com.example.string-property" = ’This is a string literal’
Om één enkel citaat in een koord te gebruiken, bewaak het met backslash
select ".xset.xuid" where "com.example.claimed.ownership" = ’Tucker\’s’
Alle instanties van gebiedsnamen in een XAM vraagkoord moeten met dubbele citaten worden geciteerd. Als een gebiedsnaam dubbele citaatkarakters bevat, moet aan elk dubbel citaatkarakter zijn ontsnapt gebruikend backslash. Bijvoorbeeld, de gebiedsnaam voor het xam_boolean bezit com.example. “ het qstring zou“ in een vraag moeten worden vertegenwoordigd zoals
select ".xam.xuid" where "com.example.\"qstring\"" = TRUE
Als een gebiedsnaam een backslash karakter bevat, aan moet backslash zelf met een andere backslash zijn ontsnapt. Bijvoorbeeld, zou de gebiedsnaam voor de xam_double bezitscom.example.file verhouding \ in een vraag moeten worden vertegenwoordigd zoals
select ".xam.xuid" where "com.example.file\\ratio" = 100.1
De vraagtaal keurt date-time en xUID-Getaxeerde literals goed respectievelijk gebruikend de datum van selecteursfuncties () en xuid (). De datum () functie neemt een behoorlijk gevormde date-time waarde, die als een letterlijk koord wordt gespecificeerd dat met de date-time XAM specificatie verenigbaar is.
select ".xset.xuid" where ".xam.time.xuid" = date(’2009-06-01T00:00:00.0’)
De xuid () functie verwacht een XUID die in de vorm van een base64 letterlijk gecodeerd koord is. Een incorrect gevormd letterlijk koord produceert een non-fatal fout tijdens vraag het ontleden.
De attributen van het gebied zijn het betreden gebruiken bestaat, typeof, readonly, het binden, en de functies van de attributenaccessor van het lengtegebied. Bestaat () functietests voor het bestaan van een genoemd gebiedsattribuut (bezit) in een XSet. Het evalueert aan WAAR als een XSet het genoemde gebied bevat het anders VALS evalueert.
select ".xset.xuid" where exists("com.example.name")
De typeof () functie keert het MIME type van een genoemd gebied in een XSet terug die een koord-getaxeerd bezit is.
select ".xset.xuid" where typeof("com.example.data") = ’text/plain’
select ".xset.xuid" where typeof("com.example.data") like ’text%’
Deze functie kan worden gebruikt wanneer een toepassing een gebiedsverwijzing naar een koord-getaxeerd bezit kon gebruiken. Merk op dat de vergelijkingen met om het even welke niet-koord letterlijke waarde een non-fatal fout tijdens het ontleden van de vraag produceren.
De readonly () functie evalueert aan WAAR wanneer een gebied in een XSet readonly wordt gemerkt.
select ".xset.xuid" where readonly("com.example.flag")
select ".xset.xuid" where not readonly("com.example.name")
De band () functie evalueert aan WAAR wanneer een gebied in een XSet zoals bindend wordt gemerkt.
select ".xset.xuid" where binding("com.example.case_id")
select ".xset.xuid" where not binding("com.example.subject")
De lengte () functie keert de lengte, in bytes, van een genoemd gebied terug.
select ".xset.xuid" where length("com.example.data") > 1024
Wanneer gebruikt op bezitsgebieden keert deze functie de lengte terug zoals die voor stypes wordt bepaald. Merk op dat deze functie niet zou moeten worden gebruikt om het aantal karakters in een koord te vergelijken aangezien deze vergelijking van karakter het coderen wordt gebruikt afhangt.
Het wat betreft nu logische exploitanten. Subclauses binnen waar de clausule kan worden gecombineerd en worden gewijzigd door de logische exploitanten te gebruiken en, of en niet. Deze exploitanten zijn gelijkaardig aan hun SQL tegenhangers.
En exploitant vereist beide subclauses om aan WAAR te evalueren alvorens met inbegrip van een XSet in de resultaten. Bijvoorbeeld
select ".xset.xuid" where typeof("com.example.stream") = ’image/gif’ and length("com.example.stream") > 4096
selecteert slechts die XSets bevattend de beelden van GIF de waarvan grootte groter is dan 4096 bytes. Of exploitant evalueert aan WAAR als één van beiden subclause aan WAAR evalueert. Bijvoorbeeld
select ".xset.xuid" where typeof("com.example.stream") = ’image/jpeg’ or typeof("com.example.stream") = ’image/gif’
selecteert slechts die XSets bevattend een genoemde stroom van beeldtype JPEG of GIF. De niet exploitant ontkent een uitdrukking van Boole. Bijvoorbeeld
select ".xset.xuid" where not binding("com.example.property")
selecteert al XSets met het niet bindende bezit com.example.property.
Zoals in SQL nemen bepaalde exploitanten belangrijkheid over andere exploitanten in vragen. XAM QL de exploitantbelangrijkheid is als volgt:
| BELANGRIJKHEID | EXPLOITANT |
|---|---|
| 1 | bestaat, readonly, typeof, lengte, band, +, - |
| 2 | =, <>>, >=, <> |
| 3 | niet |
| 4 | en |
| 5 | of |
De exploitanten van de zelfde belangrijkheid worden geëvalueerdd links aan recht binnen een vraag. Nochtans kan de exploitantbelangrijkheid worden met voeten getreden gebruikend haakjes zoals die door het volgende voorbeeld wordt getoond.
select ".xset.xuid" where not "com.example.bool-prop" and "com.example.int-prop" = 64
select ".xset.xuid" where not ("com.example.bool-prop" and "com.example.int-prop" = 64)
In het eerste voorbeeld, is de niet exploitant slechts op het com.example.bool-steun bezit van toepassing. In het tweede voorbeeld, is de niet exploitant op zowel com.example.bool-steun als com.example.int-steun van toepassing = 42.
Nu wij met syntaxis XAM QL enigszins vertrouwd zijn, is de volgende vraag die moet worden beantwoord hoe wij een Systeem van de Opslag XAM vertellen om een vraag uit te voeren en de resultaten terug te geven aan ons. Goed blijkt het dat een vraag wordt uitgevoerd aangezien een bepaald type van baan XAM een vraagbaan riep. De input aan een vraagbaan is een XSet die u moet creëren. Dit XSet moet twee punten bevatten - het gebied org.snia.xam.job.com mand dat altijd is plaatste aan `xam.job.query en een XStream xam.job.query.com mand die een utf-8 tekststroom is (BOOTS type`- tekst/vlakte na; charset=utf-8') het bevatten van het daadwerkelijke koord van de vraaguitdrukking.
Een vraagbaan kan naar keuze vóór of tijdens de uitvoering van de baan worden begaan, maar dit begaat niet wordt vereist. De capaciteit om een lopende baan te begaan is facultatief en afhankelijke implementatie. Een toepassing kan bepalen als de baan wordt gesteund door het XSystem bezit van Boole .xsystem.job.com mit.supported te controleren begaat. Het nalaten om een vraagbaan te begaan alvorens XSet te sluiten betekent de resultaten van de vraagbaan niet voortdurend worden opgeslagen.
Een vraagbaan wordt uitgevoerd door aan te halen submitJob. Als één van beide vereiste punten in de vraagbaan XSet niet correct wordt ingevuld, wordt het standaardgebied .xam.job.error van de baanfout toegevoegd aan de vraagbaan XSet en het is waarde wordt geplaatst aan één van beide org.snia.xam:: not_a_job of org.snia.xam:: unspecified_command en de vraagbaan wordt geaborteerd. Zoals aangetoond in de steekproeftoepassing hieronder, kan de staat van een vraagbaan worden bepaald door de waarde van .xam.job.status te onderzoeken.
Wanneer een vraagbaan succesvol is, worden de resultaten opgeslagen in de vraagbaan XSet in de vorm van een nieuwe XStream genoemd xam.job.query.results. Dit XStream heeft een MIME type van toepassing/vnd.snia.xam.query.xuid_list en bevat XUIDs voor de reeks van XSets als gevolg van de evaluatie van de vraag. Elke XUID wordt opgeslagen in een binair formaat als deel van een 80 byteverslag. Als een XUID korter is dan 80 bytes, is het verslag nul opgevuld aan 80 bytes.
Een aantal andere eigenschappen met betrekking tot de resultaten XStream zijn ook opstelling. Het xam_intbezit xam.job.query.results.count bevat de huidige telling van de Xuid- verslagen in de resultaten XStream. Dit bezit wordt bijgewerkt zoals de resultaten in de resultaten XStream tijdens vraagverwerking zijn ingegaan. Een toepassing kan dit gebruiken om statusinformatie aan gebruikers te verstrekken aangezien de vraagbaan uitvoert. Het xam_string bezit xam.job.query.level wijst op het vraagniveau dat de resultaten aanpast. Zijn waarde is of org.snia.xam.job.query.level.1 of org.snia.xam.job.query.level.2.
Het is belangrijk om te herinneren dat een vraagbaan binnen de rollen werkt en de toestemmingen die aan de verbinding worden verleend. Dat betekent de resultaten XStream slechts die XSets omvat die voor een toepassing, op zijn minst vanuit een gelezen perspectief, volgens de rol zichtbaar en toegankelijk zijn waaronder de vraagbaan wordt uitgevoerd.
De vraagbaan kan de volgende foutencodes in .xam.job.error plaatsen:
| xam.job.query:: level_not_supported | Het systeem van de Opslag XAM kan het vraagniveau steunen niet dat in de vraagbaan wordt gespecificeerd. Een non-fatal fout. |
| xam.job.query:: invalid_command_syntax | Een non-fatal syntaxisfout kwam terwijl het ontleden van het vraagkoord voor |
| xam.job.query:: insufficient_permission | De momenteel voor authentiek verklaarde gebruiker heeft voldoende niet toestemming om de vraagbaan uit te voeren |
| xam.job.query:: insufficient_resources | Het systeem van de Opslag XAM heeft geen voldoende middelen om de vraagbaan te voltooien |
Wanneer een vraagbaan voor welk reden ook, standaardbaangezondheid en statusgebieden, d.w.z. .xam.job.errorhealth en .xam.job.status, aan aangewezen waarden en het Systeem worden geplaatst van de Opslag XAM kan nul of meer extra XUIDs in de resultaten XStream plaatsen wordt gestopt. Aldus zou een toepassing volledige waarden XUID in de resultaten XStream altijd moeten zien. Het hervatten van een gestopte vraagbaan wordt niet gesteund.
Merk op dat, in tegenstelling tot een traditionele RDBMS, er geen sluiten van een Systeem van de Opslag XAM tijdens de uitvoering van een vraagbaan is. Aldus is een vraagresultaat geen onmiddellijke momentopname van een Systeem van de Opslag XAM. De inhoud van een Systeem van de Opslag XAM kan of kan niet veranderen terwijl een vraagbaan wordt uitgevoerd. De algemene regel is dat om het even welke XSet die vóór het begin van de vraagbaan is opgeslagen in de resultaten XStream inbegrepen is als het aan de vraagcriteria voldoet, en om het even welke XSet die is opgeslagen nadat de vraagbaan heeft voltooid moet niet in de resultaten XStream worden omvat. XSets dat tijdens de uitvoering wordt opgeslagen van de vraagbaan kan of kan niet worden omvat. De zelfde criteria is op de resultaten XStream van toepassing. Het kan XUIDs van XSets omvatten dat niet meer in het Systeem van de Opslag XAM en XUIDs van XSets is dat niet meer aan de onderzoekscriteria toe te schrijven aan een verandering in XSet voldoen nadat bijzondere XSet werd gevraagd.
Hier is een eenvoudige toepassing van Java die vraagt een te bepalen Systeem van de Opslag XAM het niveau van steun voor vragen XAM is.
import org.snia.xam.XAMException;
import org.snia.xam.XAMLibrary;
import org.snia.xam.XSystem;
import org.snia.xam.toolkit.XAMXUID;
import org.snia.xam.util.XAMLibraryFactory;
public class CheckQuerySupport
{
private static XAMLibrary xamLib;
private static XSystem xSystem;
public static void main(String[] args)
{
String xri = "snia-xam://centera_vim!XXX.XXXX.XXX.XXX?/home/fpm/xam/xamconnect.pea";
long exitCode = 0;
boolean isSupported = false;
try
{
xamLib = XAMLibraryFactory.newXAMLibrary();
System.out.println("Connecting to XSystem: " + xri + "\n");
xSystem = xamLib.connect(xri);
// support job commit?
isSupported = xSystem.getBoolean(XSystem.XAM_XSYSTEM_JOB_COMMIT_SUPPORTED);
System.out.println("Support job commit? " + (isSupported ? "Yes" : "No"));
// support continuance of job?
isSupported = xSystem.getBoolean(XSystem.XAM_XSYSTEM_JOB_QUERY_CONTINUANCE_SUPPORTED);
System.out.println("Support job continuance? " + (isSupported ? "Yes" : "No"));
// support level 1 query?
isSupported = xSystem.getBoolean(XSystem.XAM_XSYSTEM_JOB_QUERY_LEVEL1_SUPPORTED);
System.out.println("Support level 1 query? " + (isSupported ? "Yes" : "No"));
// support level 2 query?
isSupported = xSystem.getBoolean(XSystem.XAM_XSYSTEM_JOB_QUERY_LEVEL2_SUPPORTED);
System.out.println("Support level 2 query? " + (isSupported ? "Yes" : "No"));
xSystem.close();
System.out.println("\nClosed connection to XSystem");
} catch (XAMException xe) {
exitCode = xe.getStatusCode();
System.err.println("XAM Error occured: " + xe.getMessage());
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
e.printStackTrace();
exitCode = 1;
}
System.exit((int) exitCode);
}
}
Hier is de output van deze toepassing wanneer verbonden met een EMC Centera XAM Systeem van de Opslag
Connecting to XSystem: snia-xam://centera_vim!XXX.XXX.XXX.XXX?/home/fpm/xam/xamconnect.pea Support job commit? No Support job continuance? No Support level 1 query? Yes Support level 2 query? No Closed connection to XSystem
Hier is een langere toepassing van Java die drie steekproef XSets en de steekproefvragen uitvoert die in hoofdstuk 10.8 van het Document van de xam- Architectuur V1.0 worden besproken.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.snia.xam.XAMException;
import org.snia.xam.XAMLibrary;
import org.snia.xam.XSet;
import org.snia.xam.XStream;
import org.snia.xam.XSystem;
import org.snia.xam.XUID;
import org.snia.xam.toolkit.XAMXUID;
import org.snia.xam.util.XAMLibraryFactory;
public class QueryExample
{
private static XAMLibrary xamLib;
private static XSystem xSystem;
private static void CreateXset(int parm1, String parm2, double parm3)
throws XAMException
{
System.out.print("Create XSet 1 .... ");
XSet xSet = xSystem.createXSet(XSet.MODE_UNRESTRICTED);
xSet.createProperty("com.example.rhc", false, true);
xSet.createProperty("com,example.foo", false, parm1);
xSet.createProperty("com.example.bar", false, parm2);
xSet.createProperty("com.example.num", false, parm3);
XUID xuID = xSet.commit();
System.out.println("XUID: " + xuID.toString());
xSet.close();
}
private static void CreateXset(int parm1, int parm2, int parm3)
throws XAMException
{
System.out.print("Create XSet 2 .... ");
XSet xSet = xSystem.createXSet(XSet.MODE_UNRESTRICTED);
xSet.createProperty("com.example.rhc", false, true);
xSet.createProperty("com,example.foo", false, parm1);
xSet.createProperty("com.example.bar", false, parm2);
xSet.createProperty("com.example.num", false, parm3);
XUID xuID = xSet.commit();
System.out.println("XUID: " + xuID.toString());
xSet.close();
}
private static void CreateXset(int parm1, int parm2)
throws XAMException
{
System.out.print("Create XSet 3 .... ");
XSet xSet = xSystem.createXSet(XSet.MODE_UNRESTRICTED);
xSet.createProperty("com.example.rhc", false, true);
xSet.createProperty("com,example.foo", false, parm1);
xSet.createProperty("com.example.num", false, parm2);
XUID xuID = xSet.commit();
System.out.println("XUID: " + xuID.toString());
xSet.close();
}
private static void QueryXsystem(String queryString)
throws XAMException
{
boolean finished = false;
final int XAM_MAX_XUID = 80;
int resultCount = 0;
String status;
System.out.println("Create query XSet. Query string: " + queryString);
XSet query = xSystem.createXSet(XSet.MODE_UNRESTRICTED);
query.createProperty(XSet.XAM_JOB_COMMAND, true, XSet.XAM_JOB_QUERY);
byte[] buffer = queryString.getBytes();
XStream queryStream = query.createXStream(XSet.XAM_JOB_QUERY_COMMAND, true, XAMLibrary.TEXT_PLAIN_MIME_TYPE);
queryStream.write(buffer);
queryStream.close();
System.out.println("Submit query job ....");
query.submitJob();
System.out.println("Wait for query job to finish ....");
while (!finished)
{
// check status of query job
status = query.getString(XSet.XAM_JOB_ERRORHEALTH);
if (status.equals(XSet.XAM_JOB_ERRORHEALTH_ERROR))
{
System.out.println("ERROR: Errorhealth - " + query.getString(XSet.XAM_JOB_ERROR));
query.haltJob();
System.out.println("ERROR: Job halted");
break;
}
status = query.getString(XSet.XAM_JOB_STATUS);
resultCount = (int) query.getLong(XSet.XAM_JOB_QUERY_RESULTS_COUNT);
// uncomment if you want continuous job status
// System.out.println("Job Status: " + status + " Result count: " + resultCount);
// exit loop if job complete
if (status.equals(XSet.XAM_JOB_STATUS_COMPLETE))
{
finished = true;
}
}
System.out.println("Query job completed ....");
System.out.println("Result set final count is: " + resultCount);
if (resultCount > 0)
{
// open query job result stream
XStream results = query.openXStream(XSet.XAM_JOB_QUERY_RESULTS, XStream.MODE_READ_ONLY);
byte rawXUID[] = new byte[XAM_MAX_XUID];
long bytesRead = 0;
// output XUIDs in result set
while( (bytesRead = results.read(rawXUID, XAM_MAX_XUID)) >= 0 )
{
XAMXUID resultXUID = new XAMXUID(rawXUID);
System.out.println("XUID: " + resultXUID.toString());
}
results.close();
}
query.close();
}
public static void main(String[] args)
{
String xri = "snia-xam://centera_vim!XXX.XXX.XXX.XXX?/home/fpm/xam/xamconnect.pea";
long exitCode = 0;
try
{
xamLib = XAMLibraryFactory.newXAMLibrary();
// uncomment next 2 lines if you want extensive XAM Library logging
// xamLib.setProperty(XAMLibrary.XAM_LOG_VERBOSITY, 1);
// xamLib.setProperty(XAMLibrary.XAM_LOG_LEVEL, 5);
System.out.println("Connecting to XSystem " + xri + "\n");
xSystem = xamLib.connect(xri);
xSystem.setProperty(".xsystem.log.verbosity", 1);
xSystem.setProperty(".xsystem.log.level", 5);
CreateXset(1, "string", 123.55);
CreateXset(77, 42, 100);
CreateXset(6, 200);
xSystem.close();
System.out.println("\nClose/reopen XSystem\n");
xSystem = xamLib.connect(xri);
// uncomment one or more of the following queries
// QueryXsystem("select \".xset.xuid\"");
QueryXsystem("select \".xset.xuid\" where (\"com.example.foo\" > 0) and (\"com.example.foo\" < 50)");
// QueryXsystem("select \".xset.xuid\" where (\"com.example.bar\" > 0) and (\"com.example.bar\" < 100)");
// QueryXsystem("select \".xset.xuid\" where exists (\"com.example.bar\")");
// QueryXsystem("select \".xset.xuid\" where \"com.example.bar\" like '%ing%'");
// QueryXsystem("select \".xset.xuid\" where \"com.example.num\" >= 124");
// QueryXsystem("select \".xset.xuid\" where \"com.example.num\" >= 124.6 ");
// QueryXsystem("select \".xset.xuid\" where (\"com.example.num\" >= 123) and typeof(\"com.example.num\") = 'application/vnd.snia.xam.int'");
xSystem.close();
System.out.println("\nClosed connection to XSystem");
} catch (XAMException xe) {
exitCode = xe.getStatusCode();
System.err.println("XAM Error occured: " + xe.getMessage() + "("
+ exitCode + ")");
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
e.printStackTrace();
exitCode = -1;
}
System.exit((int) exitCode);
}
}
Merk op dat de resultaten XStream die door een vraagbaan door een toepassing kunnen wordt geproduceerd worden verbruikt alvorens het Systeem van de Opslag XAM klaar is met het opslaan van alle XUIDs in de resultaten XStream als XStream.asyncRead in plaats van XStream.read wordt gebruikt.
Goed denk ik ik genoeg informatie en voorbeelden heb verstrekt om u toe te laten om spel met de XAM vraagtaal door zich te gaan. Het u vergt hulp ik ben zeker de Groep van de Ontwikkelaar XAM op Groepen Google meer dan gelukkig zal zijn om u te helpen.
In scheiding zou ik erop wijzen dat aangezien de leveranciers van het Systeem van de Opslag XAM momenteel slechts steun voor vragen over de inhoudsmeta-gegevens moeten uitvoeren, ik verdenk dat de steun voor daadwerkelijke volledige tevreden-gebaseerde onderzoeken die XAM gebruiken niet voor wat tijd kan voorkomen.


























