Build Status

A very simple generic connection pool.

Example: How to build a MongoDB connection pool, and use it in a Redstone.dart app

import 'package:redstone/server.dart' as app;
import 'package:connection_pool/connection_pool.dart';
import 'package:mongo_dart/mongo_dart.dart';

 * A MongoDB connection pool
class MongoDbPool extends ConnectionPool<Db> {
  String uri;
  MongoDbPool(String this.uri, int poolSize) : super(poolSize);
  void closeConnection(Db conn) {

  Future<Db> openNewConnection() {
    var conn = new Db(uri);
    return => conn);

 * Retrieve and release a connection from the pool. 
dbInterceptor(MongoDbPool pool) {
  //get a connection
  db.getConnection().then((managedConnection) {

    //save the connection in the attributes map
    app.request.attributes["conn"] = managedConnection.conn; {
      if (app.chain.error is ConnectionException) {
        //if a connection is lost, mark it as invalid, so the pool can reopen it
        //in the next request
        db.releaseConnection(managedConnection, markAsInvalid: true);
      } else {
        //release the connection


//To use a connection, just retrieve it from the attributes map
service(@app.Attr() Db conn) {

main() {

  //create a connection pool
  var mongodbUri = "mongodb://localhost/database";
  var poolSize = 3;

  app.addModule(new Module()
    ..bind(MongoDbPool, toValue: new MongoDbPool(mongoDbUri, poolSize)));

  app.start(address: cfg["host"], port: cfg["port"]);