diff --git a/JSON/samples/BenchmarkApp/Makefile b/JSON/samples/BenchmarkApp/Makefile new file mode 100644 index 000000000..71774f64c --- /dev/null +++ b/JSON/samples/BenchmarkApp/Makefile @@ -0,0 +1,17 @@ +# +# Makefile +# +# $Id$ +# +# Makefile for Poco JSON BenchmarkApp +# + +include $(POCO_BASE)/build/rules/global + +objects = BenchmarkApp + +target = BenchmarkApp +target_version = 1 +target_libs = PocoJSON PocoFoundation + +include $(POCO_BASE)/build/rules/exec diff --git a/JSON/samples/BenchmarkApp/input b/JSON/samples/BenchmarkApp/input new file mode 100644 index 000000000..9eea6ad6e --- /dev/null +++ b/JSON/samples/BenchmarkApp/input @@ -0,0 +1,88 @@ +{"web-app": { + "servlet": [ + { + "servlet-name": "cofaxCDS", + "servlet-class": "org.cofax.cds.CDSServlet", + "init-param": { + "configGlossary:installationAt": "Philadelphia, PA", + "configGlossary:adminEmail": "ksm@pobox.com", + "configGlossary:poweredBy": "Cofax", + "configGlossary:poweredByIcon": "/images/cofax.gif", + "configGlossary:staticPath": "/content/static", + "templateProcessorClass": "org.cofax.WysiwygTemplate", + "templateLoaderClass": "org.cofax.FilesTemplateLoader", + "templatePath": "templates", + "templateOverridePath": "", + "defaultListTemplate": "listTemplate.htm", + "defaultFileTemplate": "articleTemplate.htm", + "useJSP": false, + "jspListTemplate": "listTemplate.jsp", + "jspFileTemplate": "articleTemplate.jsp", + "cachePackageTagsTrack": 200, + "cachePackageTagsStore": 200, + "cachePackageTagsRefresh": 60, + "cacheTemplatesTrack": 100, + "cacheTemplatesStore": 50, + "cacheTemplatesRefresh": 15, + "cachePagesTrack": 200, + "cachePagesStore": 100, + "cachePagesRefresh": 10, + "cachePagesDirtyRead": 10, + "searchEngineListTemplate": "forSearchEnginesList.htm", + "searchEngineFileTemplate": "forSearchEngines.htm", + "searchEngineRobotsDb": "WEB-INF/robots.db", + "useDataStore": true, + "dataStoreClass": "org.cofax.SqlDataStore", + "redirectionClass": "org.cofax.SqlRedirection", + "dataStoreName": "cofax", + "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", + "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", + "dataStoreUser": "sa", + "dataStorePassword": "dataStoreTestQuery", + "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", + "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", + "dataStoreInitConns": 10, + "dataStoreMaxConns": 100, + "dataStoreConnUsageLimit": 100, + "dataStoreLogLevel": "debug", + "maxUrlLength": 500}}, + { + "servlet-name": "cofaxEmail", + "servlet-class": "org.cofax.cds.EmailServlet", + "init-param": { + "mailHost": "mail1", + "mailHostOverride": "mail2"}}, + { + "servlet-name": "cofaxAdmin", + "servlet-class": "org.cofax.cds.AdminServlet"}, + + { + "servlet-name": "fileServlet", + "servlet-class": "org.cofax.cds.FileServlet"}, + { + "servlet-name": "cofaxTools", + "servlet-class": "org.cofax.cms.CofaxToolsServlet", + "init-param": { + "templatePath": "toolstemplates/", + "log": 1, + "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", + "logMaxSize": "", + "dataLog": 1, + "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", + "dataLogMaxSize": "", + "removePageCache": "/content/admin/remove?cache=pages&id=", + "removeTemplateCache": "/content/admin/remove?cache=templates&id=", + "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", + "lookInContext": 1, + "adminGroupID": 4, + "betaServer": true}}], + "servlet-mapping": { + "cofaxCDS": "/", + "cofaxEmail": "/cofaxutil/aemail/*", + "cofaxAdmin": "/admin/*", + "fileServlet": "/static/*", + "cofaxTools": "/tools/*"}, + + "taglib": { + "taglib-uri": "cofax.tld", + "taglib-location": "/WEB-INF/tlds/cofax.tld"}}} diff --git a/JSON/samples/BenchmarkApp/src/BenchmarkApp.cpp b/JSON/samples/BenchmarkApp/src/BenchmarkApp.cpp new file mode 100644 index 000000000..dd1cadfbb --- /dev/null +++ b/JSON/samples/BenchmarkApp/src/BenchmarkApp.cpp @@ -0,0 +1,111 @@ +// +// BenchmarkApp.cpp +// +// $Id$ +// +// This sample shows a benchmark of the JSON parser. +// +// Copyright (c) 2004-2012, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// + +#include "Poco/Timestamp.h" +#include "Poco/JSON/Parser.h" +#include "Poco/JSON/DefaultHandler.h" +#include "Poco/JSON/JSONException.h" +#include "Poco/Environment.h" +#include "Poco/Path.h" +#include "Poco/File.h" +#include "Poco/FileStream.h" +#include "Poco/StreamCopier.h" + +#include +#include + +void printTimeDiff(const Poco::Timestamp& start, const Poco::Timestamp& end) +{ + Poco::Timestamp::TimeDiff diff = end - start; + std::cout << std::setw(25) << std::left << diff; +} + +int main(int argc, char** argv) +{ + Poco::JSON::Object::Ptr obj; + + std::string dir = Poco::Environment::get("POCO_BASE") + "/JSON/samples/BenchmarkApp/"; + Poco::Path filePath(dir, "input"); + + std::ostringstream ostr; + + if ( filePath.isFile() ) + { + Poco::File inputFile(filePath); + if ( inputFile.exists() ) + { + Poco::FileInputStream fis(filePath.toString()); + Poco::StreamCopier::copyStream(fis, ostr); + } + else + { + std::cout << filePath.toString() << " doesn't exist!" << std::endl; + return 1; + } + } + + std::cout << std::setw(25) << "POCO JSON"; + + std::string jsonStr = ostr.str(); + + try + { + Poco::JSON::DefaultHandler handler; + Poco::JSON::Parser parser; + parser.setHandler(&handler); + Poco::Timestamp time1; + parser.parse(jsonStr); + Poco::DynamicAny result = handler.result(); + Poco::Timestamp time2; + printTimeDiff(time1, time2); + + if ( result.type() == typeid(Poco::JSON::Object::Ptr) ) + { + obj = result.extract(); + } + + //Serialize to string + std::ostringstream out; + Poco::Timestamp time3; + obj->stringify(out); + Poco::Timestamp time4; + printTimeDiff(time3, time4); + std::cout << std::endl; + } + catch(Poco::JSON::JSONException jsone) + { + std::cout << jsone.message() << std::endl; + } + + return 0; +} diff --git a/JSON/samples/Makefile b/JSON/samples/Makefile new file mode 100644 index 000000000..e3881715a --- /dev/null +++ b/JSON/samples/Makefile @@ -0,0 +1,13 @@ +# +# Makefile +# +# $Id$ +# +# Makefile for Poco JSON Samples +# + +.PHONY: projects +clean all: projects +projects: + $(MAKE) -C BenchmarkApp $(MAKECMDGOALS) +