diff --git a/src/main/java/io/ebean/EbeanServer.java b/src/main/java/io/ebean/EbeanServer.java index 78619886b..6fbc54b24 100644 --- a/src/main/java/io/ebean/EbeanServer.java +++ b/src/main/java/io/ebean/EbeanServer.java @@ -8,6 +8,12 @@ import io.ebean.plugin.Property; import io.ebean.plugin.SpiServer; import io.ebean.text.csv.CsvReader; import io.ebean.text.json.JsonContext; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.persistence.NonUniqueResultException; +import javax.persistence.OptimisticLockException; +import javax.persistence.PersistenceException; import java.util.Collection; import java.util.List; import java.util.Map; @@ -16,11 +22,6 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.function.Consumer; import java.util.function.Predicate; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.persistence.NonUniqueResultException; -import javax.persistence.OptimisticLockException; -import javax.persistence.PersistenceException; /** * Provides the API for fetching and saving beans to a particular DataSource. @@ -104,7 +105,6 @@ public interface EbeanServer { * * @param shutdownDataSource if true then shutdown the underlying DataSource if it is the EbeanORM * DataSource implementation. - * DataSource implementation. * @param deregisterDriver if true then deregister the JDBC driver if it is the EbeanORM * DataSource implementation. */ @@ -444,9 +444,9 @@ public interface EbeanServer { * They do not need to be registered with Ebean before use. *

* - * @param dtoType The type of the DTO bean the rows will be mapped into. - * @param namedQuery The name of the query - * @param The type of the DTO bean. + * @param dtoType The type of the DTO bean the rows will be mapped into. + * @param namedQuery The name of the query + * @param The type of the DTO bean. */ DtoQuery createNamedDtoQuery(Class dtoType, String namedQuery); diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index da3d5af00..b4827d155 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -105,6 +105,13 @@ import io.ebeaninternal.server.transaction.TransactionManager; import io.ebeaninternal.util.ParamTypeHelper; import io.ebeaninternal.util.ParamTypeHelper.TypeInfo; import io.ebeanservice.docstore.api.DocStoreIntegration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.persistence.NonUniqueResultException; +import javax.persistence.OptimisticLockException; +import javax.persistence.PersistenceException; +import javax.sql.DataSource; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -119,12 +126,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; -import javax.persistence.NonUniqueResultException; -import javax.persistence.OptimisticLockException; -import javax.persistence.PersistenceException; -import javax.sql.DataSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * The default server side implementation of EbeanServer. @@ -1001,11 +1002,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public DtoQuery createNamedDtoQuery(Class dtoType, String namedQuery) { DtoBeanDescriptor descriptor = dtoBeanManager.getDescriptor(dtoType); - SpiRawSql rawSql = descriptor.getNamedRawSql(namedQuery); - if (rawSql != null) { - return new DefaultDtoQuery<>(this, descriptor, rawSql.getSql().getUnparsedSql()); + String sql = descriptor.getNamedRawSql(namedQuery); + if (sql == null) { + throw new PersistenceException("No named query called " + namedQuery + " for bean:" + dtoType.getName()); } - throw new PersistenceException("No named query called " + namedQuery + " for bean:" + dtoType.getName()); + return new DefaultDtoQuery<>(this, descriptor, sql); } @Override diff --git a/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlRead.java b/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlRead.java index 401dbcd17..8bb1b9be7 100644 --- a/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlRead.java +++ b/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlRead.java @@ -1,39 +1,49 @@ package io.ebeaninternal.server.core; import io.ebean.config.ServerConfig; +import io.ebeaninternal.server.dto.DtoNamedQueries; import io.ebeaninternal.xmlmapping.XmlMappingReader; +import io.ebeaninternal.xmlmapping.model.XmDto; import io.ebeaninternal.xmlmapping.model.XmEbean; +import io.ebeaninternal.xmlmapping.model.XmRawSql; import org.avaje.classpath.scanner.ClassPathScanner; import org.avaje.classpath.scanner.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +/** + * Reads the Xml deployment information. + */ class InternalConfigXmlRead { private static final Logger log = LoggerFactory.getLogger(InternalConfigXmlRead.class); private final ServerConfig serverConfig; + private final ClassLoader classLoader; + + private final Map, DtoNamedQueries> dtoNamedQueries = new HashMap<>(); + + private List xmlEbeanList; + InternalConfigXmlRead(ServerConfig serverConfig) { this.serverConfig = serverConfig; + this.classLoader = serverConfig.getClassLoadConfig().getClassLoader(); + + init(); } - List build() { - - ClassLoader classLoader = serverConfig.getClassLoadConfig().getClassLoader(); - List xmlEbeanList = XmlMappingReader.readByResourceName(classLoader, "ebean.xml"); - - List resources = searchXmlMapping(); - xmlEbeanList.addAll(XmlMappingReader.readByResourceList(resources)); - - return xmlEbeanList; + private void init() { + this.xmlEbeanList = XmlMappingReader.readByResourceName(classLoader, "ebean.xml"); + xmlEbeanList.addAll(XmlMappingReader.readByResourceList(xmlMappingResources())); } - - private List searchXmlMapping() { + private List xmlMappingResources() { List scanners = ClassPathScanners.find(serverConfig); List mappingLocations = serverConfig.getMappingLocations(); List resourceList = new ArrayList<>(); @@ -52,5 +62,47 @@ class InternalConfigXmlRead { return resourceList; } + /** + * Return the XML deployment information for entity beans. + */ + List xmlDeployment() { + return xmlEbeanList; + } + + /** + * Return the named queries for Dto beans. + */ + Map, DtoNamedQueries> readDtoMapping() { + for (XmEbean mapping : xmlEbeanList) { + List dtoList = mapping.getDto(); + for (XmDto dto : dtoList) { + readDtoMapping(dto); + } + } + + return dtoNamedQueries; + } + + private void readDtoMapping(XmDto dto) { + + String dtoClassName = dto.getClazz(); + Class dtoClass; + try { + dtoClass = Class.forName(dtoClassName, false, classLoader); + } catch (Exception e) { + log.error("Could not load dto bean class " + dtoClassName + " for ebean xml entry"); + return; + } + + DtoNamedQueries namedQueries = dtoNamedQueries.computeIfAbsent(dtoClass, aClass -> new DtoNamedQueries()); + + for (XmRawSql sql : dto.getRawSql()) { + namedQueries.addRawSql(sql.getName(), sql.getQuery().getValue()); + } + + if (!dto.getNamedQuery().isEmpty()) { + log.error("Only raw-sql named queries supported for DTO beans - bean:" + dtoClass); + } + } } diff --git a/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java index 82d395aed..31aea3889 100644 --- a/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java +++ b/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java @@ -69,23 +69,19 @@ import io.ebeaninternal.server.transaction.TransactionManagerOptions; import io.ebeaninternal.server.transaction.TransactionScopeManager; import io.ebeaninternal.server.type.DefaultTypeManager; import io.ebeaninternal.server.type.TypeManager; -import io.ebeaninternal.xmlmapping.XmlMappingReader; -import io.ebeaninternal.xmlmapping.model.XmEbean; import io.ebeanservice.docstore.api.DocStoreFactory; import io.ebeanservice.docstore.api.DocStoreIntegration; import io.ebeanservice.docstore.api.DocStoreUpdateProcessor; import io.ebeanservice.docstore.none.NoneDocStoreFactory; +import org.avaje.datasource.DataSourcePool; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.sql.DataSource; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.ServiceLoader; -import javax.sql.DataSource; -import org.avaje.classpath.scanner.ClassPathScanner; -import org.avaje.classpath.scanner.Resource; -import org.avaje.classpath.scanner.ResourceFilter; -import org.avaje.datasource.DataSourcePool; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Used to extend the ServerConfig with additional objects used to configure and @@ -138,8 +134,6 @@ public class InternalConfiguration { private final MultiValueBind multiValueBind; - private List xmlEbeanList = new ArrayList<>(); - public InternalConfiguration(ClusterManager clusterManager, SpiCacheManager cacheManager, SpiBackgroundExecutor backgroundExecutor, ServerConfig serverConfig, BootupClasses bootupClasses) { @@ -159,20 +153,14 @@ public class InternalConfiguration { this.multiValueBind = createMultiValueBind(databasePlatform.getPlatform()); this.deployInherit = new DeployInherit(bootupClasses); - xmlEbeanList = XmlMappingReader.readByResourceName(serverConfig.getClassLoadConfig().getClassLoader(), - "ebean.xml"); - List searchXmlMapping = searchXmlMapping(); - xmlEbeanList.addAll(XmlMappingReader.readByResourceList(serverConfig.getClassLoadConfig().getClassLoader(), - searchXmlMapping)); - this.deployCreateProperties = new DeployCreateProperties(typeManager); this.deployUtil = new DeployUtil(typeManager, serverConfig); - this.dtoBeanManager = new DtoBeanManager(typeManager); - dtoBeanManager.readXmlMapping(serverConfig.getClassLoadConfig().getClassLoader(), - xmlEbeanList); + InternalConfigXmlRead xmlRead = new InternalConfigXmlRead(serverConfig); + + this.dtoBeanManager = new DtoBeanManager(typeManager, xmlRead.readDtoMapping()); this.beanDescriptorManager = new BeanDescriptorManager(this); - Map asOfTableMapping = beanDescriptorManager.deploy(xmlEbeanList); + Map asOfTableMapping = beanDescriptorManager.deploy(xmlRead.xmlDeployment()); Map draftTableMap = beanDescriptorManager.getDraftTableMap(); beanDescriptorManager.scheduleBackgroundTrim(); @@ -181,31 +169,6 @@ public class InternalConfiguration { this.cQueryEngine = new CQueryEngine(serverConfig, databasePlatform, binder, asOfTableMapping, draftTableMap); } - private List searchXmlMapping() { - List scanners = ClassPathScanners.find(serverConfig); - List mappingLocations = serverConfig.getMappingLocations(); - List resourceList = new ArrayList<>(); - - long st = System.currentTimeMillis(); - if (mappingLocations != null && !mappingLocations.isEmpty()) { - for (ClassPathScanner finder : scanners) { - for (String mappingLocation : mappingLocations) { - resourceList.addAll(finder.scanForResources(mappingLocation, new ResourceFilter() { - - @Override - public boolean isMatch(String resourceName) { - return resourceName.endsWith(".xml"); - } - })); - } - } - } - - long searchTime = System.currentTimeMillis() - st; - logger.debug("Classpath search mappings[{}] searchTime[{}]", resourceList.size(), searchTime); - return resourceList; - } - /** * Create and return the ExpressionFactory based on configuration and database platform. */ diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java index 6be9dd585..0e6814365 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java @@ -26,7 +26,6 @@ import io.ebeaninternal.api.ConcurrencyMode; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.TransactionEventTable; import io.ebeaninternal.server.cache.SpiCacheManager; -import io.ebeaninternal.server.core.ClassPathScanners; import io.ebeaninternal.server.core.InternString; import io.ebeaninternal.server.core.InternalConfiguration; import io.ebeaninternal.server.core.Message; @@ -57,7 +56,6 @@ import io.ebeaninternal.server.query.CQueryPlan; import io.ebeaninternal.server.type.ScalarType; import io.ebeaninternal.server.type.ScalarTypeInteger; import io.ebeaninternal.server.type.TypeManager; -import io.ebeaninternal.xmlmapping.XmlMappingReader; import io.ebeaninternal.xmlmapping.model.XmAliasMapping; import io.ebeaninternal.xmlmapping.model.XmColumnMapping; import io.ebeaninternal.xmlmapping.model.XmEbean; @@ -66,9 +64,6 @@ import io.ebeaninternal.xmlmapping.model.XmNamedQuery; import io.ebeaninternal.xmlmapping.model.XmRawSql; import io.ebeanservice.docstore.api.DocStoreBeanAdapter; import io.ebeanservice.docstore.api.DocStoreFactory; -import org.avaje.classpath.scanner.ClassPathScanner; -import org.avaje.classpath.scanner.Resource; -import org.avaje.classpath.scanner.ResourceFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,17 +71,12 @@ import javax.persistence.MappedSuperclass; import javax.persistence.PersistenceException; import javax.persistence.Transient; import javax.sql.DataSource; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -1064,11 +1054,6 @@ public class BeanDescriptorManager implements BeanDescriptorMap { unidirectional.setDbRead(true); unidirectional.setDbInsertable(true); unidirectional.setDbUpdateable(false); - - targetDesc.setUnidirectional(unidirectional); - - // specify table and table alias... - BeanTable beanTable = getBeanTable(owningType); unidirectional.setBeanTable(beanTable); unidirectional.setName(beanTable.getBaseTable()); unidirectional.setJoinType(true); diff --git a/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java b/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java index 0e8f4b42f..10f2a2cdc 100644 --- a/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java +++ b/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java @@ -1,9 +1,7 @@ package io.ebeaninternal.server.dto; import io.ebean.meta.MetricVisitor; -import io.ebeaninternal.server.rawsql.SpiRawSql; -import java.util.HashMap; -import java.util.LinkedHashMap; + import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -12,25 +10,18 @@ import java.util.concurrent.ConcurrentHashMap; */ public class DtoBeanDescriptor { - private static final Map EMPTY_NAMED_QUERY = new HashMap<>(); - - private static final Map EMPTY_RAW_MAP = new HashMap<>(); - private final Map plans = new ConcurrentHashMap<>(); private final Class dtoType; private final DtoMeta meta; - private Map namedRawSql; + private final Map namedQueries; - private Map namedQuery; - - DtoBeanDescriptor(Class dtoType, DtoMeta meta) { + DtoBeanDescriptor(Class dtoType, DtoMeta meta, Map namedQueries) { this.dtoType = dtoType; this.meta = meta; - this.namedQuery = getNamedQuery(); - this.namedRawSql = getNamedRawSql(); + this.namedQueries = namedQueries; } public Class getType() { @@ -55,51 +46,11 @@ public class DtoBeanDescriptor { } } - /** - * Return the named ORM query. - */ - public String getNamedQuery(String name) { - return namedQuery.get(name); - } - /** * Return the named RawSql query. */ - public SpiRawSql getNamedRawSql(String named) { - return namedRawSql.get(named); + public String getNamedRawSql(String name) { + return namedQueries.get(name); } - /** - * Return the named ORM queries. - */ - public Map getNamedQuery() { - return (namedQuery != null) ? namedQuery : EMPTY_NAMED_QUERY; - } - - /** - * Add a named query. - */ - public void addNamedQuery(String name, String query) { - if (namedQuery == null) { - namedQuery = new LinkedHashMap<>(); - } - namedQuery.put(name, query); - } - - /** - * Return the named RawSql queries. - */ - public Map getNamedRawSql() { - return (namedRawSql != null) ? namedRawSql : EMPTY_RAW_MAP; - } - - /** - * Add a named RawSql from ebean.xml file. - */ - public void addRawSql(String name, SpiRawSql rawSql) { - if (namedRawSql == null) { - namedRawSql = new HashMap<>(); - } - namedRawSql.put(name, rawSql); - } } diff --git a/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java b/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java index 2871b6192..4388a180d 100644 --- a/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java +++ b/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java @@ -1,34 +1,28 @@ package io.ebeaninternal.server.dto; -import io.ebean.RawSqlBuilder; import io.ebean.meta.MetricVisitor; -import io.ebeaninternal.server.rawsql.SpiRawSql; import io.ebeaninternal.server.type.TypeManager; -import io.ebeaninternal.xmlmapping.model.XmAliasMapping; -import io.ebeaninternal.xmlmapping.model.XmColumnMapping; -import io.ebeaninternal.xmlmapping.model.XmDto; -import io.ebeaninternal.xmlmapping.model.XmEbean; -import io.ebeaninternal.xmlmapping.model.XmNamedQuery; -import io.ebeaninternal.xmlmapping.model.XmRawSql; -import java.util.List; + +import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Manages all the DTO bean descriptors. */ public class DtoBeanManager { - private static final Logger logger = LoggerFactory.getLogger(DtoBeanManager.class); + private static final Map EMPTY_NAMED_QUERIES = new HashMap<>(); private final TypeManager typeManager; + private final Map, DtoNamedQueries> namedQueries; + private final Map descriptorMap = new ConcurrentHashMap<>(); - public DtoBeanManager(TypeManager typeManager) { + public DtoBeanManager(TypeManager typeManager, Map, DtoNamedQueries> namedQueries) { this.typeManager = typeManager; + this.namedQueries = namedQueries; } /** @@ -44,56 +38,20 @@ public class DtoBeanManager { try { DtoMeta meta = new DtoMetaBuilder(dtoType, typeManager).build(); - return new DtoBeanDescriptor<>(dtoType, meta); + return new DtoBeanDescriptor<>(dtoType, meta, namedQueries(dtoType)); } catch (Exception e) { throw new IllegalStateException(e); } } + private Map namedQueries(Class dtoType) { + DtoNamedQueries namedQueries = this.namedQueries.get(dtoType); + return (namedQueries == null) ? EMPTY_NAMED_QUERIES : namedQueries.map(); + } + public void visitMetrics(MetricVisitor visitor) { for (DtoBeanDescriptor value : descriptorMap.values()) { value.visit(visitor); } } - - public void readXmlMapping(ClassLoader classLoader, List mappings) { - for (XmEbean mapping : mappings) { - List dtoList = mapping.getDto(); - for (XmDto dto : dtoList) { - readDtoMapping(classLoader, dto); - } - } - } - - private void readDtoMapping(ClassLoader classLoader, XmDto dto) { - String dtoClassName = dto.getClazz(); - Class dtoClass; - try { - dtoClass = Class.forName(dtoClassName, false, classLoader); - } catch (Exception e) { - logger.error("Could not load dto bean class " + dtoClassName + " for ebean xml entry"); - return; - } - - DtoBeanDescriptor dtoBeanDescriptor = getDescriptor(dtoClass); - if (dtoBeanDescriptor == null) { - logger.error("No dto bean for ebean xml entry " + dtoClass); - - } else { - for (XmRawSql sql : dto.getRawSql()) { - RawSqlBuilder builder = RawSqlBuilder.parse(sql.getQuery().getValue()); - for (XmColumnMapping columnMapping : sql.getColumnMapping()) { - builder.columnMapping(columnMapping.getColumn(), columnMapping.getProperty()); - } - for (XmAliasMapping aliasMapping : sql.getAliasMapping()) { - builder.tableAliasMapping(aliasMapping.getAlias(), aliasMapping.getProperty()); - } - dtoBeanDescriptor.addRawSql(sql.getName(), (SpiRawSql)builder.create()); - } - - for (XmNamedQuery namedQuery : dto.getNamedQuery()) { - dtoBeanDescriptor.addNamedQuery(namedQuery.getName(), namedQuery.getQuery().getValue()); - } - } - } } diff --git a/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java b/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java index 3e267349b..79a275e60 100644 --- a/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java +++ b/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java @@ -1,6 +1,11 @@ package io.ebeaninternal.xmlmapping; import io.ebeaninternal.xmlmapping.model.XmEbean; +import org.avaje.classpath.scanner.Resource; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -8,10 +13,6 @@ import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import org.avaje.classpath.scanner.Resource; public class XmlMappingReader { @@ -31,6 +32,9 @@ public class XmlMappingReader { } } + /** + * Read the deployment XML for the given resource name. + */ public static List readByResourceName(ClassLoader classLoader, String resourceName){ try { Enumeration resources = classLoader.getResources(resourceName); @@ -47,7 +51,10 @@ public class XmlMappingReader { } } - public static List readByResourceList(ClassLoader classLoader, List resourceList){ + /** + * Read the deployment XML for the given resources. + */ + public static List readByResourceList(List resourceList){ try { List mappings = new ArrayList<>(); for (Resource xmlMappingRes : resourceList) { diff --git a/src/main/java/io/ebeaninternal/xmlmapping/model/XmDto.java b/src/main/java/io/ebeaninternal/xmlmapping/model/XmDto.java index cb64fbfa6..57e431322 100644 --- a/src/main/java/io/ebeaninternal/xmlmapping/model/XmDto.java +++ b/src/main/java/io/ebeaninternal/xmlmapping/model/XmDto.java @@ -1,13 +1,13 @@ package io.ebeaninternal.xmlmapping.model; -import java.util.ArrayList; -import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; /** diff --git a/src/main/java/io/ebeaninternal/xmlmapping/model/XmEbean.java b/src/main/java/io/ebeaninternal/xmlmapping/model/XmEbean.java index 4979fc865..35ba42d58 100644 --- a/src/main/java/io/ebeaninternal/xmlmapping/model/XmEbean.java +++ b/src/main/java/io/ebeaninternal/xmlmapping/model/XmEbean.java @@ -1,12 +1,12 @@ package io.ebeaninternal.xmlmapping.model; -import java.util.ArrayList; -import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import java.util.ArrayList; +import java.util.List; /** @@ -67,6 +67,9 @@ public class XmEbean { return this.entity; } + /** + * Returns the List of XmDto beans. + */ public List getDto() { if (dto == null) { dto = new ArrayList<>(); diff --git a/src/main/resources/ebean-1.0.xsd b/src/main/resources/ebean-1.0.xsd index 4a79daecb..63de5f96b 100644 --- a/src/main/resources/ebean-1.0.xsd +++ b/src/main/resources/ebean-1.0.xsd @@ -7,8 +7,8 @@ - - + + diff --git a/src/test/java/io/ebean/NamedDtoQueryTest.java b/src/test/java/io/ebean/NamedDtoQueryTest.java index ec3b810e4..510aa709f 100644 --- a/src/test/java/io/ebean/NamedDtoQueryTest.java +++ b/src/test/java/io/ebean/NamedDtoQueryTest.java @@ -2,14 +2,15 @@ package io.ebean; import io.ebean.meta.BasicMetricVisitor; import io.ebean.meta.MetaQueryMetric; -import java.util.List; -import java.util.Optional; import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tests.model.basic.ResetBasicData; +import java.util.List; +import java.util.Optional; + import static org.assertj.core.api.Assertions.assertThat; public class NamedDtoQueryTest extends BaseTestCase { diff --git a/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java b/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java index 5f538f9d5..c5c916039 100644 --- a/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java +++ b/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java @@ -48,6 +48,9 @@ import io.ebeaninternal.server.core.timezone.DataTimeZone; import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.query.CQuery; import io.ebeaninternal.server.transaction.RemoteTransactionEvent; + +import javax.persistence.OptimisticLockException; +import javax.persistence.PersistenceException; import java.lang.reflect.Type; import java.util.Collection; import java.util.Collections; @@ -58,8 +61,6 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.function.Consumer; import java.util.function.Predicate; -import javax.persistence.OptimisticLockException; -import javax.persistence.PersistenceException; /** diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties index 3ed29771d..33121aa37 100644 --- a/src/test/resources/ebean.properties +++ b/src/test/resources/ebean.properties @@ -169,3 +169,4 @@ ebean.migrationtest.ddl.header=-- Migrationscripts for ebean unittest ebean.migrationtest.migration.appName=migrationtest ebean.migrationtest.migration.migrationPath=dbmigration/migrationtest ebean.migrationtest.migration.strict=true +