Skip to content

Commit

Permalink
Improved JdbcJournalConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
mbknor committed Dec 7, 2016
1 parent 7b80e46 commit ab6c869
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 10 deletions.
Expand Up @@ -34,13 +34,13 @@ object JdbcJournalConfig {
}

// Java helper
def create(dataSource: DataSource, schemaName: String, fatalErrorHandler: JdbcJournalErrorHandler) = JdbcJournalConfig(dataSource, fatalErrorHandler, StorageRepoConfig(Option(schemaName)))
def create(dataSource: DataSource, schemaName: String, fatalErrorHandler: JdbcJournalErrorHandler) = JdbcJournalConfig(dataSource, Option(fatalErrorHandler), StorageRepoConfig(Option(schemaName)))
}

case class JdbcJournalConfig
(
dataSource: DataSource,
fatalErrorHandler: JdbcJournalErrorHandler, // The fatalErrorHandler is called when something bad has happened - like getting unique PK key errors - Which is probably a symptom of split brain
fatalErrorHandler: Option[JdbcJournalErrorHandler] = None, // The fatalErrorHandler is called when something bad has happened - like getting unique PK key errors - Which is probably a symptom of split brain
storageRepoConfig: StorageRepoConfig = StorageRepoConfig(schemaName = None),
persistenceIdParser:PersistenceIdParser = new PersistenceIdParserImpl('/'),
maxRowsPrRead: Int = 1000
Expand Down
Expand Up @@ -5,6 +5,7 @@ import java.util.Date
import javax.sql.DataSource

import no.nextgentel.oss.akkatools.cluster.ClusterNodeRepo
import org.slf4j.LoggerFactory
import org.sql2o.data.{Row, Table}
import org.sql2o._
import org.sql2o.quirks.OracleQuirks
Expand Down Expand Up @@ -54,14 +55,18 @@ case class StorageRepoConfig

)

class StorageRepoImpl(sql2o: Sql2o, config:StorageRepoConfig, _errorHandler:JdbcJournalErrorHandler) extends StorageRepo with ClusterNodeRepo {
class StorageRepoImpl(sql2o: Sql2o, config:StorageRepoConfig, _errorHandler:Option[JdbcJournalErrorHandler]) extends StorageRepo with ClusterNodeRepo {

def this(dataSource:DataSource, config:StorageRepoConfig, _errorHandler:JdbcJournalErrorHandler) = this(new Sql2o(dataSource, new OracleQuirks()), config, _errorHandler)
def this(dataSource:DataSource, config:StorageRepoConfig = StorageRepoConfig(), _errorHandler:Option[JdbcJournalErrorHandler] = None) = this(new Sql2o(dataSource, new OracleQuirks()), config, _errorHandler)

import scala.collection.JavaConverters._

// wrap it
val errorHandler = new JdbcJournalDetectFatalOracleErrorHandler(_errorHandler)
val errorHandler = new JdbcJournalDetectFatalOracleErrorHandler(_errorHandler.getOrElse(
new JdbcJournalErrorHandler {
override def onError(e: Exception): Unit = LoggerFactory.getLogger(getClass).error("Fatal jdbc-journal-error (custom errorHandler not configured): " + e, e)
}
))

lazy val schemaPrefix = config.schemaName.map( s => s + ".").getOrElse("")
lazy val tableName_journal = s"${schemaPrefix}${config.tableName_journal}"
Expand Down
Expand Up @@ -42,7 +42,7 @@ abstract class JdbcReadJournalTestBase(configName:String) extends FunSuite with
}

lazy val readJournal = {
JdbcJournalConfig.setConfig(configName, JdbcJournalConfig(DataSourceUtil.createDataSource("JdbcReadJournalTest"), errorHandler, StorageRepoConfig(), new PersistenceIdParserImpl('-')))
JdbcJournalConfig.setConfig(configName, JdbcJournalConfig(DataSourceUtil.createDataSource("JdbcReadJournalTest"), Some(errorHandler), StorageRepoConfig(), new PersistenceIdParserImpl('-')))
PersistenceQuery(system).readJournalFor[JdbcReadJournal](JdbcReadJournal.identifier)
}

Expand Down
Expand Up @@ -33,7 +33,7 @@ class JdbcSnapshotStoreTest (_system:ActorSystem) extends FunSuite with TestKitB

before {
// Remember: Since JdbcJournal.init() is static this will break if we run tests in parallel
JdbcJournalConfig.setConfig(configName, JdbcJournalConfig(DataSourceUtil.createDataSource("JdbcSnapshotStoreTest"), errorHandler, StorageRepoConfig(), new PersistenceIdParserImpl('-')))
JdbcJournalConfig.setConfig(configName, JdbcJournalConfig(DataSourceUtil.createDataSource("JdbcSnapshotStoreTest"), Some(errorHandler), StorageRepoConfig(), new PersistenceIdParserImpl('-')))
}

override protected def afterAll(): Unit = {
Expand Down
Expand Up @@ -21,7 +21,7 @@ class MyJournalSpec extends JournalSpec (
override def onError(e: Exception): Unit = log.error("JdbcJournalErrorHandler.onError", e)
}

JdbcJournalConfig.setConfig("MyJournalSpec", JdbcJournalConfig(DataSourceUtil.createDataSource("MyJournalSpec"), errorHandler, StorageRepoConfig(), new PersistenceIdParserImpl('-')))
JdbcJournalConfig.setConfig("MyJournalSpec", JdbcJournalConfig(DataSourceUtil.createDataSource("MyJournalSpec"), Some(errorHandler), StorageRepoConfig(), new PersistenceIdParserImpl('-')))

override protected def supportsRejectingNonSerializableObjects: CapabilityFlag = false
}
Expand All @@ -40,6 +40,6 @@ class MySnapshotStoreSpec extends SnapshotStoreSpec (
override def onError(e: Exception): Unit = log.error("JdbcJournalErrorHandler.onError", e)
}

JdbcJournalConfig.setConfig("MySnapshotStoreSpec", JdbcJournalConfig(DataSourceUtil.createDataSource("MySnapshotStoreSpec"), errorHandler, StorageRepoConfig(), new PersistenceIdParserImpl('-')))
JdbcJournalConfig.setConfig("MySnapshotStoreSpec", JdbcJournalConfig(DataSourceUtil.createDataSource("MySnapshotStoreSpec"), None, StorageRepoConfig(), new PersistenceIdParserImpl('-')))

}
Expand Up @@ -15,7 +15,7 @@ class StorageRepoTest extends FunSuite with Matchers with BeforeAndAfterAll with
override def onError(e: Exception): Unit = log.error("onError", e)
}

lazy val repo = new StorageRepoImpl(new Sql2o(DataSourceUtil.createDataSource("StorageRepoTest"), new OracleQuirks), StorageRepoConfig(), errorHandler)
lazy val repo = new StorageRepoImpl(new Sql2o(DataSourceUtil.createDataSource("StorageRepoTest"), new OracleQuirks), StorageRepoConfig(), Some(errorHandler))

val nextId = new AtomicInteger(0)

Expand Down

0 comments on commit ab6c869

Please sign in to comment.