The ClojureWerkz Blog

News and updates about ClojureWerkz projects

Monger 3.0.0-rc1 Is Released

TL;DR

Monger is an idiomatic Clojure MongoDB driver for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. It also has solid documentation.

3.0.0 is a major release based on version 3.0 of the MongoDB Java driver.

We are only getting started with migrating to the 3.0 Java driver. This release focuses on removing Monger API elements that are no longer available. There are quite a few impovements that Monger can use: more efficient serislisation API, asynchronous API, and so on. Monger will make use of those in future 3.x releases.

We’d like to thank Jeff Yemin and Ross Lawley from MongoDB for helping us migrate, sharing Java client roadmap, and answering our endless questions. Monger 3.0 would ship months later if this wasn’t for them.

Changes between 2.1.0 and 3.0.0

Monger 3.0 is based on the MongoDB Java driver 3.0 and has some (relatively minor) breaking API changes.

Error Handling Built Around Write Concerns

Monger no longer provides monger.core/get-last-error. It is no longer needed: write concerns and exceptions is now the primary way for clients to be notified of operation failures.

New Authentication API

MongoDB 3.0 supports different authentication mechanisms. Multiple credentials can be specified for a single connection. The client and the server then can negotiate what authentication mechanism to use and which set of credentials succeed.

Monger introduces a new namespace for credential instantiation: monger.credentials. The most common function that relies on authentication mechanism negotiation is monger.credentials/for:

1
2
3
4
5
6
(require '[monger.core :as mg])
(require '[monger.credentials :as mcr])

(let [creds (mcr/for "username" "db-name" "pa$$w0rd")
      conn  (mg/connect-with-credentials "127.0.0.1" creds)]
      )

mg/connect-with-credentials is the most convenient function to connect with if you plan on using authentication.

When connecting using a URI, the API hasn’t changed.

monger.search is Gone

monger.search is gone. MongoDB 3.0 supports search queries using regular query operators, namely $text. monger.operators is extended to include $text, $search, $language, and $natural.

An example of a search query in 3.0:

1
2
3
4
5
6
7
8
9
(require '[monger.core :as mg])
(require '[monger.credentials :as mcr])
(require '[monger.collection :as mc])
(require '[monger.operators :refer [$text $search]])

(let [creds (mcr/for "username" "db-name" "pa$$w0rd")
      conn  (mg/connect-with-credentials "127.0.0.1" creds)
      db    (mg/get-db conn "db-name")]
  (mc/find-maps db "collection" {$text {$search "hello"}}))

JSON Serialization of BSON Timestamps

JSON serialisation extensions now support BSON timestamps.

Contributed by Tom McMillen.

Change Log

Monger change log is available on GitHub.

Monger is a ClojureWerkz Project

Monger is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Cassaforte, a Clojure Cassandra client built around CQL
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Welle, a Riak client with batteries included
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Monger, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

About the Author

@michaelklishin on behalf of the ClojureWerkz Team

Money 1.8.0 Is Released

Money is a Clojure library that deals with monetary amounts and currencies, built on top of Joda Money.

1.8.0 is a minor release.

Changes between 1.7.0 and 1.8.0

Conversion Supports BigDecimals

clojurewerkz.money.amounts/convert-to now accepts BigDecimals.

Contributed by TJ Gabbour.

Change Log

Money change log is available on GitHub.

Money is a ClojureWerkz Project

Money is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Cassaforte, a Clojure client for Cassandra built around CQL 3
  • Monger, a Clojure MongoDB driver for a more civilized age
  • Welle, a Riak client with batteries included
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Money, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

@michaelklishin on behalf of the ClojureWerkz Team

Elastisch 2.2.0-beta4 Is Released

TL;DR

Elastisch is a battle tested, small but feature rich and well documented Clojure client for ElasticSearch. It supports virtually every Elastic Search feature and has solid documentation.

2.2.0-beta4 is a preview release of Elastisch 2.2 which introduces minor improvements.

Changes between Elastisch 2.2.0-beta3 and 2.2.0-beta4

ElasticSearch Java Client Upgrade

Elastisch now depends on ElasticSearch Java client version 1.5.x.

clj-http Update

clj-http dependency has been upgraded to version 1.1.x.

Better support for plural/single indices and aliases in native update-aliases

  • :remove action now works with singular :index key
  • multiple aliases can be added with single :add action
  • alias can be removed from multiple indices with single :remove action

Contributed by @mnylen

Index Settings Now Allow Keywordized Keys When Creating Index Using Native API

Previously only mappings allowed keys to be keywords, now same works with index settings.

Contributed by @mnylen

Changes between Elastisch 2.2.0-beta2 and 2.2.0-beta3

Support for Large Scroll IDs

Elastisch now supports scroll IDs larger than 4 KB.

Contributed by niko.

Changes between Elastisch 2.2.0-beta1 and 2.2.0-beta2

Bulk Operation Support in Native Client

Native client now supports bulk operations with the same API as the REST one.

Contributed by

  • Mitchel Kuijpers (Avisi)
  • Michael Nussbaum and Jack Lund (Braintree)

Fixed unregister-query in Native Client

clojurewerkz.elastisch.native.percolation/unregister-query arguments were mistakenly swapped when delegating to the Java client.

Contributed by Stephen Muss.

Guava Excluded From Dependencies

Contributed by Jan Stępień (Stylefruits).

Full Change Log

Elastisch change log is available on GitHub.

Thank You, Contributors

Kudos to Michael Nussbaum and Jeffrey Erikson for contributing to this release.

Elastisch is a ClojureWerkz Project

Elastisch is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Cassaforte, a Clojure Cassandra client
  • Monger, a Clojure MongoDB client for a more civilized age
  • Neocons, a client for the Neo4J REST API
  • Welle, a Riak client with batteries included
  • Quartzite, a powerful scheduling library

and several others. If you like Elastisch, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

About the Author

Michael on behalf of the ClojureWerkz Team

Pantomime 2.6.0 Is Released

TL;DR

Pantomime is a Clojure interface to Apache Tika. 2.6.0 is a minor release that upgrades Tika.

Apache Tika 1.8

Apache Tika dependency has been upgraded to version 1.8.

Change Log

Pantomime change log is available on GitHub.

Pantomime is a ClojureWerkz Project

Pantomime is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL
  • Monger, a Clojure MongoDB client for a more civilized age
  • Welle, a Riak client with batteries included
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Pantomime, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

Michael on behalf of the ClojureWerkz Team

Langohr 3.2.0 Is Released

TL;DR

Langohr is a small Clojure RabbitMQ client.

3.2.0 is a minor feature release.

Changes between Langohr 3.1.x and 3.2.0

Authentication Mechanism Support

Langohr now converts :authentication-mechanism option to a SASL mechanism. Two values are supported:

  • "PLAIN"
  • "EXTERNAL"

Contributed by Tap.

RabbitMQ Java Client Upgrade

RabbitMQ Java client dependency has been updated to 3.5.x.

Change Log

Langohr change log is available on GitHub.

Langohr is a ClojureWerkz Project

Langohr is part of the group of libraries known as ClojureWerkz, together with

  • Elastisch, a minimalistic well documented Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL 3.0
  • Monger, a Clojure MongoDB client for a more civilized age
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Langohr, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

About The Author

Michael on behalf of the ClojureWerkz Team

Pantomime 2.5.0 Is Released

TL;DR

Pantomime is a Clojure interface to Apache Tika.

Changes between Pantomime 2.4.0 and 2.5.0

Content Extraction API

Pantomime now provdes access to Tika’s content extraction functionality via pantomime.extract/parse:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(require [clojure.java.io :as io]
         [pantomime.extract :as extract])

(pprint (extract/parse "test/resources/pdf/qrl.pdf"))

;= {:producer ("GNU Ghostscript 7.05"),
;=  :pdf:pdfversion ("1.2"),
;=  :dc:title ("main.dvi"),
;=  :dc:format ("application/pdf; version=1.2"),
;=  :xmp:creatortool ("dvips(k) 5.86 Copyright 1999 Radical Eye Software"),
;=  :pdf:encrypted ("false"),
;=  ...
;=  :text "\nQuickly Reacquirable Locks∗\n\nDave Dice Mark Moir ... "
;= }

If extraction fails, extract.parse will return the following:

1
2
3
{:text "",
 :content-type ("application/octet-stream"),
 :x-parsed-by ("org.apache.tika.parser.EmptyParser")}

extract/parse is a simple interface to Tika’s own Parser.parse method.

Contributed by Joshua Thayer.

Change Log

Pantomime change log is available on GitHub.

Pantomime is a ClojureWerkz Project

Pantomime is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL
  • Monger, a Clojure MongoDB client for a more civilized age
  • Welle, a Riak client with batteries included
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Pantomime, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

Michael on behalf of the ClojureWerkz Team

Metrics-clojure 2.5.0 Is Released

TL;DR

metrics-clojure is a Clojure façade around Coda Hale’s Metrics library, originally developed by Steve Losh.

metrics-clojure is not a ClojureWerkz project but we help maintain it and consider it to be a very valuable library.

Changes Between 2.4.0 and 2.5.0

Type Hints Use Fully-Qualified Names

Type hints across the libraries now use fully-qualified names, which means returned types don’t have to be imported in the caller namespaces.

Contributed by Jason Whitlark.

:total Key In Timers

metrics.timers/rate return value now includes :total.

Contributed by Andrew Rudenko.

Added remove-all-metrics function

metrics-clojure Now has a function to remove all existing metrics from a given registry.

Contributed by Jason Whitlark.

Metrics 3.1.1

metrics-clojure is now based on Metrics 3.1.1.

Contributed by Jason Whitlark.

Full Change Log

metrics-clojure change log is available on GitHub.

About the Author

Michael on behalf of the metrics-clojure Team.

Langohr 3.1.0 Is Released

TL;DR

Langohr is a small Clojure RabbitMQ client.

3.1.0 upgrades dependencies and includes one bug fix in Langohr itself.

Changes between Langohr 3.0.x and 3.1.0

RabbitMQ Java Client Upgrade

RabbitMQ Java client dependency has been updated to 3.4.4.

It includes an important binding recovery bug fix.

clj-http Upgrade

clj-http dependency has been updated to 1.0.1.

Cheshire Upgrade

Cheshire dependency has been updated to 5.4.0.

langohr.consumers/blocking-subscribe No Longer Fails

langohr.consumers/blocking-subscribe no longer fails with a function arity exception.

GH issue: #65.

Change Log

Langohr change log is available on GitHub.

Langohr is a ClojureWerkz Project

Langohr is part of the group of libraries known as ClojureWerkz, together with

  • Elastisch, a minimalistic well documented Clojure client for ElasticSearch
  • Cassaforte, a Clojure Cassandra client built around CQL 3.0
  • Monger, a Clojure MongoDB client for a more civilized age
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Langohr, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

About The Author

Michael on behalf of the ClojureWerkz Team

Monger 2.1.0 Is Released

TL;DR

Monger is an idiomatic Clojure MongoDB driver for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. It also has solid documentation.

2.1.0 is a compatibility release. Next feature release of Monger will be 3.0 and will use version 3.0 of the MongoDB Java driver.

Changes between 2.0.0 and 2.1.0

Clojure 1.7 Compatibility

Improved Clojure 1.7 (development milestone) releases.

MongoDB Java Driver Update

MongoDB Java driver dependency has been updated to 2.13.x.

$each Operator

The $each operator now can be used via monger.operators.

Contributed by Juha Jokimäki.

Change Log

Monger change log is available on GitHub.

Monger is a ClojureWerkz Project

Monger is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Cassaforte, a Clojure Cassandra client built around CQL
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Welle, a Riak client with batteries included
  • Neocons, a client for the Neo4J REST API
  • Quartzite, a powerful scheduling library

and several others. If you like Monger, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

About the Author

@michaelklishin on behalf of the ClojureWerkz Team

Elastisch 2.2.0-beta1 Is Released

TL;DR

Elastisch is a battle tested, small but feature rich and well documented Clojure client for ElasticSearch. It supports virtually every Elastic Search feature and has solid documentation.

2.2.0-beta1 is a preview release of Elastisch 2.2 which introduces a few minor improvements.

Changes between Elastisch 2.1.x and 2.2.0-beta1

Add support for Nested Aggregations in the Native Client

Native client now supports nesting in the following aggregations

  • histogram
  • date_histogram
  • range
  • date_range
  • terms

Contributed by Mitchel Kuijpers.

ElasticSearch Java Client Upgrade

Elastisch now depends on ElasticSearch Java client version 1.4.x.

clj-http Update

clj-http dependency has been upgraded to version 1.0.1.

Cheshire Update

Cheshire dependency has been upgraded to version 5.4.0.

Full Change Log

Elastisch change log is available on GitHub.

Thank You, Contributors

Kudos to Michael Nussbaum and Jeffrey Erikson for contributing to this release.

Elastisch is a ClojureWerkz Project

Elastisch is part of the group of libraries known as ClojureWerkz, together with

  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Cassaforte, a Clojure Cassandra client
  • Monger, a Clojure MongoDB client for a more civilized age
  • Titanium, a Clojure graph library
  • Neocons, a client for the Neo4J REST API
  • Welle, a Riak client with batteries included
  • Quartzite, a powerful scheduling library

and several others. If you like Elastisch, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

About the Author

Michael on behalf of the ClojureWerkz Team