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