diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index 6fa586dc4..e05ea5fd5 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -10,8 +10,8 @@
ebean-api
- 2.10.0
- 2.10.0
+ 2.11.3
+ 2.11.3
@@ -79,6 +79,7 @@
com.fasterxml.jackson.core
jackson-core
${jackson-core.version}
+ true
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 78f5c903e..3c3648193 100644
--- a/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/ClassLoadConfig.java
@@ -69,6 +69,10 @@ public class ClassLoadConfig {
return isPresent("com.fasterxml.jackson.annotation.JsonIgnore");
}
+ public boolean isJacksonCorePresent() {
+ return isPresent("com.fasterxml.jackson.core.JsonParser");
+ }
+
/**
* Return true if Jackson ObjectMapper is present.
*/
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index dab004ab6..9c1af0b92 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -18,8 +18,8 @@
- 2.10.0
- 2.10.0
+ 2.11.3
+ 2.11.3
@@ -131,9 +131,9 @@
com.fasterxml.jackson.core
jackson-core
${jackson-core.version}
+ true
-
com.fasterxml.jackson.core
jackson-databind
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 c1f392c2b..56ea7589a 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
@@ -118,69 +118,41 @@ public class InternalConfiguration {
private static final Logger logger = LoggerFactory.getLogger(InternalConfiguration.class);
private final TableModState tableModState;
-
private final boolean online;
-
private final DatabaseConfig config;
-
private final BootupClasses bootupClasses;
-
private final DatabasePlatform databasePlatform;
-
private final DeployInherit deployInherit;
-
private final TypeManager typeManager;
-
private final DtoBeanManager dtoBeanManager;
-
private final ClockService clockService;
-
private final DataTimeZone dataTimeZone;
-
private final Binder binder;
-
private final DeployCreateProperties deployCreateProperties;
-
private final DeployUtil deployUtil;
-
private final BeanDescriptorManager beanDescriptorManager;
-
private final CQueryEngine cQueryEngine;
-
private final ClusterManager clusterManager;
-
private final SpiCacheManager cacheManager;
-
private final ServerCachePlugin serverCachePlugin;
-
- private ServerCacheNotify cacheNotify;
-
- private boolean localL2Caching;
-
+ private final boolean jacksonCorePresent;
private final ExpressionFactory expressionFactory;
-
private final SpiBackgroundExecutor backgroundExecutor;
-
private final JsonFactory jsonFactory;
-
private final DocStoreFactory docStoreFactory;
-
- /**
- * List of plugins (that ultimately the DefaultServer configures late in construction).
- */
private final List plugins = new ArrayList<>();
-
private final MultiValueBind multiValueBind;
-
private final SpiLogManager logManager;
-
private final ExtraMetrics extraMetrics = new ExtraMetrics();
+ private ServerCacheNotify cacheNotify;
+ private boolean localL2Caching;
InternalConfiguration(boolean online, ClusterManager clusterManager, SpiBackgroundExecutor backgroundExecutor,
DatabaseConfig config, BootupClasses bootupClasses) {
this.online = online;
this.config = config;
+ this.jacksonCorePresent = config.getClassLoadConfig().isJacksonCorePresent();
this.clockService = new ClockService(config.getClock());
this.tableModState = new TableModState();
this.logManager = initLogManager();
@@ -210,6 +182,10 @@ public class InternalConfiguration {
this.cQueryEngine = new CQueryEngine(config, databasePlatform, binder, asOfTableMapping, draftTableMap);
}
+ public boolean isJacksonCorePresent() {
+ return jacksonCorePresent;
+ }
+
private InternalConfigXmlMap initExternalMapping() {
final List xmEbeans = readExternalMapping();
return new InternalConfigXmlMap(xmEbeans, config.getClassLoadConfig().getClassLoader());
@@ -307,7 +283,7 @@ public class InternalConfiguration {
* Return the ChangeLogListener to use with a default implementation if none defined.
*/
public ChangeLogListener changeLogListener(ChangeLogListener listener) {
- return plugin((listener != null) ? listener : new DefaultChangeLogListener());
+ return plugin((listener != null) ? listener : jacksonCorePresent ? new DefaultChangeLogListener() : null);
}
/**
@@ -315,7 +291,7 @@ public class InternalConfiguration {
*/
ReadAuditLogger getReadAuditLogger() {
ReadAuditLogger found = bootupClasses.getReadAuditLogger();
- return plugin(found != null ? found : new DefaultReadAuditLogger());
+ return plugin(found != null ? found : jacksonCorePresent? new DefaultReadAuditLogger(): null);
}
/**
@@ -356,7 +332,7 @@ public class InternalConfiguration {
}
SpiJsonContext createJsonContext(SpiEbeanServer server) {
- return new DJsonContext(server, jsonFactory, typeManager);
+ return jacksonCorePresent ? new DJsonContext(server, jsonFactory, typeManager) : null;
}
AutoTuneService createAutoTuneService(SpiEbeanServer server) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
index 6c0f6f0b2..218e57a3c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
@@ -432,7 +432,7 @@ public class BeanDescriptor implements BeanType, STreeType {
boolean noRelationships = propertiesOne.length + propertiesMany.length == 0;
this.cacheSharableBeans = noRelationships && deploy.getCacheOptions().isReadOnly();
this.cacheHelp = new BeanDescriptorCacheHelp<>(this, owner.getCacheManager(), deploy.getCacheOptions(), cacheSharableBeans, propertiesOneImported);
- this.jsonHelp = new BeanDescriptorJsonHelp<>(this);
+ this.jsonHelp = initJsonHelp();
this.draftHelp = new BeanDescriptorDraftHelp<>(this);
this.docStoreAdapter = owner.createDocStoreBeanAdapter(this, deploy);
this.docStoreQueueId = docStoreAdapter.getQueueId();
@@ -469,6 +469,14 @@ public class BeanDescriptor implements BeanType, STreeType {
}
}
+ public boolean isJacksonCorePresent() {
+ return owner.isJacksonCorePresent();
+ }
+
+ private BeanDescriptorJsonHelp initJsonHelp() {
+ return isJacksonCorePresent() ? new BeanDescriptorJsonHelp<>(this) : null;
+ }
+
/**
* Return true if the bean should be treated as a reference bean when it only has its id populated.
* To be true it has other scalar properties that are not generated on insert.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
index 7102a4bc0..33722793a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
@@ -95,87 +95,47 @@ public class BeanDescriptorManager implements BeanDescriptorMap {
private static final BeanDescComparator beanDescComparator = new BeanDescComparator();
private final ReadAnnotations readAnnotations;
-
private final TransientProperties transientProperties;
-
- /**
- * Helper to derive inheritance information.
- */
private final DeployInherit deplyInherit;
-
private final BeanPropertyAccess beanPropertyAccess = new EnhanceBeanPropertyAccess();
-
private final DeployUtil deployUtil;
-
private final PersistControllerManager persistControllerManager;
-
private final PostLoadManager postLoadManager;
-
private final PostConstructManager postConstructManager;
-
private final BeanFinderManager beanFinderManager;
-
private final PersistListenerManager persistListenerManager;
-
private final BeanQueryAdapterManager beanQueryAdapterManager;
-
private final NamingConvention namingConvention;
-
private final DeployCreateProperties createProperties;
-
private final BeanManagerFactory beanManagerFactory;
-
private final DatabaseConfig config;
-
private final ChangeLogListener changeLogListener;
-
private final ChangeLogRegister changeLogRegister;
-
private final ChangeLogPrepare changeLogPrepare;
-
private final DocStoreFactory docStoreFactory;
-
private final MultiValueBind multiValueBind;
-
private final TypeManager typeManager;
-
- private int entityBeanCount;
-
private final BootupClasses bootupClasses;
-
private final String serverName;
-
private final Map, BeanTable> beanTableMap = new HashMap<>();
-
private final Map> descMap = new HashMap<>();
-
private final Map> descQueueMap = new HashMap<>();
-
private final Map> beanManagerMap = new HashMap<>();
-
private final Map>> tableToDescMap = new HashMap<>();
-
private final Map>> tableToViewDescMap = new HashMap<>();
-
- private List> immutableDescriptorList;
-
private final DbIdentity dbIdentity;
-
private final DataSource dataSource;
-
private final DatabasePlatform databasePlatform;
-
private final SpiCacheManager cacheManager;
-
private final BackgroundExecutor backgroundExecutor;
-
private final EncryptKeyManager encryptKeyManager;
-
private final IdBinderFactory idBinderFactory;
-
private final BeanLifecycleAdapterFactory beanLifecycleAdapterFactory;
-
private final String asOfViewSuffix;
+ private final boolean jacksonCorePresent;
+ private final int queryPlanTTLSeconds;
+ private int entityBeanCount;
+ private List> immutableDescriptorList;
/**
* Map of base tables to 'with history views' used to support 'as of' queries.
@@ -187,8 +147,6 @@ public class BeanDescriptorManager implements BeanDescriptorMap {
*/
private final Map draftTableMap = new HashMap<>();
- private final int queryPlanTTLSeconds;
-
// temporary collections used during startup and then cleared
private Map, DeployBeanInfo>> deployInfoMap = new HashMap<>();
@@ -232,6 +190,12 @@ public class BeanDescriptorManager implements BeanDescriptorMap {
this.changeLogPrepare = config.changeLogPrepare(bootupClasses.getChangeLogPrepare());
this.changeLogListener = config.changeLogListener(bootupClasses.getChangeLogListener());
this.changeLogRegister = config.changeLogRegister(bootupClasses.getChangeLogRegister());
+ this.jacksonCorePresent = config.isJacksonCorePresent();
+ }
+
+ @Override
+ public boolean isJacksonCorePresent() {
+ return jacksonCorePresent;
}
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorMap.java
index dc473b098..1ff397f0a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorMap.java
@@ -71,4 +71,9 @@ public interface BeanDescriptorMap {
* Return the scalarType for the given logical type.
*/
ScalarType> getScalarType(String cast);
+
+ /**
+ * Return true if Jackson core is present on the classpath.
+ */
+ boolean isJacksonCorePresent();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
index f20d4b9b3..8b98e1679 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
@@ -144,7 +144,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
this.inverseJoin = deploy.createInverseTableJoin();
this.modifyListenMode = deploy.getModifyListenMode();
- this.jsonHelp = new BeanPropertyAssocManyJsonHelp(this);
+ this.jsonHelp = descriptor.isJacksonCorePresent() ? new BeanPropertyAssocManyJsonHelp(this) : null;
}
@Override
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 6abe6439d..46a3c120a 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -9,6 +9,10 @@
ebean-test
+
+ 2.11.3
+
+
@@ -31,6 +35,13 @@
12.5.1-SNAPSHOT
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-databind.version}
+ true
+
+
io.ebean.test
ebean-test-docker