Skip to content

Instantly share code, notes, and snippets.

View manuelbernhardt's full-sized avatar

Manuel Bernhardt manuelbernhardt

View GitHub Profile
trait Command
trait Event
case class A(....) extends Command
case class B(....) extends Command
case class C(....) extends Command
case class D(....) extends Command
case class AA(...) extends Event
case class BB(...) extends Event
@manuelbernhardt
manuelbernhardt / gist:09cbfa52e466d0cd7ae1
Created May 7, 2015 06:06
jOOQ integration in a `build.sbt` file
libraryDependencies ++= Seq(
"org.jooq" % "jooq" % "3.6.0",
"org.jooq" % "jooq-codegen-maven" % "3.6.0",
"org.jooq" % "jooq-meta" % "3.6.0"
)
val generateJOOQ = taskKey[Seq[File]]("Generate JooQ classes")
val generateJOOQTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (src, cp, r, s) =>
toError(r.run("org.jooq.util.GenerationTool", cp.files, Array("conf/authentication.xml"), s.log))
@manuelbernhardt
manuelbernhardt / CQRSEventHandler.scala
Created June 2, 2015 16:35
CQRS & jOOQ example in Scala
package actors
import java.sql.Timestamp
import akka.actor.{Actor, ActorLogging}
import helpers.Database
import generated.Tables._
import org.jooq.impl.DSL._
class CQRSEventHandler extends Actor with ActorLogging {
@manuelbernhardt
manuelbernhardt / gist:531261f954afc4342536
Last active August 29, 2015 14:23
DefaultDataType.java
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java
index 5231af3..fd19cce 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java
@@ -720,6 +717,15 @@ public class DefaultDataType<T> implements DataType<T> {
if (dialect != null) {
result = TYPES_BY_TYPE[dialect.family().ordinal()].get(type);
+
+ // check if we know about interfaces implemented by the type
object CHJson extends com.codahale.jerkson.Json {
// this is where we setup out Jackson module for custom de/serialization
val module: SimpleModule = new SimpleModule("delving", Version.unknownVersion())
module.addSerializer(classOf[ObjectId], new ObjectIdSerializer)
module.addDeserializer(classOf[ObjectId], new ObjectIdDeserializer)
mapper.registerModule(module)
}
@manuelbernhardt
manuelbernhardt / gist:1249014
Created September 28, 2011 19:40
ObjectId de/serializer for Jerkson
@JsonCachable
class ObjectIdSerializer extends JsonSerializer[ObjectId] {
def serialize(id: ObjectId, json: JsonGenerator, provider: SerializerProvider) {
json.writeString(id.toString)
}
}
class ObjectIdDeserializer extends JsonDeserializer[ObjectId] {
def deserialize(jp: JsonParser, context: DeserializationContext) = {
if (!ObjectId.isValid(jp.getText)) throw context.mappingException("invalid ObjectId " + jp.getText)
package util
import play.cache.CacheImpl
import models.salatContext._
import scala.collection.JavaConversions.asJavaMap
import com.mongodb.casbah.Imports._
import com.mongodb.WriteResult
import java.io._
import play.jobs.{Every, Job}
import controllers.ErrorReporter
val fieldConstraints = form.mapping.mappings.map(m => m.key -> m.constraints)
@manuelbernhardt
manuelbernhardt / gist:1868295
Created February 20, 2012 07:42
Session composition for action composition
val newSession = additionalSessionParams.foldLeft[Session](request.session) { _ + _ }
val r: PlainResult = action(request).asInstanceOf[PlainResult]
// workaround since withSession calls aren't composable it seems
val innerSession = r.header.headers.get(SET_COOKIE).map(cookies => Session.decodeFromCookie(Cookies.decode(cookies).find(_.name == Session.COOKIE_NAME)))
if(innerSession.isDefined) {
// there really should be an API method for adding sessions
val combined = innerSession.get.data.foldLeft(newSession) { _ + _ }
r.withSession(combined)
} else {
@manuelbernhardt
manuelbernhardt / gist:2694058
Created May 14, 2012 13:43
Play Akka deadlock
2012-05-14 15:41:08
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.6-b01-415 mixed mode):
"New I/O server worker #1-9" prio=5 tid=7fdc4308c000 nid=0x116fb9000 runnable [116fb8000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:136)
at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:69)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
- locked <79507ad18> (a sun.nio.ch.Util$2)