Skip to content

Commit

Permalink
Allow ebean server extra configuration
Browse files Browse the repository at this point in the history
Signed-off-by: Thibault Meyer <[email protected]>
  • Loading branch information
Thibault Meyer committed Dec 20, 2018
1 parent 5f4089f commit b5e24f9
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 2 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ ebean {
# self signed certificates
allowAllCertificates = false
}
# Extra Ebean server configuration
# Use full classpath (ie: ebean.DemoEbeanServerExtraConfig)
extra-config = [
]
}
}
Expand Down
21 changes: 19 additions & 2 deletions play-ebean/src/main/java/play/db/ebean/orm/DefaultEbeanConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import java.util.*;
import java.util.stream.Collectors;

import static java.lang.Class.forName;

/**
* Ebean server configuration.
*
Expand Down Expand Up @@ -294,7 +296,7 @@ EbeanConfig parse() {

if (ebeanServerConfig.hasPath("docstore")) {
try {
Class.forName("io.ebeanservice.elastic.ElasticDocumentStore");
forName("io.ebeanservice.elastic.ElasticDocumentStore");
} catch (ClassNotFoundException ex) {
final Option<ConfigOrigin> origin = this.configuration.hasPath("ebean.servers" + serverName + ".docstore") ?
Option.apply(this.configuration.getValue("ebean.servers" + serverName + ".docstore").origin()) :
Expand Down Expand Up @@ -340,6 +342,21 @@ EbeanConfig parse() {
}
}

if (ebeanServerConfig.hasPath("extra-config")) {
ebeanServerConfig.getStringList("extra-config").forEach(className -> {
try {
final EbeanServerExtraConfig esac = (EbeanServerExtraConfig) forName(
className,
true,
this.environment.classLoader()
).newInstance();
esac.applyExtraConfiguration(serverConfig, this.configuration);
} catch (final ClassNotFoundException | IllegalAccessException | InstantiationException ex) {
ex.printStackTrace();
}
});
}

serverConfigs.put(serverName, serverConfig);
});
} else {
Expand Down Expand Up @@ -385,7 +402,7 @@ private void addModelClassesToServerConfig(final String key, final ServerConfig
final Set<String> classes) {
for (final String clazz : classes) {
try {
serverConfig.addClass(Class.forName(clazz, true, this.environment.classLoader()));
serverConfig.addClass(forName(clazz, true, this.environment.classLoader()));
} catch (Throwable ex) {
final Option<ConfigOrigin> origin = this.configuration.hasPath("ebean.servers." + key) ?
Option.apply(this.configuration.getValue("ebean.servers." + key).origin()) :
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package play.db.ebean.orm;

import com.typesafe.config.Config;
import io.ebean.config.ServerConfig;

/**
* Allow third party app to configure Ebean server.
*
* @author Thibault Meyer
* @since 18.12.20
*/
public interface EbeanServerExtraConfig {

/**
* Apply extra configuration to the Ebean server before it was started.
*
* @param ebeanServerConfig Handle to the Ebean server configuration
* @param playConfig Handle to Play configuration
*/
void applyExtraConfiguration(final ServerConfig ebeanServerConfig, final Config playConfig);
}
14 changes: 14 additions & 0 deletions sbt-play-ebean-test/app/ebean/DemoEbeanServerExtraConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ebean;

import com.typesafe.config.Config;
import io.ebean.config.ServerConfig;
import play.Logger;
import play.db.ebean.orm.EbeanServerExtraConfig;

public class DemoEbeanServerExtraConfig implements EbeanServerExtraConfig {

@Override
public void applyExtraConfiguration(ServerConfig ebeanServerConfig, Config playConfig) {
Logger.info("Applying ebean server extra configuration");
}
}
5 changes: 5 additions & 0 deletions sbt-play-ebean-test/conf/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ ebean {
# self signed certificates
allowAllCertificates = false
}

# Extra Ebean server configuration
extra-config = [
"ebean.DemoEbeanServerExtraConfig"
]
}

# Secondary server
Expand Down

0 comments on commit b5e24f9

Please sign in to comment.