From 22f67ee49a39031f691300fed67c35a66d2cc0df Mon Sep 17 00:00:00 2001 From: rbygrave <=> Date: Tue, 2 Apr 2013 23:07:31 +1300 Subject: [PATCH] Changes to support the preceeding merges --- pom.xml | 2 +- .../ebeaninternal/api/SpiUpdatePlan.java | 2 +- .../server/core/ConcurrencyMode.java | 22 ------------- .../server/core/PersistRequestBean.java | 1 + .../server/deploy/BeanDescriptor.java | 2 +- .../server/deploy/BeanDescriptorManager.java | 2 +- .../server/deploy/BeanProperty.java | 6 ++-- .../deploy/meta/DeployBeanDescriptor.java | 2 +- .../deploy/meta/DeployBeanProperty.java | 19 ++++++++++++ .../server/deploy/parse/AnnotationClass.java | 3 +- .../server/deploy/parse/AnnotationFields.java | 7 +++++ .../server/ldap/LdapPersistBeanRequest.java | 2 +- .../server/persist/DefaultPersister.java | 2 +- .../server/persist/dml/DeleteMeta.java | 2 +- .../server/persist/dml/UpdateMeta.java | 2 +- .../server/persist/dml/UpdatePlan.java | 2 +- .../com/avaje/tests/basic/MainFutureList.java | 31 +++++++++++++++++++ ...stEnhancementCollectionInitialisation.java | 26 ++++++++++++++++ src/test/resources/ebean.properties | 2 ++ 19 files changed, 100 insertions(+), 37 deletions(-) delete mode 100644 src/main/java/com/avaje/ebeaninternal/server/core/ConcurrencyMode.java create mode 100644 src/test/java/com/avaje/tests/basic/TestEnhancementCollectionInitialisation.java diff --git a/pom.xml b/pom.xml index 64ea6891b..b89b0af2c 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ org.avaje.ebeanorm avaje-ebeanorm-api - [3.1.1] + [3.1.2-SNAPSHOT] diff --git a/src/main/java/com/avaje/ebeaninternal/api/SpiUpdatePlan.java b/src/main/java/com/avaje/ebeaninternal/api/SpiUpdatePlan.java index 47f1eeede..89588954f 100644 --- a/src/main/java/com/avaje/ebeaninternal/api/SpiUpdatePlan.java +++ b/src/main/java/com/avaje/ebeaninternal/api/SpiUpdatePlan.java @@ -3,7 +3,7 @@ package com.avaje.ebeaninternal.api; import java.sql.SQLException; import java.util.Set; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebeaninternal.server.persist.dml.DmlHandler; import com.avaje.ebeaninternal.server.persist.dmlbind.Bindable; diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/ConcurrencyMode.java b/src/main/java/com/avaje/ebeaninternal/server/core/ConcurrencyMode.java deleted file mode 100644 index 93e80dd65..000000000 --- a/src/main/java/com/avaje/ebeaninternal/server/core/ConcurrencyMode.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.avaje.ebeaninternal.server.core; - -/** - * Optimistic concurrency mode used for updates and deletes. - */ -public enum ConcurrencyMode { - - /** - * No concurrency checking. - */ - NONE, - - /** - * Use a version column. - */ - VERSION, - - /** - * Use all the columns (except Lobs). - */ - ALL -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java index c705c6b1f..0b19521cb 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java @@ -8,6 +8,7 @@ import javax.persistence.OptimisticLockException; import com.avaje.ebean.InvalidValue; import com.avaje.ebean.ValidationException; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.bean.EntityBeanIntercept; import com.avaje.ebean.event.BeanPersistController; diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java index 0da4786a5..75228ed07 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java @@ -27,6 +27,7 @@ import com.avaje.ebean.Query; import com.avaje.ebean.Query.UseIndex; import com.avaje.ebean.SqlUpdate; import com.avaje.ebean.Transaction; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebean.bean.BeanCollection; import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.bean.EntityBeanIntercept; @@ -53,7 +54,6 @@ import com.avaje.ebeaninternal.server.cache.CachedBeanDataToBean; import com.avaje.ebeaninternal.server.cache.CachedBeanDataUpdate; import com.avaje.ebeaninternal.server.cache.CachedManyIds; import com.avaje.ebeaninternal.server.core.CacheOptions; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.core.DefaultSqlUpdate; import com.avaje.ebeaninternal.server.core.InternString; import com.avaje.ebeaninternal.server.core.PersistRequestBean; diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java index 0eeb15d95..3f23182cc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java @@ -19,6 +19,7 @@ import javax.sql.DataSource; import com.avaje.ebean.BackgroundExecutor; import com.avaje.ebean.RawSql; import com.avaje.ebean.RawSqlBuilder; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.cache.ServerCacheManager; import com.avaje.ebean.config.EncryptKey; @@ -35,7 +36,6 @@ import com.avaje.ebean.validation.factory.NotNullValidatorFactory; import com.avaje.ebeaninternal.api.SpiEbeanServer; import com.avaje.ebeaninternal.api.TransactionEventTable; import com.avaje.ebeaninternal.server.core.BootupClasses; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.core.InternString; import com.avaje.ebeaninternal.server.core.InternalConfiguration; import com.avaje.ebeaninternal.server.core.Message; diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java index b709f7be8..2ed73b4d2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java @@ -17,7 +17,6 @@ import javax.naming.directory.BasicAttribute; import javax.persistence.PersistenceException; import com.avaje.ebean.InvalidValue; -import com.avaje.ebean.annotation.Expose; import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.config.EncryptKey; import com.avaje.ebean.config.dbplatform.DbEncryptFunction; @@ -355,9 +354,8 @@ public class BeanProperty implements ElPropertyValue { this.elPlaceHolder = tableAliasIntern(descriptor, deploy.getElPlaceHolder(et), false, null); this.elPlaceHolderEncrypted = tableAliasIntern(descriptor, deploy.getElPlaceHolder(et), dbEncrypted, dbColumn); - Expose expose = deploy.getField().getAnnotation(Expose.class); - this.jsonSerialize = expose==null || expose.serialize(); - this.jsonDeserialize = expose==null || expose.deserialize(); + this.jsonSerialize = deploy.isExposeSerialize(); + this.jsonDeserialize = deploy.isExposeDeserialize(); } private String tableAliasIntern(BeanDescriptor descriptor, String s, boolean dbEncrypted, String dbColumn) { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java index 20db21417..bc2e347c8 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java @@ -16,6 +16,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import com.avaje.ebean.Query.UseIndex; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebean.config.TableName; import com.avaje.ebean.config.dbplatform.IdGenerator; import com.avaje.ebean.config.dbplatform.IdType; @@ -25,7 +26,6 @@ import com.avaje.ebean.event.BeanPersistListener; import com.avaje.ebean.event.BeanQueryAdapter; import com.avaje.ebean.meta.MetaAutoFetchStatistic; import com.avaje.ebeaninternal.server.core.CacheOptions; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.deploy.BeanDescriptor.EntityType; import com.avaje.ebeaninternal.server.deploy.ChainedBeanPersistController; import com.avaje.ebeaninternal.server.deploy.ChainedBeanPersistListener; diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java index 14208890e..6193ed0dd 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanProperty.java @@ -105,6 +105,9 @@ public class DeployBeanProperty { private boolean isTransient; private boolean localEncrypted; + + private boolean exposeSerialize = true; + private boolean exposeDeserialize = true; private boolean dbEncrypted; private DbEncryptFunction dbEncryptFunction; @@ -296,6 +299,22 @@ public class DeployBeanProperty { return dbLength; } + public boolean isExposeSerialize() { + return exposeSerialize; + } + + public void setExposeSerialize(boolean exposeSerialize) { + this.exposeSerialize = exposeSerialize; + } + + public boolean isExposeDeserialize() { + return exposeDeserialize; + } + + public void setExposeDeserialize(boolean exposeDeserialize) { + this.exposeDeserialize = exposeDeserialize; + } + /** * Return the sortOrder for the properties. */ diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationClass.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationClass.java index c8c306bd7..821c257f2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationClass.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationClass.java @@ -11,6 +11,7 @@ import javax.xml.bind.annotation.XmlType; import com.avaje.ebean.Query.UseIndex; import com.avaje.ebean.annotation.CacheStrategy; +import com.avaje.ebean.annotation.EntityConcurrencyMode; import com.avaje.ebean.annotation.LdapDomain; import com.avaje.ebean.annotation.NamedUpdate; import com.avaje.ebean.annotation.NamedUpdates; @@ -150,7 +151,7 @@ public class AnnotationClass extends AnnotationParser { EntityConcurrencyMode entityConcurrencyMode = cls.getAnnotation(EntityConcurrencyMode.class); if (entityConcurrencyMode!=null) { - descriptor.setConcurrencyMode(entityConcurrencyMode.value()); + //descriptor.setConcurrencyMode(entityConcurrencyMode.value()); } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java index 7a014083e..388aa6572 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java @@ -27,6 +27,7 @@ import javax.persistence.Version; import com.avaje.ebean.annotation.CreatedTimestamp; import com.avaje.ebean.annotation.EmbeddedColumns; import com.avaje.ebean.annotation.Encrypted; +import com.avaje.ebean.annotation.Expose; import com.avaje.ebean.annotation.Formula; import com.avaje.ebean.annotation.LdapAttribute; import com.avaje.ebean.annotation.LdapId; @@ -136,6 +137,12 @@ public class AnnotationFields extends AnnotationParser { if (column != null) { readColumn(column, prop); } + Expose expose = get(prop, Expose.class); + if (expose != null) { + prop.setExposeSerialize(expose.serialize()); + prop.setExposeDeserialize(expose.deserialize()); + } + LdapAttribute ldapAttribute = get(prop, LdapAttribute.class); if (ldapAttribute != null) { // read ldap specific property settings diff --git a/src/main/java/com/avaje/ebeaninternal/server/ldap/LdapPersistBeanRequest.java b/src/main/java/com/avaje/ebeaninternal/server/ldap/LdapPersistBeanRequest.java index 7035e5dbc..5aed38174 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/ldap/LdapPersistBeanRequest.java +++ b/src/main/java/com/avaje/ebeaninternal/server/ldap/LdapPersistBeanRequest.java @@ -4,8 +4,8 @@ import java.util.Set; import javax.naming.ldap.LdapName; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebeaninternal.api.SpiEbeanServer; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.core.PersistRequestBean; import com.avaje.ebeaninternal.server.deploy.BeanManager; diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java b/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java index e9b849c16..c0334b6a1 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/DefaultPersister.java @@ -16,6 +16,7 @@ import com.avaje.ebean.Query; import com.avaje.ebean.SqlUpdate; import com.avaje.ebean.Transaction; import com.avaje.ebean.Update; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebean.bean.BeanCollection; import com.avaje.ebean.bean.BeanCollection.ModifyListenMode; import com.avaje.ebean.bean.EntityBean; @@ -24,7 +25,6 @@ import com.avaje.ebean.config.ldap.LdapContextFactory; import com.avaje.ebeaninternal.api.SpiEbeanServer; import com.avaje.ebeaninternal.api.SpiTransaction; import com.avaje.ebeaninternal.api.SpiUpdate; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.core.Message; import com.avaje.ebeaninternal.server.core.PersistRequest; import com.avaje.ebeaninternal.server.core.PersistRequestBean; diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java index 43e4c347a..7d793155b 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/DeleteMeta.java @@ -3,7 +3,7 @@ package com.avaje.ebeaninternal.server.persist.dml; import java.sql.SQLException; import java.util.Set; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebeaninternal.server.core.PersistRequestBean; import com.avaje.ebeaninternal.server.deploy.BeanDescriptor; import com.avaje.ebeaninternal.server.persist.dmlbind.Bindable; diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdateMeta.java b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdateMeta.java index df1e1179e..ecc7b4056 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdateMeta.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdateMeta.java @@ -7,8 +7,8 @@ import java.util.Set; import javax.persistence.PersistenceException; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebeaninternal.api.SpiUpdatePlan; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.core.PersistRequestBean; import com.avaje.ebeaninternal.server.deploy.BeanDescriptor; import com.avaje.ebeaninternal.server.persist.dmlbind.Bindable; diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdatePlan.java b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdatePlan.java index ed5e71686..3a6c56095 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdatePlan.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/UpdatePlan.java @@ -3,8 +3,8 @@ package com.avaje.ebeaninternal.server.persist.dml; import java.sql.SQLException; import java.util.Set; +import com.avaje.ebean.annotation.ConcurrencyMode; import com.avaje.ebeaninternal.api.SpiUpdatePlan; -import com.avaje.ebeaninternal.server.core.ConcurrencyMode; import com.avaje.ebeaninternal.server.persist.dmlbind.Bindable; /** diff --git a/src/test/java/com/avaje/tests/basic/MainFutureList.java b/src/test/java/com/avaje/tests/basic/MainFutureList.java index 319f833f8..922ed8c5f 100644 --- a/src/test/java/com/avaje/tests/basic/MainFutureList.java +++ b/src/test/java/com/avaje/tests/basic/MainFutureList.java @@ -1,5 +1,7 @@ package com.avaje.tests.basic; +import java.sql.Connection; +import java.sql.SQLException; import java.util.List; import java.util.concurrent.Future; @@ -11,11 +13,13 @@ import com.avaje.ebean.Query; import com.avaje.ebean.SqlFutureList; import com.avaje.ebean.SqlQuery; import com.avaje.ebean.SqlRow; +import com.avaje.ebean.Transaction; import com.avaje.ebean.config.DataSourceConfig; import com.avaje.ebean.config.ServerConfig; import com.avaje.tests.model.basic.Order; import com.avaje.tests.model.basic.ResetBasicData; import com.avaje.tests.model.basic.TOne; +import com.mysql.jdbc.PreparedStatement; public class MainFutureList { @@ -26,6 +30,33 @@ public class MainFutureList { //testOrmFuture(); } + public void executeDDL(EbeanServer server, String ddl) { + + Transaction t = server.createTransaction(); + try { + Connection connection = t.getConnection() + ; + + + } finally { + t.end(); + } + + } + + private void executeStmt(Connection c, String ddl) throws SQLException { + java.sql.PreparedStatement pstmt = null; + try { + pstmt = c.prepareStatement(ddl); + pstmt.execute(); + + } finally { + if (pstmt != null) { + pstmt.close(); + } + } + } + private static EbeanServer createEbeanServer(boolean primary) { if (primary){ diff --git a/src/test/java/com/avaje/tests/basic/TestEnhancementCollectionInitialisation.java b/src/test/java/com/avaje/tests/basic/TestEnhancementCollectionInitialisation.java new file mode 100644 index 000000000..c1ec907b8 --- /dev/null +++ b/src/test/java/com/avaje/tests/basic/TestEnhancementCollectionInitialisation.java @@ -0,0 +1,26 @@ +package com.avaje.tests.basic; + +import java.util.List; + +import com.avaje.ebean.BeanState; +import com.avaje.ebean.Ebean; +import com.avaje.tests.model.basic.Customer; +import com.avaje.tests.model.basic.Order; + +import junit.framework.TestCase; + + +public class TestEnhancementCollectionInitialisation extends TestCase { + + public void testListInitialisation() { + + Customer customer = new Customer(); + BeanState beanState = Ebean.getBeanState(customer); + if (beanState != null) { + List orders = customer.getOrders(); + assertNotNull(orders); + } + + } + +} diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties index fca9fb150..032535031 100644 --- a/src/test/resources/ebean.properties +++ b/src/test/resources/ebean.properties @@ -94,6 +94,8 @@ datasource.h2.capturestacktrace=true datasource.h2.maxStackTraceSize=20 datasource.h2.poolListener=com.avaje.tests.basic.MyTestDataSourcePoolListener +datasource.h2.customProperties=IGNORECASE=TRUE;MODE=Oracle; + datasource.hsqldb.username=sa datasource.hsqldb.password= datasource.hsqldb.databaseUrl=jdbc:hsqldb:mem:tests