diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index 40b5353d6..4bf2c4db7 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -116,16 +116,16 @@
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
-
- src/main/resources/META-INF/MANIFEST.MF
-
+
+ io.avaje.tile:moditech-module:1.0
+
-
diff --git a/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java b/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java
index 764fa86a1..c31be3aa5 100644
--- a/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java
@@ -1,10 +1,5 @@
package io.ebean.config;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-
/**
* Helper to find classes taking into account the context class loader.
*/
@@ -77,22 +72,14 @@ public class ClassLoadConfig {
* Return a new instance of the class using the default constructor.
*/
public Object newInstance(String className) {
-
try {
Class> cls = forName(className);
- return cls.newInstance();
+ return cls.getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new IllegalArgumentException("Error constructing " + className, e);
}
}
- /**
- * Return the resources for the given name.
- */
- public Enumeration getResources(String name) throws IOException {
- return context.getResources(name);
- }
-
/**
* Return true if the given class is present.
*/
@@ -129,9 +116,7 @@ public class ClassLoadConfig {
* Optional - if set only use this classLoader (no fallback).
*/
protected final ClassLoader preferredLoader;
-
protected final ClassLoader contextLoader;
-
protected final ClassLoader callerLoader;
ClassLoaderContext(ClassLoader preferredLoader) {
@@ -145,15 +130,7 @@ public class ClassLoadConfig {
return (loader != null) ? loader : callerLoader;
}
- Enumeration getResources(String name) throws IOException {
- if (preferredLoader != null) {
- return preferredLoader.getResources(name);
- }
- return contextLoader().getResources(name);
- }
-
Class> forName(String name) throws ClassNotFoundException {
-
if (preferredLoader != null) {
// only use the explicitly set classLoader
return classForName(name, preferredLoader);
diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
index 873304c3a..ba0ca78d1 100644
--- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
@@ -2,11 +2,7 @@ package io.ebean.config;
import com.fasterxml.jackson.core.JsonFactory;
import io.avaje.config.Config;
-import io.ebean.DatabaseFactory;
-import io.ebean.EbeanVersion;
-import io.ebean.PersistenceContextScope;
-import io.ebean.Query;
-import io.ebean.Transaction;
+import io.ebean.*;
import io.ebean.annotation.*;
import io.ebean.cache.ServerCachePlugin;
import io.ebean.config.dbplatform.DatabasePlatform;
@@ -14,14 +10,7 @@ import io.ebean.config.dbplatform.DbEncrypt;
import io.ebean.config.dbplatform.DbType;
import io.ebean.config.dbplatform.IdType;
import io.ebean.datasource.DataSourceConfig;
-import io.ebean.event.BeanFindController;
-import io.ebean.event.BeanPersistController;
-import io.ebean.event.BeanPersistListener;
-import io.ebean.event.BeanPostConstructListener;
-import io.ebean.event.BeanPostLoad;
-import io.ebean.event.BeanQueryAdapter;
-import io.ebean.event.BulkTableEventListener;
-import io.ebean.event.ServerConfigStartup;
+import io.ebean.event.*;
import io.ebean.event.changelog.ChangeLogListener;
import io.ebean.event.changelog.ChangeLogPrepare;
import io.ebean.event.changelog.ChangeLogRegister;
@@ -34,14 +23,7 @@ import javax.sql.DataSource;
import java.time.Clock;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ServiceLoader;
+import java.util.*;
/**
* The configuration used for creating a Database.
@@ -82,7 +64,6 @@ import java.util.ServiceLoader;
*/
public class DatabaseConfig {
-
/**
* The Database name.
*/
@@ -402,8 +383,8 @@ public class DatabaseConfig {
private List postConstructListeners = new ArrayList<>();
private List persistListeners = new ArrayList<>();
private List queryAdapters = new ArrayList<>();
- private List bulkTableEventListeners = new ArrayList<>();
- private List configStartupListeners = new ArrayList<>();
+ private final List bulkTableEventListeners = new ArrayList<>();
+ private final List configStartupListeners = new ArrayList<>();
/**
* By default inserts are included in the change log.
@@ -411,42 +392,26 @@ public class DatabaseConfig {
private boolean changeLogIncludeInserts = true;
private ChangeLogPrepare changeLogPrepare;
-
private ChangeLogListener changeLogListener;
-
private ChangeLogRegister changeLogRegister;
-
private boolean changeLogAsync = true;
-
private ReadAuditLogger readAuditLogger;
-
private ReadAuditPrepare readAuditPrepare;
-
private EncryptKeyManager encryptKeyManager;
-
private EncryptDeployManager encryptDeployManager;
-
private Encryptor encryptor;
-
- private boolean dbOffline;
-
private DbEncrypt dbEncrypt;
-
+ private boolean dbOffline;
private ServerCachePlugin serverCachePlugin;
/**
* The default PersistenceContextScope used if one is not explicitly set on a query.
*/
private PersistenceContextScope persistenceContextScope = PersistenceContextScope.TRANSACTION;
-
private JsonFactory jsonFactory;
-
private boolean localTimeWithNanos;
-
private boolean durationWithNanos;
-
private int maxCallStack = 5;
-
private boolean transactionRollbackOnChecked = true;
// configuration for the background executor service (thread pool)
@@ -2741,21 +2706,7 @@ public class DatabaseConfig {
this.classLoadConfig = classLoadConfig;
}
- /**
- * Return the service loader using the classLoader defined in ClassLoadConfig.
- */
- public ServiceLoader serviceLoad(Class spiService) {
- return ServiceLoader.load(spiService, classLoadConfig.getClassLoader());
- }
- /**
- * Return the first service using the service loader (or null).
- */
- public T service(Class spiService) {
- ServiceLoader load = serviceLoad(spiService);
- Iterator serviceInstances = load.iterator();
- return serviceInstances.hasNext() ? serviceInstances.next() : null;
- }
/**
* Load settings from application.properties, application.yaml and other sources.
@@ -2794,7 +2745,7 @@ public class DatabaseConfig {
*/
private List autoConfiguration() {
List list = new ArrayList<>();
- for (AutoConfigure autoConfigure : serviceLoad(AutoConfigure.class)) {
+ for (AutoConfigure autoConfigure : ServiceLoader.load(AutoConfigure.class)) {
autoConfigure.preConfigure(this);
list.add(autoConfigure);
}
diff --git a/ebean-api/src/main/java9/module-info.java b/ebean-api/src/main/java9/module-info.java
new file mode 100644
index 000000000..56243dbd1
--- /dev/null
+++ b/ebean-api/src/main/java9/module-info.java
@@ -0,0 +1,58 @@
+module io.ebean.api {
+
+ uses io.ebean.config.AutoConfigure;
+ uses io.ebean.datasource.DataSourceAlertFactory;
+ uses io.ebean.metric.MetricFactory;
+ uses io.ebean.service.SpiContainerFactory;
+ uses io.ebean.service.SpiRawSqlService;
+ uses io.ebean.service.SpiProfileLocationFactory;
+ uses io.ebean.service.SpiFetchGroupService;
+
+ requires transitive java.sql;
+ requires transitive io.avaje.config;
+ requires transitive persistence.api;
+ requires transitive io.ebean.annotation;
+ requires transitive io.ebean.datasource.api;
+ requires transitive org.slf4j;
+
+ requires static io.ebean.types;
+ requires static io.avaje.jsr305x;
+ requires static com.fasterxml.jackson.core;
+ requires static javax.servlet.api;
+ requires static com.h2database;
+
+ exports io.ebean;
+ exports io.ebean.bean;
+ exports io.ebean.cache;
+ exports io.ebean.meta;
+ exports io.ebean.config;
+ exports io.ebean.config.dbplatform;
+ exports io.ebean.config.dbplatform.clickhouse;
+ exports io.ebean.config.dbplatform.h2;
+ exports io.ebean.config.dbplatform.db2;
+ exports io.ebean.config.dbplatform.cockroach;
+ exports io.ebean.config.dbplatform.hana;
+ exports io.ebean.config.dbplatform.hsqldb;
+ exports io.ebean.config.dbplatform.mariadb;
+ exports io.ebean.config.dbplatform.mysql;
+ exports io.ebean.config.dbplatform.nuodb;
+ exports io.ebean.config.dbplatform.oracle;
+ exports io.ebean.config.dbplatform.postgres;
+ exports io.ebean.config.dbplatform.sqlanywhere;
+ exports io.ebean.config.dbplatform.sqlite;
+ exports io.ebean.config.dbplatform.sqlserver;
+ exports io.ebean.event;
+ exports io.ebean.event.readaudit;
+ exports io.ebean.event.changelog;
+ exports io.ebean.common;
+ exports io.ebean.docstore;
+ exports io.ebean.plugin;
+ exports io.ebean.metric;
+ exports io.ebean.search;
+ exports io.ebean.service;
+ exports io.ebean.text;
+ exports io.ebean.text.json;
+ exports io.ebean.text.csv;
+ exports io.ebean.util;
+
+}
diff --git a/ebean-api/src/main/resources/META-INF/MANIFEST.MF b/ebean-api/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 688346cde..000000000
--- a/ebean-api/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.api
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 042c4acc8..6abb71c2c 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -63,23 +63,12 @@
true
-
io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
-
- src/main/resources/META-INF/MANIFEST.MF
-
-
-
-
diff --git a/ebean-autotune/src/main/java9/module-info.java b/ebean-autotune/src/main/java9/module-info.java
new file mode 100644
index 000000000..6cb7d3a54
--- /dev/null
+++ b/ebean-autotune/src/main/java9/module-info.java
@@ -0,0 +1,15 @@
+import io.ebeaninternal.server.autotune.AutoTuneServiceProvider;
+import io.ebeaninternal.server.autotune.service.AutoTuneServiceFactory;
+
+/**
+ * Provider of AutoTuneServiceProvider
+ */
+module io.ebean.autotune {
+
+ provides AutoTuneServiceProvider with AutoTuneServiceFactory;
+
+ requires io.ebean.api;
+ requires io.ebean.core;
+ requires java.xml;
+ requires java.xml.bind;
+}
diff --git a/ebean-autotune/src/main/resources/META-INF/MANIFEST.MF b/ebean-autotune/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 38bb2aa0c..000000000
--- a/ebean-autotune/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.autotune
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index ea0394d73..506ef40dd 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -1,5 +1,6 @@
-
+
4.0.0
ebean-parent
@@ -28,4 +29,19 @@
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
diff --git a/ebean-core-type/src/main/java9/module-info.java b/ebean-core-type/src/main/java9/module-info.java
new file mode 100644
index 000000000..557d5a302
--- /dev/null
+++ b/ebean-core-type/src/main/java9/module-info.java
@@ -0,0 +1,10 @@
+module io.ebean.core.type {
+
+ exports io.ebean.core.type;
+
+ requires transitive java.sql;
+ requires transitive io.ebean.api;
+
+ requires static com.fasterxml.jackson.core;
+
+}
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index 26c373b04..7576c47db 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -207,17 +207,6 @@
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
-
- src/main/resources/META-INF/MANIFEST.MF
-
-
-
-
org.apache.maven.plugins
maven-javadoc-plugin
@@ -239,6 +228,18 @@
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java
index 73eb45bac..ff41de9b4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/ClassPathScanners.java
@@ -5,7 +5,9 @@ import io.avaje.classpath.scanner.ClassPathScannerFactory;
import io.ebean.config.DatabaseConfig;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
+import java.util.ServiceLoader;
/**
* Utility to finds and return the list of ClassPathScanner services.
@@ -17,7 +19,7 @@ public class ClassPathScanners {
*/
public static List find(DatabaseConfig config) {
List scanners = new ArrayList<>();
- for (ClassPathScannerFactory factory : config.serviceLoad(ClassPathScannerFactory.class)) {
+ for (ClassPathScannerFactory factory : ServiceLoader.load(ClassPathScannerFactory.class)) {
scanners.add(factory.createScanner(config.getClassLoadConfig().getClassLoader()));
}
return scanners;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 439f888a9..e18a2e0de 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -380,7 +380,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
*/
public void start() {
if (config.isRunMigration() && TenantMode.DB != config.getTenantMode()) {
- final AutoMigrationRunner migrationRunner = config.service(AutoMigrationRunner.class);
+ final AutoMigrationRunner migrationRunner = ServiceUtil.service(AutoMigrationRunner.class);
if (migrationRunner == null) {
throw new IllegalStateException("No AutoMigrationRunner found. Probably ebean-migration is not in the classpath?");
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
index f65cb0823..5cf4d7b2c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
@@ -124,7 +124,7 @@ final class InitDataSource {
* Attach DataSourceAlert via service loader if present.
*/
private void attachAlert(DataSourceConfig dsConfig) {
- DataSourceAlertFactory alertFactory = config.service(DataSourceAlertFactory.class);
+ DataSourceAlertFactory alertFactory = ServiceUtil.service(DataSourceAlertFactory.class);
if (alertFactory != null) {
dsConfig.setAlert(alertFactory.createAlert());
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
index 50410beb0..905a344e9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
@@ -156,7 +156,7 @@ public final class InternalConfiguration {
this.clockService = new ClockService(config.getClock());
this.tableModState = new TableModState();
this.logManager = initLogManager();
- this.docStoreFactory = initDocStoreFactory(config.service(DocStoreFactory.class));
+ this.docStoreFactory = initDocStoreFactory(service(DocStoreFactory.class));
this.jsonFactory = config.getJsonFactory();
this.clusterManager = clusterManager;
this.backgroundExecutor = backgroundExecutor;
@@ -191,8 +191,12 @@ public final class InternalConfiguration {
return new InternalConfigXmlMap(xmEbeans, config.getClassLoadConfig().getClassLoader());
}
+ private S service(Class cls) {
+ return ServiceUtil.service(cls);
+ }
+
private List readExternalMapping() {
- final XmapService xmapService = config.service(XmapService.class);
+ final XmapService xmapService = service(XmapService.class);
if (xmapService == null) {
return Collections.emptyList();
}
@@ -201,7 +205,7 @@ public final class InternalConfiguration {
private SpiLogManager initLogManager() {
// allow plugin - i.e. capture executed SQL for testing/asserts
- SpiLoggerFactory loggerFactory = config.service(SpiLoggerFactory.class);
+ SpiLoggerFactory loggerFactory = service(SpiLoggerFactory.class);
if (loggerFactory == null) {
loggerFactory = new DLoggerFactory();
}
@@ -336,7 +340,7 @@ public final class InternalConfiguration {
}
AutoTuneService createAutoTuneService(SpiEbeanServer server) {
- final AutoTuneServiceProvider provider = config.service(AutoTuneServiceProvider.class);
+ final AutoTuneServiceProvider provider = service(AutoTuneServiceProvider.class);
return provider == null ? new NoAutoTuneService() : provider.create(server, config);
}
@@ -445,7 +449,7 @@ public final class InternalConfiguration {
if (!profilingConfig.isEnabled()) {
return new NoopProfileHandler();
}
- SpiProfileHandler handler = config.service(SpiProfileHandler.class);
+ SpiProfileHandler handler = service(SpiProfileHandler.class);
if (handler == null) {
handler = new DefaultProfileHandler(profilingConfig);
}
@@ -533,7 +537,7 @@ public final class InternalConfiguration {
}
SlowQueryListener listener = config.getSlowQueryListener();
if (listener == null) {
- listener = config.service(SlowQueryListener.class);
+ listener = service(SlowQueryListener.class);
if (listener == null) {
listener = new DefaultSlowQueryListener();
}
@@ -589,7 +593,7 @@ public final class InternalConfiguration {
}
ServerCacheFactory factory = serverCachePlugin.create(config, backgroundExecutor);
- ServerCacheNotifyPlugin notifyPlugin = config.service(ServerCacheNotifyPlugin.class);
+ ServerCacheNotifyPlugin notifyPlugin = service(ServerCacheNotifyPlugin.class);
if (notifyPlugin != null) {
// plugin supplied so use that to send notifications
cacheNotify = notifyPlugin.create(config);
@@ -644,7 +648,7 @@ public final class InternalConfiguration {
* Return the DDL generator.
*/
public SpiDdlGenerator initDdlGenerator(SpiEbeanServer server) {
- final SpiDdlGeneratorProvider service = config.service(SpiDdlGeneratorProvider.class);
+ final SpiDdlGeneratorProvider service = service(SpiDdlGeneratorProvider.class);
return service == null ? new NoopDdl() : service.generator(server);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/ServiceUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/ServiceUtil.java
new file mode 100644
index 000000000..082f874a4
--- /dev/null
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/ServiceUtil.java
@@ -0,0 +1,13 @@
+package io.ebeaninternal.server.core;
+
+import java.util.Iterator;
+import java.util.ServiceLoader;
+
+public final class ServiceUtil {
+
+ public static S service(Class cls) {
+ ServiceLoader load = ServiceLoader.load(cls);
+ Iterator serviceInstances = load.iterator();
+ return serviceInstances.hasNext() ? serviceInstances.next() : null;
+ }
+}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java
index 5d95efd6e..3dcc7c775 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java
@@ -17,6 +17,7 @@ import io.ebean.types.Inet;
import io.ebean.util.AnnotationUtil;
import io.ebeaninternal.api.DbOffline;
import io.ebeaninternal.api.GeoTypeProvider;
+import io.ebeaninternal.server.core.ServiceUtil;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
import org.joda.time.DateTime;
@@ -156,7 +157,7 @@ public final class DefaultTypeManager implements TypeManager {
}
private void loadGeoTypeBinder(DatabaseConfig config) {
- final GeoTypeProvider provider = config.service(GeoTypeProvider.class);
+ final GeoTypeProvider provider = ServiceUtil.service(GeoTypeProvider.class);
if (provider != null) {
geoTypeBinder = provider.createBinder(config);
}
diff --git a/ebean-core/src/main/java9/module-info.java b/ebean-core/src/main/java9/module-info.java
new file mode 100644
index 000000000..bc518b421
--- /dev/null
+++ b/ebean-core/src/main/java9/module-info.java
@@ -0,0 +1,63 @@
+module io.ebean.core {
+
+ uses io.ebean.plugin.Plugin;
+ uses io.ebean.cache.ServerCachePlugin;
+ uses io.ebean.cache.ServerCacheNotifyPlugin;
+ uses io.ebean.config.DatabaseConfigProvider;
+ uses io.ebean.config.ServerConfigProvider;
+ uses io.ebean.config.ModuleInfoLoader;
+ uses io.ebean.datasource.DataSourceAlertFactory;
+ uses io.ebean.core.type.ExtraTypeFactory;
+ uses io.ebeanservice.docstore.api.DocStoreFactory;
+ uses io.ebean.migration.auto.AutoMigrationRunner;
+ uses io.avaje.classpath.scanner.ClassPathScannerFactory;
+ uses io.ebeaninternal.api.SpiLoggerFactory;
+ uses io.ebeaninternal.api.GeoTypeProvider;
+ uses io.ebeaninternal.api.SpiDdlGeneratorProvider;
+ uses io.ebeaninternal.xmapping.api.XmapService;
+ uses io.ebeaninternal.server.autotune.AutoTuneServiceProvider;
+ uses io.ebeaninternal.server.cluster.ClusterBroadcastFactory;
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.migration.auto;
+ requires transitive io.ebean.xmapping.api;
+ requires transitive io.ebean.core.type;
+ requires transitive io.ebean.ddl.runner;
+ requires transitive org.antlr.antlr4.runtime;
+ requires io.avaje.classpath.scanner;
+ requires io.ebean.types;
+ requires org.slf4j;
+
+ requires static io.avaje.jsr305x;
+ requires static com.fasterxml.jackson.core;
+ requires static com.fasterxml.jackson.databind;
+ requires static jakarta.validation;
+ requires static java.transaction;
+ requires static java.naming;
+ requires static java.validation;
+ requires static org.postgresql.jdbc;
+ requires static joda.time;
+
+ exports io.ebeaninternal.api;
+ exports io.ebeaninternal.server.cache;
+ // export these for io.ebean.ddl.generator (but that becomes unnamed module in maven test scope)
+ exports io.ebeaninternal.server.deploy;
+ exports io.ebeaninternal.server.deploy.visitor;
+// exports io.ebeaninternal.server.deploy to io.ebean.autotune, io.ebean.ddl.generator;
+// exports io.ebeaninternal.server.deploy.visitor to io.ebean.ddl.generator;
+
+ exports io.ebeaninternal.server.el to io.ebean.autotune;
+ exports io.ebeaninternal.server.autotune to io.ebean.autotune;
+ exports io.ebeaninternal.server.querydefn to io.ebean.autotune, io.ebean.querybean;
+ exports io.ebeaninternal.server.type to io.ebean.postgis;
+ exports io.ebeaninternal.server.util to io.ebean.querybean;
+ exports io.ebeaninternal.server.expression to io.ebean.querybean;
+
+ provides io.ebean.metric.MetricFactory with io.ebeaninternal.server.profile.DMetricFactory;
+ provides io.ebean.service.SpiContainerFactory with io.ebeaninternal.server.DContainerFactory;
+ provides io.ebean.service.SpiFetchGroupService with io.ebeaninternal.server.query.DFetchGroupService;
+ provides io.ebean.service.SpiJsonService with io.ebeaninternal.json.DJsonService;
+ provides io.ebean.service.SpiProfileLocationFactory with io.ebeaninternal.server.profile.DProfileLocationFactory;
+ provides io.ebean.service.SpiRawSqlService with io.ebeaninternal.server.rawsql.DRawSqlService;
+
+}
diff --git a/ebean-core/src/main/resources/META-INF/MANIFEST.MF b/ebean-core/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 52ef5c4ce..000000000
--- a/ebean-core/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,27 +0,0 @@
-Manifest-Version: 1.0
-Premain-Class: io.ebean.enhance.agent.Transformer
-Automatic-Module-Name: io.ebean.core
-Bundle-ManifestVersion: 2
-Bundle-Name: Ebean-ORM
-Bundle-SymbolicName: io.ebean
-Bundle-Version: 4.2.0
-Bundle-ClassPath: .
-Bundle-Vendor: avaje
-Export-Package: io.ebean,
- io.ebean.annotation,
- io.ebean.bean,
- io.ebean.cache,
- io.ebean.common,
- io.ebean.config,
- io.ebean.config.dbplatform,
- io.ebean.event,
- io.ebean.meta,
- io.ebean.text,
- io.ebean.text.csv,
- io.ebean.text.json,
- io.ebean.util
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.slf4j.api;bundle-version="1.7.2"
-Import-Package: javax.persistence;version="2.0.0"
-
-
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index d8b8238b9..7b2f5a50d 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -65,7 +65,7 @@
javax.validation
validation-api
- 1.1.0.Final
+ 2.0.1.Final
test
@@ -90,18 +90,17 @@
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
-
- src/main/resources/META-INF/MANIFEST.MF
-
+
+ io.avaje.tile:moditech-module:1.0
+
-
diff --git a/ebean-ddl-generator/src/main/java9/module-info.java b/ebean-ddl-generator/src/main/java9/module-info.java
new file mode 100644
index 000000000..65d58286e
--- /dev/null
+++ b/ebean-ddl-generator/src/main/java9/module-info.java
@@ -0,0 +1,15 @@
+open module io.ebean.ddl.generator {
+
+ exports io.ebean.dbmigration;
+
+ provides io.ebean.dbmigration.DbMigration with io.ebeaninternal.dbmigration.DefaultDbMigration;
+ provides io.ebeaninternal.api.SpiDdlGeneratorProvider with io.ebeaninternal.dbmigration.DdlGeneratorProvider;
+
+ requires transitive io.ebean.ddl.runner;
+ requires transitive io.ebean.core;
+ requires transitive java.xml.bind;
+ requires io.ebean.core.type;
+ requires io.ebean.migration;
+
+ uses io.ebean.dbmigration.DbMigration;
+}
diff --git a/ebean-ddl-generator/src/main/resources/META-INF/MANIFEST.MF b/ebean-ddl-generator/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 54d26a6d1..000000000
--- a/ebean-ddl-generator/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.ddlgen
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index 3067642f2..0facbaa24 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -14,15 +14,17 @@
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
-
- src/main/resources/META-INF/MANIFEST.MF
-
+
+ io.avaje.tile:moditech-module:1.0
+
+
diff --git a/ebean-externalmapping-api/src/main/java9/module-info.java b/ebean-externalmapping-api/src/main/java9/module-info.java
new file mode 100644
index 000000000..30d64401a
--- /dev/null
+++ b/ebean-externalmapping-api/src/main/java9/module-info.java
@@ -0,0 +1,4 @@
+module io.ebean.xmapping.api {
+
+ exports io.ebeaninternal.xmapping.api;
+}
diff --git a/ebean-externalmapping-api/src/main/resources/META-INF/MANIFEST.MF b/ebean-externalmapping-api/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index e18bf48cd..000000000
--- a/ebean-externalmapping-api/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.externalmapping.api
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index e1c44c2a2..e7f51bc89 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -90,21 +90,11 @@
io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
-
- src/main/resources/META-INF/MANIFEST.MF
-
-
-
-
diff --git a/ebean-externalmapping-xml/src/main/java9/module-info.java b/ebean-externalmapping-xml/src/main/java9/module-info.java
new file mode 100644
index 000000000..c81eda11b
--- /dev/null
+++ b/ebean-externalmapping-xml/src/main/java9/module-info.java
@@ -0,0 +1,19 @@
+import io.avaje.classpath.scanner.ClassPathScannerFactory;
+import io.ebeaninternal.xmapping.api.XmapService;
+import io.ebeaninternal.xmlmapping.JaxbXmapService;
+
+/**
+ * Provider of XmapService.
+ */
+module io.ebean.xmapping.xml {
+
+ provides XmapService with JaxbXmapService;
+
+ requires transitive io.ebean.xmapping.api;
+ requires transitive java.xml;
+ requires transitive java.xml.bind;
+ requires io.avaje.classpath.scanner;
+
+ uses ClassPathScannerFactory;
+
+}
diff --git a/ebean-externalmapping-xml/src/main/resources/META-INF/MANIFEST.MF b/ebean-externalmapping-xml/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 86e56b488..000000000
--- a/ebean-externalmapping-xml/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.externalmapping.xml
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index a122bd7bc..4032fd07a 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -106,6 +106,7 @@
io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
diff --git a/ebean-postgis/src/main/java9/module-info.java b/ebean-postgis/src/main/java9/module-info.java
new file mode 100644
index 000000000..a24837bc8
--- /dev/null
+++ b/ebean-postgis/src/main/java9/module-info.java
@@ -0,0 +1,18 @@
+import io.ebean.core.type.ExtraTypeFactory;
+import io.ebeaninternal.api.GeoTypeProvider;
+
+/**
+ * Provides GeoTypeProvider and ExtraTypeFactory.
+ */
+module io.ebean.postgis {
+
+ provides ExtraTypeFactory with io.ebean.postgis.PostgisExtraTypeFactory;
+ provides GeoTypeProvider with io.ebean.postgis.PostgisGeoTypeBindProvider;
+
+ requires io.ebean.core;
+ requires org.postgresql.jdbc;
+ requires postgis.jdbc;
+ requires geolatte.geom;
+ requires com.fasterxml.jackson.core;
+
+}
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index dc8fe5394..1afa62779 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -93,7 +93,14 @@
-
+
+ maven-surefire-plugin
+
+
+ --add-opens io.ebean.querybean/org.querytest=io.ebean.core
+
+
+
io.repaint.maven
@@ -103,21 +110,11 @@
io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
-
- src/main/resources/META-INF/MANIFEST.MF
-
-
-
-
diff --git a/ebean-querybean/src/main/java9/module-info.java b/ebean-querybean/src/main/java9/module-info.java
new file mode 100644
index 000000000..b45c04c57
--- /dev/null
+++ b/ebean-querybean/src/main/java9/module-info.java
@@ -0,0 +1,11 @@
+module io.ebean.querybean {
+
+ exports io.ebean.typequery;
+
+ requires io.ebean.api;
+ requires io.ebean.core;
+ requires static io.ebean.types;
+ requires static joda.time;
+ requires static io.avaje.jsr305x;
+
+}
diff --git a/ebean-querybean/src/main/resources/META-INF/MANIFEST.MF b/ebean-querybean/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 4f0335353..000000000
--- a/ebean-querybean/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.querybean
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 3f899fa34..89c8d87da 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -81,6 +81,7 @@
io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
diff --git a/ebean-redis/src/main/java9/module-info.java b/ebean-redis/src/main/java9/module-info.java
new file mode 100644
index 000000000..3cabe7f6a
--- /dev/null
+++ b/ebean-redis/src/main/java9/module-info.java
@@ -0,0 +1,13 @@
+import io.ebean.cache.ServerCachePlugin;
+
+/**
+ * Provider of ServerCachePlugin.
+ */
+module io.ebean.redis {
+
+ provides ServerCachePlugin with io.ebean.redis.RedisCachePlugin;
+
+ requires transitive io.ebean.core;
+ requires transitive redis.clients.jedis;
+
+}
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 46f0646c7..0c80df332 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -113,7 +113,7 @@
javax.validation
validation-api
- 1.1.0.Final
+ 2.0.1.Final
test
@@ -221,21 +221,11 @@
io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
-
- src/main/resources/META-INF/MANIFEST.MF
-
-
-
-
diff --git a/ebean-test/src/main/java9/module-info.java b/ebean-test/src/main/java9/module-info.java
new file mode 100644
index 000000000..94307a376
--- /dev/null
+++ b/ebean-test/src/main/java9/module-info.java
@@ -0,0 +1,25 @@
+
+open module io.ebean.test {
+
+ exports io.ebean.test;
+ exports io.ebean.test.config;
+ exports io.ebean.test.config.platform;
+ exports io.ebean.test.config.provider;
+
+ provides io.ebeaninternal.api.SpiLoggerFactory with io.ebean.test.CapturingLoggerFactory;
+ provides io.ebean.config.AutoConfigure with io.ebean.test.config.AutoConfigureForTesting;
+
+ requires transitive org.slf4j;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.ddl.generator;
+ requires com.fasterxml.jackson.core;
+ requires com.fasterxml.jackson.databind;
+ requires com.fasterxml.jackson.datatype.jsr310;
+
+ requires transitive io.ebean.docker;
+ requires transitive org.assertj.core;
+ requires transitive java.xml.bind;
+ requires transitive com.h2database;
+
+}
diff --git a/ebean-test/src/main/resources/META-INF/MANIFEST.MF b/ebean-test/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 5dd7f3321..000000000
--- a/ebean-test/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean.test
diff --git a/ebean/pom.xml b/ebean/pom.xml
index 07e20f810..b1967b57a 100644
--- a/ebean/pom.xml
+++ b/ebean/pom.xml
@@ -43,13 +43,14 @@
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
-
- src/main/resources/META-INF/MANIFEST.MF
-
+
+ io.avaje.tile:moditech-module:1.0
+
diff --git a/ebean/src/main/java9/module-info.java b/ebean/src/main/java9/module-info.java
new file mode 100644
index 000000000..ac3f52c61
--- /dev/null
+++ b/ebean/src/main/java9/module-info.java
@@ -0,0 +1,7 @@
+module io.ebean {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.querybean;
+
+}
diff --git a/ebean/src/main/resources/META-INF/MANIFEST.MF b/ebean/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 48b57ad58..000000000
--- a/ebean/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Automatic-Module-Name: io.ebean
diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml
index 7f14f7265..f0dc3d79a 100644
--- a/querybean-generator/pom.xml
+++ b/querybean-generator/pom.xml
@@ -35,6 +35,17 @@
-proc:none
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
diff --git a/querybean-generator/src/main/java9/module-info.java b/querybean-generator/src/main/java9/module-info.java
new file mode 100644
index 000000000..f864e9528
--- /dev/null
+++ b/querybean-generator/src/main/java9/module-info.java
@@ -0,0 +1,7 @@
+module io.ebean.querybean.generator {
+
+ provides javax.annotation.processing.Processor with io.ebean.querybean.generator.Processor;
+
+ requires java.compiler;
+ requires java.sql;
+}