Skip to content

Instantly share code, notes, and snippets.

@LeifW
Created February 9, 2012 21:21
Show Gist options
  • Select an option

  • Save LeifW/1783365 to your computer and use it in GitHub Desktop.

Select an option

Save LeifW/1783365 to your computer and use it in GitHub Desktop.
import java.util.Hashtable
import javax.naming._
import javax.naming.spi._
import org.postgresql.ds.PGPoolingDataSource
object FakeJndiFactory {
def install() {
System setProperty (Context.INITIAL_CONTEXT_FACTORY , classOf[FakeJndiFactory].getName)
}
val datasource = {
val ds = new PGPoolingDataSource()
ds setDatabaseName "database"
ds setServerName "localhost"
ds setPortNumber 5432
ds setUser "user"
ds setPassword "password"
ds
}
val env:Map[String, AnyRef] = Map(
"java:comp" -> Map(
"env" -> Map(
"jdbc" -> Map(
"myDB" -> datasource
)
)
)
)
}
class FakeJndiFactory extends InitialContextFactory {
def getInitialContext(environment:Hashtable[_,_]):Context = new FakeJndiContext(FakeJndiFactory.env)
}
class FakeJndiContext(environment: Map[String, AnyRef]) extends Context {
def getNameInNamespace():String = error("not implemented")
def close():Unit = error("not implemented")
def getEnvironment():Hashtable[_, _] = error("not implemented")
def removeFromEnvironment(propName:String):AnyRef = error("not implemented")
def addToEnvironment(propName:String, propVal:Any):AnyRef = error("not implemented")
def composeName(name:String, prefix:String):String = error("not implemented")
def composeName(name:Name, prefix:Name):Name = error("not implemented")
def getNameParser(name:String):NameParser = error("not implemented")
def getNameParser(name:Name):NameParser = error("not implemented")
def lookupLink(name:String):AnyRef = error("not implemented")
def lookupLink(name:Name):AnyRef = error("not implemented")
def createSubcontext(name:String):Context = error("not implemented")
def createSubcontext(name:Name):Context = error("not implemented")
def destroySubcontext(name:String):Unit = error("not implemented")
def destroySubcontext(name:Name):Unit = error("not implemented")
def listBindings(name:String):NamingEnumeration[Binding] = error("not implemented")
def listBindings(name:Name):NamingEnumeration[Binding] = error("not implemented")
def list(name:String):NamingEnumeration[NameClassPair] = error("not implemented")
def list(name:Name):NamingEnumeration[NameClassPair] = error("not implemented")
def rename(oldName:String, newName:String):Unit = error("not implemented")
def rename(oldName:Name, newName:Name):Unit = error("not implemented")
def unbind(name:String):Unit = error("not implemented")
def unbind(namex:Name):Unit = error("not implemented")
def rebind(name:String, obj:Any):Unit = error("not implemented")
def rebind(name:Name, obj:Any):Unit = error("not implemented")
def bind(name:String, obj:Any):Unit = error("not implemented")
def bind(name:Name, obj:Any):Unit = error("not implemented")
def lookup(name:String):AnyRef = {
val path = name.split('/')
path.init.foldLeft(environment) {(map, key) =>
map(key).asInstanceOf[Map[String, AnyRef]]
}(path.last) match {
case m:Map[String, AnyRef] => new FakeJndiContext(m)
case otherwise => otherwise
}
}
def lookup(name:Name):AnyRef = error("not implemented")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment