2

I want to prepare my application to be compatible with many databases types. To try it i've used H2, MySql and Postgresql. So 'ive added into build.sbt :

"mysql" % "mysql-connector-java" % "5.1.35",
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41"

and i've added conf/prod.conf with all configuration without database configuration, and 3 files: conf/h2.conf

include "prod.conf"

db.h2.driver=org.h2.Driver
db.h2.url="jdbc:h2:mem:dontforget"
db.h2.jndiName=DefaultDS
ebean.h2="fr.chklang.dontforget.business.*"

conf/mysql.conf

include "prod.conf"

db.mysql.driver=com.mysql.jdbc.Driver
db.mysql.jndiName=DefaultDS
ebean.mysql="fr.chklang.dontforget.business.*"

conf/postgresql.conf

include "prod.conf"

db.postgresql.driver=org.postgresql.Driver
db.postgresql.jndiName=DefaultDS
ebean.postgresql="fr.chklang.dontforget.business.*"

Add to it i've three folders into conf/evolutions with

  1. evolutions/h2
  2. evolutions/mysql
  3. evolutions/postgresql

with these things user can start my application with this command :

-Dconfig.file=dontforget-conf.conf -DapplyEvolutions.default=true -Dhttp.port=10180 &

And this conf file is

include "postgresql.conf"

db.postgresql.url="jdbc:postgresql:dontforget"
db.postgresql.user=myUserName
db.postgresql.password=myPassword

But with this configuration, when my application try to connect to DB : The default EbeanServer has not been defined? This is normally set via the ebean.datasource.default property. Otherwise it should be registered programatically via registerServer()]]

So i've tried to add, into my configuration :

ebean.datasource.default=postgresql

but when i add it i've :

Configuration error: Configuration error[Configuration error[]]
        at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
        at play.api.Configuration.reportError(Configuration.scala:743)
        at play.Configuration.reportError(Configuration.java:310)
        at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:56)
        at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
        at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
        at scala.collection.immutable.List.foreach(List.scala:383)
        at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91)
        at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
        at play.api.Play$$anonfun$start$1.apply(Play.scala:91)
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
        at play.api.Play$.start(Play.scala:90)
        at play.core.StaticApplication.<init>(ApplicationProvider.scala:55)
        at play.core.server.NettyServer$.createServer(NettyServer.scala:253)
        at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:289)
        at play.core.server.NettyServer$$anonfun$main$3.apply(NettyServer.scala:284)
        at scala.Option.map(Option.scala:145)
        at play.core.server.NettyServer$.main(NettyServer.scala:284)
        at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: Configuration error: Configuration error[]
        at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:94)
        at play.api.Configuration.reportError(Configuration.scala:743)
        at play.api.db.BoneCPApi.play$api$db$BoneCPApi$$error(DB.scala:271)
        at play.api.db.BoneCPApi$$anonfun$getDataSource$3.apply(DB.scala:438)
        at play.api.db.BoneCPApi$$anonfun$getDataSource$3.apply(DB.scala:438)
        at scala.Option.getOrElse(Option.scala:120)
        at play.api.db.BoneCPApi.getDataSource(DB.scala:438)
        at play.api.db.DB$$anonfun$getDataSource$1.apply(DB.scala:142)
        at play.api.db.DB$$anonfun$getDataSource$1.apply(DB.scala:142)
        at scala.Option.map(Option.scala:145)
        at play.api.db.DB$.getDataSource(DB.scala:142)
        at play.api.db.DB.getDataSource(DB.scala)
        at play.db.DB.getDataSource(DB.java:25)
        at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:54)

So i don't understand how i can do it.

Chklang
  • 857
  • 1
  • 8
  • 17

1 Answers1

0

YES!!! I've found it! After debug mode (etc...)

There was 2 problems.

First problem : I must add a key into my application.conf :

ebeanconfig.datasource

For me (for exemple), postgresql.conf is modified to :

db.postgresql.driver=org.postgresql.Driver
db.postgresql.jndiName=DefaultDS
ebean.postgresql="fr.chklang.dontforget.business.*"
ebeanconfig.datasource.default=postgresql

Second problem : include into play 2.3.x don't works because conf folder isn't added into classpath (ref Load file from '/conf' directory on Cloudbees ) so we must concat prod.conf, postgresql.conf and dontforget.conf into an only single file.

I hope i have helped any other developper...

Community
  • 1
  • 1
Chklang
  • 857
  • 1
  • 8
  • 17