2017-10-03 4 views
1

J'ai la version 2.6.5 de la configuration de Play et multimodule (plusieurs sous-modules sbt). Je mis en place 2 différents datasources et ont erreur Ebean:Lecture 2.6 et les sources multi DB d'Ebean ne fonctionnent pas

Caused by: javax.persistence.PersistenceException: models.common.defaultStorage.PromoBlock is NOT an Entity Bean registered with this server? 
    at io.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:1019) 
    at io.ebeaninternal.server.core.DefaultServer.find(DefaultServer.java:975) 
    at io.ebean.Finder.query(Finder.java:157) 
    at models.common.defaultStorage.PromoBlock.findByProjectId(PromoBlock.java:84) 

Cela se produit seulement quand je mis en place 2 et sources de données des paramètres de classe appropriés mis en correspondance dans application.conf.

Mon build.sbt:

lazy val common = (project in file("modules/common")).enablePlugins(PlayJava, PlayEbean) 

lazy val admin = (project in file("modules/admin")).enablePlugins(PlayJava, PlayEbean).dependsOn(common) 

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean).aggregate(common, admin).dependsOn(common, admin) 

Mes entités ebean vivent dans le module common. Je n'ai qu'un application.conf dans le projet root et 2 sources de données:

db { 
    default.driver = org.postgresql.Driver 
    default.url = "postgres://..." 

    mssql.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver 
    mssql.url = "jdbc:sqlserver://..." 
} 

ebean.default = ["models.common.defaultStorage.*"] 
ebean.mssql = ["models.common.mssqlStorage.*"] 

Je trouve que si je commente en deuxième option ebean.mssql que tout est OK. Mais avec deux listes différentes de classes mappées, j'ai obtenu une exception.

J'ai essayé d'utiliser toutes les instructions des documents https://www.playframework.com/documentation/2.6.5/JavaEbean mais toujours pas de succès.

Mon plugins.sbt:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.5") 

... 

addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") 

addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.0.3") 

P.S. Je migre le projet de la version 2.4 (et précédemment 2.3) de Play où tout était OK.

Répondre

2

En effet, je l'ai ouvert un PR sur le projet play-ebean.

Dans notre projet, nous avons mis en place une solution de contournement. Mais nous utilisons la version Java de Play2 et Guice. Je ne sais pas comment appliquer cette solution dans Scala. Dans la classe Module, nous avons lié le DefaultEbeanConfig.EbeanConfigParser à notre propre classe.

bind(DefaultEbeanConfig.EbeanConfigParser.class).to(CustomEbeanConfigParser.class); 
code

pour cette classe:

@Singleton 
public class CustomEbeanConfigParser extends DefaultEbeanConfig.EbeanConfigParser implements Provider<EbeanConfig> { 


    private final Config _config; 

    @Inject 
    public CustomEbeanConfigParser(Config config, Environment environment, DBApi dbApi) { 
     super(config, environment, dbApi); 
     this._config = config; 
    } 

    @Override 
    public EbeanConfig parse() { 
     DefaultEbeanConfig ebeanConfig = (DefaultEbeanConfig) super.parse(); 

     Map<String, ServerConfig> serverConfigMap = ebeanConfig.serverConfigs(); 
     for (Map.Entry<String, ServerConfig> entry : serverConfigMap.entrySet()) { 
      entry.getValue().setDefaultServer(entry.getKey().equals(ebeanConfig.defaultServer())); 
     } 

     return ebeanConfig; 
    } 
} 

Comme vous pouvez le voir, nous utilisons la méthode d'analyse de l'analyseur fourni, et après l'analyse syntaxique, nous fixons l'attribut « Defaultserver ».