Browse Source

Replaced Servlet DSL with Revenj.

Added DB tests.
Both Java and C# version.

Rebased with upstream.
Sync with Java8 changes.
Removed installation of official/stable Mono - which makes Revenj.NET fail in Travis (due to some random/buggy/snapshot version of Mono used in installation).
That snapshot version doesn't even exists on server anymore, so clean installation fails for all mono dependant frameworks.
Rikard Pavelic 9 years ago
parent
commit
e8d493b587
48 changed files with 1004 additions and 161 deletions
  1. 2 1
      .travis.yml
  2. 9 0
      frameworks/CSharp/revenj/.gitignore
  3. 29 0
      frameworks/CSharp/revenj/README.md
  4. 29 0
      frameworks/CSharp/revenj/Revenj.Bench.sln
  5. 32 0
      frameworks/CSharp/revenj/Revenj.Bench/Context.cs
  6. 151 0
      frameworks/CSharp/revenj/Revenj.Bench/RestService.cs
  7. 101 0
      frameworks/CSharp/revenj/Revenj.Bench/Revenj.Bench.csproj
  8. 9 0
      frameworks/CSharp/revenj/Revenj.Bench/model.dsl
  9. 30 0
      frameworks/CSharp/revenj/Revenj.Http.exe.config
  10. 49 0
      frameworks/CSharp/revenj/benchmark_config.json
  11. 3 0
      frameworks/CSharp/revenj/install.sh
  12. 75 0
      frameworks/CSharp/revenj/setup.ps1
  13. 43 0
      frameworks/CSharp/revenj/setup.sh
  14. 4 0
      frameworks/CSharp/revenj/source_code
  15. 6 0
      frameworks/Java/revenj/.gitignore
  16. 34 0
      frameworks/Java/revenj/README.md
  17. 27 0
      frameworks/Java/revenj/benchmark_config.json
  18. 2 0
      frameworks/Java/revenj/deploy.sh
  19. 13 12
      frameworks/Java/revenj/pom.xml
  20. 50 0
      frameworks/Java/revenj/setup.sh
  21. 9 0
      frameworks/Java/revenj/source_code
  22. 72 0
      frameworks/Java/revenj/src/main/java/hello/Context.java
  23. 23 0
      frameworks/Java/revenj/src/main/java/hello/DbServlet.java
  24. 4 4
      frameworks/Java/revenj/src/main/java/hello/JsonServlet.java
  25. 1 1
      frameworks/Java/revenj/src/main/java/hello/PlaintextServlet.java
  26. 21 0
      frameworks/Java/revenj/src/main/java/hello/QueriesServlet.java
  27. 29 0
      frameworks/Java/revenj/src/main/java/hello/UpdatesServlet.java
  28. 34 0
      frameworks/Java/revenj/src/main/java/hello/Utils.java
  29. 9 0
      frameworks/Java/revenj/src/main/java/hello/model.dsl
  30. 52 0
      frameworks/Java/revenj/src/main/webapp/WEB-INF/web.xml
  31. 52 0
      frameworks/Java/revenj/web.xml
  32. 0 29
      frameworks/Java/servlet-dsl/README.md
  33. 0 24
      frameworks/Java/servlet-dsl/benchmark_config.json
  34. 0 2
      frameworks/Java/servlet-dsl/deploy.sh
  35. BIN
      frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.jar
  36. 0 1
      frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.jar.md5
  37. 0 1
      frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.jar.sha1
  38. 0 8
      frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.pom
  39. 0 1
      frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.pom.md5
  40. 0 1
      frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.pom.sha1
  41. 0 12
      frameworks/Java/servlet-dsl/model/dsl/gen-model/maven-metadata.xml
  42. 0 1
      frameworks/Java/servlet-dsl/model/dsl/gen-model/maven-metadata.xml.md5
  43. 0 1
      frameworks/Java/servlet-dsl/model/dsl/gen-model/maven-metadata.xml.sha1
  44. 0 8
      frameworks/Java/servlet-dsl/setup.sh
  45. 0 10
      frameworks/Java/servlet-dsl/source_code
  46. 0 19
      frameworks/Java/servlet-dsl/src/main/java/dsl/Utils.java
  47. 0 5
      frameworks/Java/servlet-dsl/src/main/java/dsl/model.dsl
  48. 0 20
      frameworks/Java/servlet-dsl/src/main/webapp/WEB-INF/web.xml

+ 2 - 1
.travis.yml

@@ -25,6 +25,7 @@ env:
     - "TESTDIR=CSharp/evhttp-sharp"
     ## - "TESTDIR=CSharp/HttpListener"
     - "TESTDIR=CSharp/nancy"
+    - "TESTDIR=CSharp/revenj"
     - "TESTDIR=CSharp/servicestack"
     - "TESTDIR=C++/cpoll_cppsp"
     - "TESTDIR=C++/silicon"
@@ -93,9 +94,9 @@ env:
     - "TESTDIR=Java/play2-java"
     - "TESTDIR=Java/rapidoid"
     - "TESTDIR=Java/restexpress"
+    - "TESTDIR=Java/revenj"
     - "TESTDIR=Java/servlet"
     - "TESTDIR=Java/servlet3-cass"
-    - "TESTDIR=Java/servlet-dsl"
     - "TESTDIR=Java/spark"
     - "TESTDIR=Java/sabina"
     - "TESTDIR=Java/spring"

+ 9 - 0
frameworks/CSharp/revenj/.gitignore

@@ -0,0 +1,9 @@
+*.user
+*.suo
+*.jar
+*.zip
+dsl-compiler.*
+*/bin/*
+*/obj/*
+exe/
+tmp/

+ 29 - 0
frameworks/CSharp/revenj/README.md

@@ -0,0 +1,29 @@
+# Revenj.NET on Mono and Windows
+
+Revenj HTTP server + DB API + JSON API + PostgreSQL.
+It uses precompiled DSL model for POCO classes.
+
+## DSL model
+Data structures are defined in a DSL schema
+
+ * [DSL source](Revenj.Bench/model.dsl)
+
+## Test source
+
+ * [C#](Revenj.Bench/RestService.cs)
+
+## Test URLs
+
+ * Plaintext - `http://localhost:8080/bench/plaintext`
+ * JSON - `http://localhost:8080/bench/json`
+ * DB - `http://localhost:8080/bench/db`
+ * Queries - `http://localhost:8080/bench/queries/{count}`
+ * Updates -  `http://localhost:8080/bench/updates/{count}`
+
+## Software Versions
+The tests were run with:
+
+ * [Mono 4.2](http://www.mono-project.com/)
+ * [.NET 4.0](https://www.microsoft.com/net)
+ * [Postgres 9.3](http://www.postgresql.org/)
+ * [Revenj.NET 1.2.1](http://github.com/ngs-doo/revenj)

+ 29 - 0
frameworks/CSharp/revenj/Revenj.Bench.sln

@@ -0,0 +1,29 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Revenj.Bench", "Revenj.Bench\Revenj.Bench.csproj", "{14DC9873-30EA-41DA-8D7B-5AA03E7E2EE2}"
+EndProject
+Global
+	GlobalSection(DslPlatformSolutionProperties) = preSolution
+		Php.Name = Php
+		Php.Target = Php
+		Postgres.Compile = True
+		Postgres.Name = ServerModel
+		Postgres.Target = exe
+		Postgres.Dependencies = exe
+		Postgres.WithManualJson = True
+	EndGlobalSection
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{14DC9873-30EA-41DA-8D7B-5AA03E7E2EE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14DC9873-30EA-41DA-8D7B-5AA03E7E2EE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{14DC9873-30EA-41DA-8D7B-5AA03E7E2EE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{14DC9873-30EA-41DA-8D7B-5AA03E7E2EE2}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 32 - 0
frameworks/CSharp/revenj/Revenj.Bench/Context.cs

@@ -0,0 +1,32 @@
+using System;
+using System.IO;
+using FrameworkBench;
+using Revenj.DatabasePersistence;
+using Revenj.DatabasePersistence.Postgres;
+using Revenj.DomainPatterns;
+using Revenj.Extensibility;
+using Revenj.Utility;
+
+namespace Revenj.Bench
+{
+	internal class Context
+	{
+		public readonly ChunkedMemoryStream Stream;
+		public readonly TextWriter Writer;
+		public readonly IPersistableRepository<World> Repository;
+		public readonly IRepositoryBulkReader BulkReader;
+		public readonly Lazy<World>[] LazyWorlds = new Lazy<World>[512];
+		public readonly World[] Worlds = new World[512];
+
+		public Context(IServiceProvider service)
+		{
+			Stream = ChunkedMemoryStream.Static();
+			Writer = Stream.GetWriter();
+			var dqm = service.Resolve<IDatabaseQueryManager>();
+			var factory = service.Resolve<IObjectFactory>().CreateInnerFactory();
+			factory.RegisterInterfaces(dqm.StartQuery(false));
+			Repository = factory.Resolve<IPersistableRepository<World>>();
+			BulkReader = factory.BulkRead(ChunkedMemoryStream.Static());
+		}
+	}
+}

+ 151 - 0
frameworks/CSharp/revenj/Revenj.Bench/RestService.cs

@@ -0,0 +1,151 @@
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.ServiceModel;
+using System.ServiceModel.Web;
+using System.Text;
+using FrameworkBench;
+using Revenj.Api;
+using Revenj.DomainPatterns;
+using Revenj.Serialization;
+using Revenj.Utility;
+
+namespace Revenj.Bench
+{
+	[ServiceContract(Namespace = "https://github.com/ngs-doo/revenj")]
+	public interface IRestService
+	{
+		[OperationContract]
+		[WebGet(UriTemplate = "/plaintext")]
+		[Description("Plain text response")]
+		Stream PlainText();
+
+		[OperationContract]
+		[WebGet(UriTemplate = "/json")]
+		[Description("JSON response")]
+		Stream JSON();
+
+		[OperationContract]
+		[WebGet(UriTemplate = "/db")]
+		[Description("Single database query")]
+		Stream SingleQuery();
+
+		[OperationContract]
+		[WebGet(UriTemplate = "/queries/{count}")]
+		[Description("Multiple database queries")]
+		Stream MultipleQueries(string count);
+
+		[OperationContract]
+		[WebGet(UriTemplate = "/updates/{count}")]
+		[Description("Database updates")]
+		Stream Updates(string count);
+	}
+
+	public class RestService : IRestService
+	{
+		private static readonly ChunkedMemoryStream HelloWorld = ChunkedMemoryStream.Static();
+		private static readonly string[] IDs = new string[10001];
+		[ThreadStatic]
+		private static Context Context;
+		private static Context GetContext(IServiceProvider services)
+		{
+			if (Context == null)
+				Context = new Context(services);
+			Context.Stream.Reset();
+			return Context;
+		}
+
+		static RestService()
+		{
+			var hwText = Encoding.UTF8.GetBytes("Hello, World!");
+			HelloWorld.Write(hwText, 0, hwText.Length);
+			HelloWorld.Position = 0;
+			for (int i = 0; i < IDs.Length; i++)
+				IDs[i] = i.ToString();
+		}
+
+		private Random Random = new Random(0);
+		private readonly IServiceProvider Services;
+
+		public RestService(IServiceProvider services)
+		{
+			this.Services = services;
+		}
+
+		public Stream PlainText()
+		{
+			ThreadContext.Response.ContentType = "text/plain";
+			return HelloWorld;
+		}
+
+		private Stream ReturnJSON(IJsonObject value, ChunkedMemoryStream cms)
+		{
+			value.Serialize(cms);
+			ThreadContext.Response.ContentType = "application/json";
+			return cms;
+		}
+
+		public Stream JSON()
+		{
+			var ctx = GetContext(Services);
+			return ReturnJSON(new Message { message = "Hello, World!" }, ctx.Stream);
+		}
+
+		public Stream SingleQuery()
+		{
+			var id = Random.Next(10000) + 1;
+			var ctx = GetContext(Services);
+			var world = ctx.Repository.Find(IDs[id]);
+			return ReturnJSON(world, ctx.Stream);
+		}
+
+		private void LoadWorlds(int repeat, Context ctx)
+		{
+			var reader = ctx.BulkReader;
+			var lazyResult = ctx.LazyWorlds;
+			var worlds = ctx.Worlds;
+			reader.Reset(true);
+			for (int i = 0; i < repeat; i++)
+			{
+				var id = Random.Next(10000) + 1;
+				lazyResult[i] = reader.Find<World>(IDs[id]);
+			}
+			reader.Execute();
+			for (int i = 0; i < repeat; i++)
+				worlds[i] = lazyResult[i].Value;
+		}
+
+		public Stream MultipleQueries(string count)
+		{
+			int repeat;
+			int.TryParse(count, out repeat);
+			if (repeat < 1) repeat = 1;
+			else if (repeat > 500) repeat = 500;
+			var ctx = GetContext(Services);
+			LoadWorlds(repeat, ctx);
+			var cms = ctx.Stream;
+			ctx.Worlds.Serialize(cms, repeat);
+			ThreadContext.Response.ContentType = "application/json";
+			return cms;
+		}
+
+		public Stream Updates(string count)
+		{
+			int repeat;
+			int.TryParse(count, out repeat);
+			if (repeat < 1) repeat = 1;
+			else if (repeat > 500) repeat = 500;
+			var ctx = GetContext(Services);
+			LoadWorlds(repeat, ctx);
+			var result = new World[repeat];
+			Array.Copy(ctx.Worlds, result, repeat);
+			for (int i = 0; i < result.Length; i++)
+				result[i].randomNumber = Random.Next(10000) + 1;
+			ctx.Repository.Update(result);
+			var cms = ctx.Stream;
+			result.Serialize(cms);
+			ThreadContext.Response.ContentType = "application/json";
+			return cms;
+		}
+	}
+}

+ 101 - 0
frameworks/CSharp/revenj/Revenj.Bench/Revenj.Bench.csproj

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{14DC9873-30EA-41DA-8D7B-5AA03E7E2EE2}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Revenj.Bench</RootNamespace>
+    <AssemblyName>Revenj.Bench</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\exe\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\exe\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Revenj.Api.Interface">
+      <HintPath>..\exe\Revenj.Api.Interface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.DatabasePersistence.Interface">
+      <HintPath>..\exe\Revenj.DatabasePersistence.Interface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.DatabasePersistence.Postgres">
+      <HintPath>..\exe\Revenj.DatabasePersistence.Postgres.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.DomainPatterns.Interface">
+      <HintPath>..\exe\Revenj.DomainPatterns.Interface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.Extensibility.Interface">
+      <HintPath>..\exe\Revenj.Extensibility.Interface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.Processing">
+      <HintPath>..\exe\Revenj.Processing.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.Serialization">
+      <HintPath>..\exe\Revenj.Serialization.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.Serialization.Interface">
+      <HintPath>..\exe\Revenj.Serialization.Interface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Revenj.Utility">
+      <HintPath>..\exe\Revenj.Utility.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="ServerModel">
+      <HintPath>..\exe\ServerModel.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.ServiceModel.Web" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Context.cs" />
+    <Compile Include="RestService.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\Revenj.Http.exe.config">
+      <Link>Revenj.Http.exe.config</Link>
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="model.dsl" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Properties\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 9 - 0
frameworks/CSharp/revenj/Revenj.Bench/model.dsl

@@ -0,0 +1,9 @@
+module FrameworkBench {
+	struct Message {
+		String message;
+	}
+	sql World from world(id) {
+		int id;
+		int randomNumber from randomnumber;
+	}
+}

+ 30 - 0
frameworks/CSharp/revenj/Revenj.Http.exe.config

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+  <configSections>
+    <section name="autofacConfiguration" type="Revenj.Extensibility.Autofac.Configuration.SectionHandler, Revenj.Extensibility" />
+  </configSections>
+  <appSettings>
+    <add key="PluginsPath" value="." />
+    <add key="ServerAssembly" value="ServerModel.dll"/>
+    <add key="ConnectionString" value="server=localhost;port=5432;database=hello_world;user=benchmarkdbuser;password=benchmarkdbpass" />
+    <add key="HttpAddress_local" value="http://0.0.0.0:8080/" />
+    <add key="Revenj.HttpServer" value="Socket"/>
+    <add key="CustomAuth" value="Revenj.Http.NoAuth"/>
+    <add key="Revenj.Notifications" value="disabled"/>
+  </appSettings>
+  <system.serviceModel>
+    <serviceHostingEnvironment>
+      <serviceActivations>
+        <add relativeAddress="bench" service="Revenj.Bench.RestService, Revenj.Bench" />
+      </serviceActivations>
+    </serviceHostingEnvironment>
+  </system.serviceModel>
+  <autofacConfiguration>
+    <modules>
+      <module type="Revenj.Wcf.StandardModule, Revenj.Wcf" />
+    </modules>
+    <components>
+      <component type="Revenj.Http.NoAuth, Revenj.Http" service="Revenj.Security.IPermissionManager, Revenj.Security.Interface" />
+    </components>
+  </autofacConfiguration>
+</configuration>

+ 49 - 0
frameworks/CSharp/revenj/benchmark_config.json

@@ -0,0 +1,49 @@
+{
+  "framework": "Revenj.NET",
+  "tests": [{
+    "windows": {
+      "setup_file": "setup",
+      "json_url": "/bench/json",
+      "db_url": "/bench/db",
+      "query_url": "/bench/queries/",
+      "plaintext_url": "/bench/plaintext",
+      "update_url": "/bench/updates/",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "Postgres",
+      "database_os": "Linux",
+      "framework": "Revenj.NET",
+      "language": "C#",
+      "orm": "Full",
+      "platform": ".NET",
+      "webserver": "Revenj.NET",
+      "os": "Windows",
+      "display_name": "Revenj.NET",
+      "notes": "",
+      "versus": ""
+    },
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/bench/json",
+      "db_url": "/bench/db",
+      "query_url": "/bench/queries/",
+      "plaintext_url": "/bench/plaintext",
+      "update_url": "/bench/updates/",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "Postgres",
+      "database_os": "Linux",
+      "framework": "Revenj.NET",
+      "language": "C#",
+      "orm": "Full",
+      "platform": "Mono",
+      "webserver": "Revenj.NET",
+      "os": "Linux",
+      "display_name": "Revenj.NET",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 3 - 0
frameworks/CSharp/revenj/install.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+fw_depends mono java

+ 75 - 0
frameworks/CSharp/revenj/setup.ps1

@@ -0,0 +1,75 @@
+param($action)
+
+if (!$TROOT) {
+  $TROOT = "C:\FrameworkBenchmarks\frameworks\CSharp\revenj"
+}
+if (!$DBHOST) {
+  $DBHOST = "localhost"
+}
+
+Add-Type -AssemblyName System.IO.Compression.FileSystem
+
+$msbuild = $Env:windir + "\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"
+$java=$Env:JAVA_HOME + "\bin\java"
+$dslclc=$TROOT + "\dsl-clc.jar"
+$httpZip=$TROOT + "\http-server.zip"
+$dslZip=$TROOT + "\dsl-compiler.zip"
+$sln=$TROOT + "\Revenj.Bench.sln"
+$revenj=$TROOT + "\exe\Revenj.Http.exe"
+$exe=$TROOT + "\exe\"
+$config=$TROOT + "\exe\Revenj.Http.exe.config"
+
+echo "Stopping existing Revenj.Http"
+Stop-Process -Name "Revenj.Http*" -ErrorAction 'SilentlyContinue' | Out-Null
+
+if ($action -eq 'start') {
+
+	echo "Cleaning up..."
+	If (Test-Path $TROOT/exe) {
+	  rmdir $TROOT/exe -recurse -force
+	}
+	if (Test-Path $TROOT/dsl-clc.jar) {
+	  rm $TROOT/dsl-clc.jar
+	}
+	if (Test-Path $TROOT/http-server.zip) {
+	  rm $TROOT/http-server.zip
+	}
+	if (Test-Path $TROOT/dsl-compiler.zip) {
+	  rm $TROOT/dsl-compiler.zip
+	}
+	if (Test-Path $TROOT/dsl-compiler.exe) {
+	  rm $TROOT/dsl-compiler.exe
+	}
+
+	echo "Download DSL compiler client"
+	$client = new-object System.Net.WebClient
+	$client.DownloadFile( "https://github.com/ngs-doo/dsl-compiler-client/releases/download/1.5.0/dsl-clc.jar", $dslclc )
+
+	echo "Download Revenj HTTP server"
+	$client = new-object System.Net.WebClient
+	$client.DownloadFile( "https://github.com/ngs-doo/revenj/releases/download/1.2.1/http-server.zip", $httpZip )
+
+	echo "Unzipping HTTP server"
+	[System.IO.Compression.ZipFile]::ExtractToDirectory($httpZip, $exe)
+
+	echo "Download DSL compiler for Revenj.NET 1.2.1"
+	$client = new-object System.Net.WebClient
+	$client.DownloadFile( "https://github.com/ngs-doo/revenj/releases/download/1.2.1/dsl-compiler.zip", $dslZip )
+
+	echo "Unzipping DSL compiler"
+	[System.IO.Compression.ZipFile]::ExtractToDirectory($dslZip, $TROOT)
+	
+	echo "Compiling the server model and downloading DSL Platform compiler..."
+	&$java -jar $dslclc temp=$TROOT/tmp/ force dsl=$TROOT/Revenj.Bench manual-json revenj.net=$TROOT/exe/ServerModel.dll no-prompt dependencies:revenj.net=$TROOT/exe download compiler=$TROOT/dsl-compiler.exe
+
+	echo "Compiling the benchmark project..."
+	&$msbuild $sln /p:Configuration=Release /t:Rebuild
+
+	echo "Copying the configuration template"
+	$template = Get-Content $TROOT/Revenj.Http.exe.config
+	$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
+	[System.IO.File]::WriteAllText($config, $template.Replace("server=localhost", "server=" + $DBHOST), $Utf8NoBomEncoding)
+
+	echo "Starting Revenj..."
+	Start-Process $revenj
+}

+ 43 - 0
frameworks/CSharp/revenj/setup.sh

@@ -0,0 +1,43 @@
+#!/bin/bash
+
+fw_depends java mono
+
+echo "Cleaning up..."
+rm -rf $TROOT/exe $TROOT/tmp $TROOT/dsl-clc.jar $TROOT/http-server.zip  $TROOT/dsl-compiler.zip $TROOT/dsl-compiler.exe
+
+echo "Download DSL compiler client"
+wget -O $TROOT/dsl-clc.jar https://github.com/ngs-doo/dsl-compiler-client/releases/download/1.5.0/dsl-clc.jar
+
+echo "Download Revenj.NET HTTP server 1.2.1"
+wget -O $TROOT/http-server.zip https://github.com/ngs-doo/revenj/releases/download/1.2.1/http-server.zip
+
+echo "Unzipping HTTP server"
+unzip $TROOT/http-server.zip -d $TROOT/exe
+
+echo "Download DSL compiler for Revenj.NET 1.2.1"
+wget -O $TROOT/dsl-compiler.zip https://github.com/ngs-doo/revenj/releases/download/1.2.1/dsl-compiler.zip
+
+echo "Unzipping DSL compiler"
+unzip $TROOT/dsl-compiler.zip -d $TROOT
+
+echo "Compiling the server model and downloading dependencies..."
+java -jar $TROOT/dsl-clc.jar \
+	temp=$TROOT/tmp/ \
+	force \
+	dsl=$TROOT/Revenj.Bench \
+	manual-json \
+	compiler=$TROOT/dsl-compiler.exe \
+	revenj.net=$TROOT/exe/ServerModel.dll \
+	no-prompt \
+	dependencies:revenj.net=$TROOT/exe \
+	download
+
+echo "Compiling the benchmark project..."
+xbuild $TROOT/Revenj.Bench/Revenj.Bench.csproj /t:Rebuild /p:Configuration=Release
+
+echo "Copying the configuration template"
+cat $TROOT/Revenj.Http.exe.config | sed 's|\(ConnectionString.*server=\)localhost|\1'"${DBHOST}"'|' > $TROOT/exe/Revenj.Http.exe.config
+
+echo "Running the Revenj instance"
+mono $TROOT/exe/Revenj.Http.exe
+sleep 5

+ 4 - 0
frameworks/CSharp/revenj/source_code

@@ -0,0 +1,4 @@
+./revenj/Revenj.Bench/Context.cs
+./revenj/Revenj.Bench/RestService.cs
+./revenj/Revenj.Bench/model.dsl
+./revenj/Revenj.Http.exe.config

+ 6 - 0
frameworks/Java/revenj/.gitignore

@@ -0,0 +1,6 @@
+dsl-clc.jar
+dsl-compiler.*
+*.zip
+revenj.java/
+target/
+model/

+ 34 - 0
frameworks/Java/revenj/README.md

@@ -0,0 +1,34 @@
+#Revenj.JVM Benchmarking Test
+
+Servlet + Revenj DB API + DSL-JSON + PostgreSQL.
+It uses precompiled DSL model for POJO classes.
+
+### DSL model
+Data structures are defined in a DSL schema
+
+ * [DSL source](src/main/java/hello/model.dsl)
+
+### Test sources
+
+ * [Plaintext](src/main/java/hello/PlaintextServlet.java)
+ * [JSON](src/main/java/hello/JsonServlet.java)
+ * [DB](src/main/java/hello/DbServlet.java)
+ * [Queries](src/main/java/hello/QueriesServlet.java)
+ * [Updates](src/main/java/hello/UpdatesServlet.java)
+
+## Software Versions
+The tests were run with:
+
+ * [Oracle Java 1.8](https://www.oracle.com/java/)
+ * [Postgres 9.3](http://www.postgresql.org/)
+ * [Resin 4.0](http://www.caucho.com/)
+ * [DSL JSON 0.9.3](http://github.com/ngs-doo/dsl-json)
+ * [Revenj.Java 0.8.0](http://github.com/ngs-doo/revenj)
+
+## Test URLs
+
+ * Plaintext - `http://localhost:8080/revenj/plaintext`
+ * JSON - `http://localhost:8080/revenj/json`
+ * DB - `http://localhost:8080/revenj/db`
+ * Queries - `http://localhost:8080/revenj/queries?queries={count}`
+ * Updates -  `http://localhost:8080/revenj/updates?queries={count}`

+ 27 - 0
frameworks/Java/revenj/benchmark_config.json

@@ -0,0 +1,27 @@
+{
+  "framework": "Revenj.JVM",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/revenj/json",
+      "plaintext_url": "/revenj/plaintext",
+      "db_url": "/revenj/db",
+      "query_url": "/revenj/queries?queries=",
+      "update_url": "/revenj/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "Postgres",
+      "framework": "Revenj.JVM",
+      "language": "Java",
+      "orm": "Full",
+      "platform": "Servlet",
+      "webserver": "Resin",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Revenj.JVM",
+      "notes": "",
+      "versus": "servlet"
+    }
+  }]
+}

+ 2 - 0
frameworks/Java/revenj/deploy.sh

@@ -0,0 +1,2 @@
+mvn install
+cp ./target/revenj.war ~/opt/resin/webapps/

+ 13 - 12
frameworks/Java/servlet-dsl/pom.xml → frameworks/Java/revenj/pom.xml

@@ -2,18 +2,17 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
-	<groupId>bench.dsl</groupId>
-	<artifactId>dsl</artifactId>
-	<name>Servlet DSL</name>
+	<groupId>com.techempower</groupId>
+	<artifactId>revenj</artifactId>
+	<name>Revenj.JVM</name>
 	<packaging>war</packaging>
-	<version>1.0.0-BUILD-SNAPSHOT</version>
+	<version>1.0.0</version>
 	<properties>
-		<java-version>1.7</java-version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
 	<repositories>
 		<repository>
-			<id>model-in-project-repo</id>
+			<id>model</id>
 			<url>file:${project.basedir}/model</url>
 		</repository>
 	</repositories>
@@ -24,9 +23,9 @@
 			<version>1.0</version>
 		</dependency>
 		<dependency>
-			<groupId>com.dslplatform</groupId>
-			<artifactId>dsl-client-java</artifactId>
-			<version>1.3.0</version>
+			<groupId>org.revenj</groupId>
+			<artifactId>revenj-core</artifactId>
+			<version>0.8.0</version>
 		</dependency>
 		<dependency>
 			<groupId>javax.servlet</groupId>
@@ -40,16 +39,18 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.3</version>
 				<configuration>
-					<source>${java-version}</source>
-					<target>${java-version}</target>
+					<source>1.8</source>
+					<target>1.8</target>
 				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-war-plugin</artifactId>
+				<version>2.6</version>
 				<configuration>
-					<warName>servlet-dsl</warName>
+					<warName>revenj</warName>
 				</configuration>
 			</plugin>
 		</plugins>

+ 50 - 0
frameworks/Java/revenj/setup.sh

@@ -0,0 +1,50 @@
+#!/bin/bash
+
+fw_depends java resin maven mono
+
+source $IROOT/java.installed
+
+echo "Cleaning up..."
+rm -rf $TROOT/tmp $TROOT/model $TROOT/revenj.java $TROOT/dsl-clc.jar $TROOT/dsl-compiler.zip $TROOT/dsl-compiler.exe $TROOT/revenj-java-0.8.zip
+
+echo "Download DSL compiler client"
+wget -O $TROOT/dsl-clc.jar https://github.com/ngs-doo/dsl-compiler-client/releases/download/1.5.0/dsl-clc.jar
+
+echo "Download compatible DSL compiler"
+wget -O $TROOT/dsl-compiler.zip https://github.com/ngs-doo/revenj/releases/download/1.2.1/dsl-compiler.zip
+
+echo "Unzipping DSL compiler"
+unzip $TROOT/dsl-compiler.zip -d $TROOT
+
+echo "Prepare Revenj 0.8 dependencies"
+wget -O $TROOT/revenj-java-0.8.zip https://compiler.dsl-platform.com:8443/platform/download/revenj-java-0.8.zip
+unzip $TROOT/revenj-java-0.8.zip -d $TROOT/revenj.java
+
+echo "Compiling the server model and downloading dependencies..."
+java -jar $TROOT/dsl-clc.jar \
+	temp=$TROOT/tmp/ \
+	force \
+	dsl=$TROOT/src \
+	manual-json \
+	compiler=$TROOT/dsl-compiler.exe \
+	namespace=dsl \
+	revenj.java=$TROOT/model/gen-model.jar \
+	no-prompt \
+	download
+
+echo "Adding model to local Maven repository..."
+mvn deploy:deploy-file \
+	-Durl=file://model \
+	-Dfile=model/gen-model.jar \
+	-DgroupId=dsl \
+	-DartifactId=gen-model \
+	-Dpackaging=jar \
+	-Dversion=1.0
+
+echo "Changing the database"
+cat $TROOT/web.xml | sed 's/localhost/'$DBHOST'/g' > $TROOT/src/main/webapp/WEB-INF/web.xml
+	
+mvn clean compile war:war
+rm -rf $RESIN_HOME/webapps/*
+cp target/revenj.war $RESIN_HOME/webapps/
+JAVA_EXE=$JAVA_HOME/bin/java resinctl start

+ 9 - 0
frameworks/Java/revenj/source_code

@@ -0,0 +1,9 @@
+./revenj/src/main/java/hello/Context.java
+./revenj/src/main/java/hello/DbServlet.java
+./revenj/src/main/java/hello/JsonServlet.java
+./revenj/src/main/java/hello/model.dsl
+./revenj/src/main/java/hello/PlaintextServlet.java
+./revenj/src/main/java/hello/QueriesServlet.java
+./revenj/src/main/java/hello/UpdatesServlet.java
+./revenj/src/main/java/hello/Utils.java
+./revenj/src/main/webapp/WEB-INF/web.xml

+ 72 - 0
frameworks/Java/revenj/src/main/java/hello/Context.java

@@ -0,0 +1,72 @@
+package hello;
+
+import com.dslplatform.json.JsonWriter;
+import dsl.Boot;
+import dsl.FrameworkBench.World;
+import dsl.FrameworkBench.repositories.WorldRepository;
+import org.revenj.extensibility.Container;
+import org.revenj.patterns.*;
+
+import java.io.IOException;
+import java.sql.*;
+import java.util.*;
+import java.util.concurrent.*;
+
+class Context {
+	private static final ServiceLocator locator;
+	private static final String jdbcUrl;
+
+	static {
+		try {
+			javax.naming.Context ctx = new javax.naming.InitialContext();
+			jdbcUrl = (String) ctx.lookup("java:comp/env/revenj.jdbcUrl");
+			Properties props = new Properties();
+			props.setProperty("revenj.notifications.status", "disabled");
+			locator = Boot.configure(jdbcUrl, props);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public final JsonWriter json;
+	public final WorldRepository repository;
+	public final Connection connection;
+	private final ThreadLocalRandom random;
+	public final RepositoryBulkReader bulkReader;
+	public final World[] worlds = new World[512];
+	public final Callable[] callables = new Callable[512];
+
+	public Context() {
+		try {
+			Container ctx = locator.resolve(Container.class);
+			this.connection = DriverManager.getConnection(jdbcUrl);
+			connection.setAutoCommit(true);
+			ctx.registerInstance(connection);
+			this.json = new JsonWriter();
+			this.random = ThreadLocalRandom.current();
+			this.repository = ctx.resolve(WorldRepository.class);
+			this.bulkReader = ctx.resolve(RepositoryBulkReader.class);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public int getRandom10k() {
+		return random.nextInt(10000) + 1;
+	}
+
+	public void loadWorlds(final int count) throws IOException {
+		bulkReader.reset();
+		for (int i = 0; i < count; i++) {
+			callables[i] = bulkReader.find(World.class, Integer.toString(getRandom10k()));
+		}
+		bulkReader.execute();
+		try {
+			for (int i = 0; i < count; i++) {
+				worlds[i] = ((Optional<World>) callables[i].call()).get();
+			}
+		} catch (Exception e) {
+			throw new IOException(e);
+		}
+	}
+}

+ 23 - 0
frameworks/Java/revenj/src/main/java/hello/DbServlet.java

@@ -0,0 +1,23 @@
+package hello;
+
+import com.dslplatform.json.JsonWriter;
+import dsl.FrameworkBench.World;
+
+import java.io.*;
+import java.util.*;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+public class DbServlet extends HttpServlet {
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+		res.setContentType("application/json");
+		final Context ctx = Utils.getContext();
+		final Optional<World> world = ctx.repository.find(ctx.getRandom10k(), ctx.connection);
+		final JsonWriter writer = ctx.json;
+		world.get().serialize(writer, false);
+		writer.toStream(res.getOutputStream());
+	}
+}

+ 4 - 4
frameworks/Java/servlet-dsl/src/main/java/dsl/JsonServlet.java → frameworks/Java/revenj/src/main/java/hello/JsonServlet.java

@@ -1,7 +1,7 @@
-package dsl;
+package hello;
 
-import com.dslplatform.client.json.JsonWriter;
-import dsl.Bench.Message;
+import com.dslplatform.json.JsonWriter;
+import dsl.FrameworkBench.Message;
 
 import java.io.*;
 
@@ -13,7 +13,7 @@ public class JsonServlet extends HttpServlet {
 	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
 		res.setContentType("application/json");
 		final Message msg = new Message("Hello, World!");
-		final JsonWriter writer = Utils.getJson();
+		final JsonWriter writer = Utils.getContext().json;
 		msg.serialize(writer, false);
 		writer.toStream(res.getOutputStream());
 	}

+ 1 - 1
frameworks/Java/servlet-dsl/src/main/java/dsl/PlaintextServlet.java → frameworks/Java/revenj/src/main/java/hello/PlaintextServlet.java

@@ -1,4 +1,4 @@
-package dsl;
+package hello;
 
 import java.io.*;
 import java.nio.charset.Charset;

+ 21 - 0
frameworks/Java/revenj/src/main/java/hello/QueriesServlet.java

@@ -0,0 +1,21 @@
+package hello;
+
+import com.dslplatform.json.JsonWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.*;
+import java.io.IOException;
+
+public class QueriesServlet extends HttpServlet {
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+		res.setContentType("application/json");
+		final int count = Utils.parseBoundParam(req);
+		final Context ctx = Utils.getContext();
+		final JsonWriter json = ctx.json;
+		ctx.loadWorlds(count);
+		json.serialize(ctx.worlds, count);
+		json.toStream(res.getOutputStream());
+	}
+}

+ 29 - 0
frameworks/Java/revenj/src/main/java/hello/UpdatesServlet.java

@@ -0,0 +1,29 @@
+package hello;
+
+import com.dslplatform.json.JsonWriter;
+import dsl.FrameworkBench.World;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.*;
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class UpdatesServlet extends HttpServlet {
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+		res.setContentType("application/json");
+		final int count = Utils.parseBoundParam(req);
+		final Context ctx = Utils.getContext();
+		final JsonWriter json = ctx.json;
+		ctx.loadWorlds(count);
+		final World[] worlds = ctx.worlds;
+		final ArrayList<World> changed = new ArrayList<>(count);
+		for (int i = 0; i < count; i++) {
+			changed.add(worlds[i].setRandomNumber(ctx.getRandom10k()));
+		}
+		ctx.repository.update(changed);
+		json.serialize(worlds, count);
+		json.toStream(res.getOutputStream());
+	}
+}

+ 34 - 0
frameworks/Java/revenj/src/main/java/hello/Utils.java

@@ -0,0 +1,34 @@
+package hello;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+class Utils {
+
+	private static final ThreadLocal<Context> threadContext = new ThreadLocal<Context>() {
+		@Override
+		protected Context initialValue() {
+			return new Context();
+		}
+	};
+
+	static Context getContext() throws IOException {
+		Context ctx = threadContext.get();
+		ctx.json.reset();
+		return ctx;
+	}
+
+	public static int parseBoundParam(HttpServletRequest request) {
+		int count = 1;
+		try {
+			count = Integer.parseInt(request.getParameter("queries"));
+			if (count > 500) {
+				count = 500;
+			} else if (count < 1) {
+				count = 1;
+			}
+		} catch (NumberFormatException ignore) {
+		}
+		return count;
+	}
+}

+ 9 - 0
frameworks/Java/revenj/src/main/java/hello/model.dsl

@@ -0,0 +1,9 @@
+module FrameworkBench {
+	struct Message {
+		String message;
+	}
+	sql World from world(id) {
+		int id;
+		int randomNumber from randomnumber;
+	}
+} 

+ 52 - 0
frameworks/Java/revenj/src/main/webapp/WEB-INF/web.xml

@@ -0,0 +1,52 @@
+<web-app>
+    <env-entry>
+        <env-entry-name>revenj.jdbcUrl</env-entry-name>
+        <env-entry-type>java.lang.String</env-entry-type>
+        <env-entry-value>jdbc:postgresql://localhost:5432/hello_world?user=benchmarkdbuser&amp;password=benchmarkdbpass</env-entry-value>
+    </env-entry>
+	<servlet>
+		<servlet-name>json</servlet-name>
+		<servlet-class>hello.JsonServlet</servlet-class>
+		<load-on-startup>2</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>json</servlet-name>
+		<url-pattern>/json</url-pattern>
+	</servlet-mapping>
+	<servlet>
+		<servlet-name>plaintext</servlet-name>
+		<servlet-class>hello.PlaintextServlet</servlet-class>
+		<load-on-startup>2</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>plaintext</servlet-name>
+		<url-pattern>/plaintext</url-pattern>
+	</servlet-mapping>
+    <servlet>
+        <servlet-name>db</servlet-name>
+        <servlet-class>hello.DbServlet</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>db</servlet-name>
+        <url-pattern>/db</url-pattern>
+    </servlet-mapping>
+    <servlet>
+        <servlet-name>queries</servlet-name>
+        <servlet-class>hello.QueriesServlet</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>queries</servlet-name>
+        <url-pattern>/queries</url-pattern>
+    </servlet-mapping>
+    <servlet>
+        <servlet-name>updates</servlet-name>
+        <servlet-class>hello.UpdatesServlet</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>updates</servlet-name>
+        <url-pattern>/updates</url-pattern>
+    </servlet-mapping>
+</web-app>

+ 52 - 0
frameworks/Java/revenj/web.xml

@@ -0,0 +1,52 @@
+<web-app>
+    <env-entry>
+        <env-entry-name>revenj.jdbcUrl</env-entry-name>
+        <env-entry-type>java.lang.String</env-entry-type>
+        <env-entry-value>jdbc:postgresql://localhost:5432/hello_world?user=benchmarkdbuser&amp;password=benchmarkdbpass</env-entry-value>
+    </env-entry>
+	<servlet>
+		<servlet-name>json</servlet-name>
+		<servlet-class>hello.JsonServlet</servlet-class>
+		<load-on-startup>2</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>json</servlet-name>
+		<url-pattern>/json</url-pattern>
+	</servlet-mapping>
+	<servlet>
+		<servlet-name>plaintext</servlet-name>
+		<servlet-class>hello.PlaintextServlet</servlet-class>
+		<load-on-startup>2</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>plaintext</servlet-name>
+		<url-pattern>/plaintext</url-pattern>
+	</servlet-mapping>
+    <servlet>
+        <servlet-name>db</servlet-name>
+        <servlet-class>hello.DbServlet</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>db</servlet-name>
+        <url-pattern>/db</url-pattern>
+    </servlet-mapping>
+    <servlet>
+        <servlet-name>queries</servlet-name>
+        <servlet-class>hello.QueriesServlet</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>queries</servlet-name>
+        <url-pattern>/queries</url-pattern>
+    </servlet-mapping>
+    <servlet>
+        <servlet-name>updates</servlet-name>
+        <servlet-class>hello.UpdatesServlet</servlet-class>
+        <load-on-startup>2</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>updates</servlet-name>
+        <url-pattern>/updates</url-pattern>
+    </servlet-mapping>
+</web-app>

+ 0 - 29
frameworks/Java/servlet-dsl/README.md

@@ -1,29 +0,0 @@
-#DSL Servlet Benchmarking Test
-
-This servlet uses precompiled DSL model for endpoint communication.
-
-### DSL model
-Data structure is defined in an DSL schema
-
-* [DSL source](src/main/java/dsl/model.dsl)
-
-### JSON Encoding Test
-DSL client Java is used for JSON encoding.
-
-* [JSON test source](src/main/java/dsl/JsonServlet.java)
-
-## Infrastructure Software Versions
-The tests were run with:
-
-* [Oracle Java 1.7](https://www.oracle.com/java/)
-* [Resin 4.0](http://www.caucho.com/)
-* [DSL client Java 1.3](http://github.com/ngs-doo/dsl-client-java)
-
-## Test URLs
-### JSON Encoding Test
-
-http://localhost:8080/servlet-dsl/json
-
-### Plaintext Test
-
-http://localhost:8080/servlet-dsl/plaintext

+ 0 - 24
frameworks/Java/servlet-dsl/benchmark_config.json

@@ -1,24 +0,0 @@
-{
-  "framework": "servlet-dsl",
-  "tests": [{
-    "default": {
-      "setup_file": "setup",
-      "json_url": "/servlet-dsl/json",
-      "plaintext_url": "/servlet-dsl/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Platform",
-      "database": "None",
-      "framework": "servlet-dsl",
-      "language": "Java",
-      "orm": "raw",
-      "platform": "Servlet",
-      "webserver": "Resin",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "servlet-dsl",
-      "notes": "",
-      "versus": "servlet"
-    }
-  }]
-}

+ 0 - 2
frameworks/Java/servlet-dsl/deploy.sh

@@ -1,2 +0,0 @@
-mvn install
-cp ./target/servlet-dsl.war ~/opt/resin/webapps/

BIN
frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.jar


+ 0 - 1
frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.jar.md5

@@ -1 +0,0 @@
-45b38e88d3eb838b78eb947e5b1e2578

+ 0 - 1
frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.jar.sha1

@@ -1 +0,0 @@
-511b3dd6195eb1b0e5cc4b902c20fe184fed3ae4

+ 0 - 8
frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.pom

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>dsl</groupId>
-  <artifactId>gen-model</artifactId>
-  <version>1.0</version>
-</project>

+ 0 - 1
frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.pom.md5

@@ -1 +0,0 @@
-8518cdb4e2551b606362f56f046f5a2d

+ 0 - 1
frameworks/Java/servlet-dsl/model/dsl/gen-model/1.0/gen-model-1.0.pom.sha1

@@ -1 +0,0 @@
-1ce2d619e446a597ccb49800713be24cc7e24ae5

+ 0 - 12
frameworks/Java/servlet-dsl/model/dsl/gen-model/maven-metadata.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata>
-  <groupId>dsl</groupId>
-  <artifactId>gen-model</artifactId>
-  <version>1.0</version>
-  <versioning>
-    <versions>
-      <version>1.0</version>
-    </versions>
-    <lastUpdated>20150530090523</lastUpdated>
-  </versioning>
-</metadata>

+ 0 - 1
frameworks/Java/servlet-dsl/model/dsl/gen-model/maven-metadata.xml.md5

@@ -1 +0,0 @@
-e8adfc0495234223ccf282ae10fab448

+ 0 - 1
frameworks/Java/servlet-dsl/model/dsl/gen-model/maven-metadata.xml.sha1

@@ -1 +0,0 @@
-15b07c07f297f084a813f5b7b36b5c78ede343ab

+ 0 - 8
frameworks/Java/servlet-dsl/setup.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends java resin maven
-
-mvn clean compile war:war
-rm -rf $RESIN_HOME/webapps/*
-cp target/servlet-dsl.war $RESIN_HOME/webapps/
-resinctl start

+ 0 - 10
frameworks/Java/servlet-dsl/source_code

@@ -1,10 +0,0 @@
-./servlet/src/main/
-./servlet/src/main/webapp
-./servlet/src/main/webapp/WEB-INF
-./servlet/src/main/webapp/WEB-INF/web.xml
-./servlet/src/main/java
-./servlet/src/main/java/dsl
-./servlet/src/main/java/dsl/JsonServlet.java
-./servlet/src/main/java/dsl/model.dsl
-./servlet/src/main/java/dsl/PlaintextServlet.java
-./servlet/src/main/java/dsl/Utils.java

+ 0 - 19
frameworks/Java/servlet-dsl/src/main/java/dsl/Utils.java

@@ -1,19 +0,0 @@
-package dsl;
-
-import com.dslplatform.client.json.JsonWriter;
-
-public class Utils {
-
-	private static final ThreadLocal<JsonWriter> threadWriter = new ThreadLocal<JsonWriter>() {
-		@Override
-		protected JsonWriter initialValue() {
-			return new JsonWriter();
-		}
-	};
-
-	public static JsonWriter getJson() {
-		final JsonWriter writer = threadWriter.get();
-		writer.reset();
-		return writer;
-	}
-}

+ 0 - 5
frameworks/Java/servlet-dsl/src/main/java/dsl/model.dsl

@@ -1,5 +0,0 @@
-module Bench {
-    value Message {
-        string message;
-    }
-}

+ 0 - 20
frameworks/Java/servlet-dsl/src/main/webapp/WEB-INF/web.xml

@@ -1,20 +0,0 @@
-<web-app>
-	<servlet>
-		<servlet-name>json</servlet-name>
-		<servlet-class>dsl.JsonServlet</servlet-class>
-		<load-on-startup>2</load-on-startup>
-	</servlet>
-	<servlet-mapping>
-		<servlet-name>json</servlet-name>
-		<url-pattern>/json</url-pattern>
-	</servlet-mapping>
-	<servlet>
-		<servlet-name>plaintext</servlet-name>
-		<servlet-class>dsl.PlaintextServlet</servlet-class>
-		<load-on-startup>2</load-on-startup>
-	</servlet>
-	<servlet-mapping>
-		<servlet-name>plaintext</servlet-name>
-		<url-pattern>/plaintext</url-pattern>
-	</servlet-mapping>
-</web-app>