فهرست منبع

MySQL connection and single query test passing

Zane Kansil 10 سال پیش
والد
کامیت
b86d24291f

+ 4 - 0
.gitignore

@@ -3,6 +3,10 @@ installs
 *.log
 node_modules/
 
+# Added for pedestal framework test
+lib/
+.lein-deps-sum
+
 # eclipse
 .classpath
 .project

+ 2 - 1
frameworks/Clojure/pedestal/benchmark_config

@@ -5,6 +5,7 @@
       "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
+      "db_url": "/db",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Micro",
@@ -17,7 +18,7 @@
       "os": "Linux",
       "database_os": "Linux",
       "display_name": "pedestal",
-      "notes": ""
+      "notes": "servlet"
     }
   }]
 }

+ 4 - 2
frameworks/Clojure/pedestal/project.clj

@@ -5,13 +5,15 @@
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.6.0"]
                  [io.pedestal/pedestal.service "0.3.1"]
-
                  [io.pedestal/pedestal.jetty "0.3.1"]
                  [ch.qos.logback/logback-classic "1.1.2" :exclusions [org.slf4j/slf4j-api]]
                  [org.slf4j/jul-to-slf4j "1.7.7"]
                  [org.slf4j/jcl-over-slf4j "1.7.7"]
                  [org.slf4j/log4j-over-slf4j "1.7.7"]
-                 [org.clojure/data.json "0.2.5"]]
+                 [org.clojure/data.json "0.2.5"]
+                 [org.clojure/java.jdbc "0.3.6"]
+                 [korma "0.4.0"]
+                 [mysql/mysql-connector-java "5.1.6"]]
   :min-lein-version "2.0.0"
   :resource-paths ["config", "resources"]
   :profiles {:dev {:aliases {"run-dev" ["trampoline" "run" "-m" "pedestal.server/run-dev"]}

+ 2 - 2
frameworks/Clojure/pedestal/setup.sh

@@ -1,7 +1,7 @@
 #!/bin/bash
-# adopted from compojure/setup.sh
+# Adopted from compojure/setup.sh
 
-$LEIN_HOME/bin/lein deps
+$LEIN_HOME/bin/lein clean
 rm -rf target
 # pack all dependencies into a single jar: target/pedestal-standalone.jar
 $LEIN_HOME/bin/lein uberjar

+ 44 - 8
frameworks/Clojure/pedestal/src/pedestal/service.clj

@@ -1,16 +1,14 @@
 (ns pedestal.service
+  (:import com.mchange.v2.c3p0.ComboPooledDataSource)
+  (:use korma.db
+        korma.core)
   (:require [io.pedestal.http :as bootstrap]
             [io.pedestal.http.route :as route]
             [io.pedestal.http.body-params :as body-params]
             [io.pedestal.http.route.definition :refer [defroutes]]
             [ring.util.response :as ring-resp]
-            [clojure.data.json :as json]))
-
-(defn about-page
-  [request]
-  (ring-resp/response (format "Clojure %s - served from %s"
-                              (clojure-version)
-                              (route/url-for ::about-page))))
+            [clojure.data.json :as json]
+            [clojure.java.jdbc :as jdbc]))
 
 (defn json-serialization
   [request]
@@ -20,13 +18,51 @@
   [request]
   (ring-resp/response "Hello, World!"))
 
+;; Database Tests
+;; Adopted from compojure/hello/src/hello/handler.clj
+(defdb mysql-db
+  (mysql {
+    :classname "com.mysql.jdbc.Driver"
+    :subprotocol "mysql"
+    :subname "//localhost:3306/hello_world"
+    :user "benchmarkdbuser"
+    :password "benchmarkdbpass"
+    ;;OPTIONAL KEYS
+    :delimiters "" ;; remove delimiters
+    :maximum-pool-size 256}))
+
 
+; Set up entity World and the database representation
+(defentity world
+  (pk :id)
+  (table :world)
+  (entity-fields :id :randomNumber) ;; Default fields for select
+  (database mysql-db))
 
+; Query a random World record from the database
+(defn random-world []
+  (let [id (inc (rand-int 9999))] ; Num between 1 and 10,000
+    (select world
+      (where {:id id }))))
+
+; Run query repeatedly and return results
+(defn run-queries
+  [queries]
+  (let [data (flatten (take queries (repeatedly random-world)))]
+    (if (= queries 1)
+      (first data)
+      (data))))
+
+(defn single-query
+  [request]
+  (bootstrap/json-response (run-queries 1)))
 
+;; All of the available routes
 (defroutes routes
   [[
   [  "/json" {:get json-serialization}]
-  [  "/plaintext" {:get plaintext}]]])
+  [  "/plaintext" {:get plaintext}]
+  [  "/db" {:get single-query}]]])
 
 ;; How the server will look, not the code to start it up
 (def service {:env :prod