Refactor properties bootup, remove GlobalProperties and allow ServerConfig.loadFromProperties()

This commit is contained in:
rbygrave
2014-11-30 17:08:02 +13:00
parent fe65a0ccb9
commit 370267ab6f
105 changed files with 3772 additions and 3963 deletions
@@ -0,0 +1,730 @@
package com.avaje.ebeaninternal.api;
import com.avaje.ebean.*;
import com.avaje.ebean.bean.BeanCollection;
import com.avaje.ebean.bean.CallStack;
import com.avaje.ebean.bean.EntityBeanIntercept;
import com.avaje.ebean.bean.ObjectGraphNode;
import com.avaje.ebean.cache.ServerCacheManager;
import com.avaje.ebean.config.ServerConfig;
import com.avaje.ebean.config.dbplatform.DatabasePlatform;
import com.avaje.ebean.meta.MetaInfoManager;
import com.avaje.ebean.text.csv.CsvReader;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.ebeaninternal.server.autofetch.AutoFetchManager;
import com.avaje.ebeaninternal.server.core.PstmtBatch;
import com.avaje.ebeaninternal.server.core.SpiOrmQueryRequest;
import com.avaje.ebeaninternal.server.ddl.DdlGenerator;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
import com.avaje.ebeaninternal.server.query.CQuery;
import com.avaje.ebeaninternal.server.query.CQueryEngine;
import com.avaje.ebeaninternal.server.transaction.RemoteTransactionEvent;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
import java.lang.reflect.Type;
import java.util.*;
/**
* Test double for SpiEbeanServer.
*/
public class TDSpiEbeanServer implements SpiEbeanServer {
String name;
public TDSpiEbeanServer() {
}
public TDSpiEbeanServer(String name) {
this.name = name;
}
@Override
public void shutdownManaged() {
}
@Override
public boolean isCollectQueryOrigins() {
return false;
}
@Override
public ServerConfig getServerConfig() {
return null;
}
@Override
public DatabasePlatform getDatabasePlatform() {
return null;
}
@Override
public PstmtBatch getPstmtBatch() {
return null;
}
@Override
public CallStack createCallStack() {
return null;
}
@Override
public PersistenceContextScope getPersistenceContextScope(SpiQuery<?> query) {
return null;
}
@Override
public DdlGenerator getDdlGenerator() {
return null;
}
@Override
public AutoFetchManager getAutoFetchManager() {
return null;
}
@Override
public void clearQueryStatistics() {
}
@Override
public List<BeanDescriptor<?>> getBeanDescriptors() {
return null;
}
@Override
public <T> BeanDescriptor<T> getBeanDescriptor(Class<T> type) {
return null;
}
@Override
public BeanDescriptor<?> getBeanDescriptorById(String descriptorId) {
return null;
}
@Override
public List<BeanDescriptor<?>> getBeanDescriptors(String tableName) {
return null;
}
@Override
public void externalModification(TransactionEventTable event) {
}
@Override
public SpiTransaction createServerTransaction(boolean isExplicit, int isolationLevel) {
return null;
}
@Override
public SpiTransaction getCurrentServerTransaction() {
return null;
}
@Override
public ScopeTrans createScopeTrans(TxScope txScope) {
return null;
}
@Override
public SpiTransaction createQueryTransaction() {
return null;
}
@Override
public void remoteTransactionEvent(RemoteTransactionEvent event) {
}
@Override
public <T> SpiOrmQueryRequest<T> createQueryRequest(BeanDescriptor<T> desc, SpiQuery<T> q, Transaction t) {
return null;
}
@Override
public <T> CQuery<T> compileQuery(Query<T> query, Transaction t) {
return null;
}
@Override
public CQueryEngine getQueryEngine() {
return null;
}
@Override
public <T> List<Object> findIdsWithCopy(Query<T> query, Transaction t) {
return null;
}
@Override
public <T> int findRowCountWithCopy(Query<T> query, Transaction t) {
return 0;
}
@Override
public void loadBean(LoadBeanRequest loadRequest) {
}
@Override
public void loadMany(LoadManyRequest loadRequest) {
}
@Override
public int getLazyLoadBatchSize() {
return 0;
}
@Override
public boolean isSupportedType(Type genericType) {
return false;
}
@Override
public void collectQueryStats(ObjectGraphNode objectGraphNode, long loadedBeanCount, long timeMicros) {
}
@Override
public void loadMany(BeanCollection<?> collection, boolean onlyIds) {
}
@Override
public void loadBean(EntityBeanIntercept ebi) {
}
@Override
public void shutdown(boolean shutdownDataSource, boolean deregisterDriver) {
}
@Override
public AdminAutofetch getAdminAutofetch() {
return null;
}
@Override
public String getName() {
return name;
}
@Override
public ExpressionFactory getExpressionFactory() {
return null;
}
@Override
public MetaInfoManager getMetaInfoManager() {
return null;
}
@Override
public BeanState getBeanState(Object bean) {
return null;
}
@Override
public Object getBeanId(Object bean) {
return null;
}
@Override
public Map<String, ValuePair> diff(Object a, Object b) {
return null;
}
@Override
public <T> T createEntityBean(Class<T> type) {
return null;
}
@Override
public <T> CsvReader<T> createCsvReader(Class<T> beanType) {
return null;
}
@Override
public <T> Query<T> createNamedQuery(Class<T> beanType, String namedQuery) {
return null;
}
@Override
public <T> Query<T> createQuery(Class<T> beanType, String query) {
return null;
}
@Override
public <T> Query<T> createQuery(Class<T> beanType) {
return null;
}
@Override
public <T> Query<T> find(Class<T> beanType) {
return null;
}
@Override
public Object nextId(Class<?> beanType) {
return null;
}
@Override
public <T> Filter<T> filter(Class<T> beanType) {
return null;
}
@Override
public <T> void sort(List<T> list, String sortByClause) {
}
@Override
public <T> Update<T> createNamedUpdate(Class<T> beanType, String namedUpdate) {
return null;
}
@Override
public <T> Update<T> createUpdate(Class<T> beanType, String ormUpdate) {
return null;
}
@Override
public SqlQuery createSqlQuery(String sql) {
return null;
}
@Override
public SqlQuery createNamedSqlQuery(String namedQuery) {
return null;
}
@Override
public SqlUpdate createSqlUpdate(String sql) {
return null;
}
@Override
public CallableSql createCallableSql(String callableSql) {
return null;
}
@Override
public SqlUpdate createNamedSqlUpdate(String namedQuery) {
return null;
}
@Override
public void register(TransactionCallback transactionCallback) throws PersistenceException {
}
@Override
public Transaction createTransaction() {
return null;
}
@Override
public Transaction createTransaction(TxIsolation isolation) {
return null;
}
@Override
public Transaction beginTransaction() {
return null;
}
@Override
public Transaction beginTransaction(TxIsolation isolation) {
return null;
}
@Override
public Transaction currentTransaction() {
return null;
}
@Override
public void commitTransaction() {
}
@Override
public void rollbackTransaction() {
}
@Override
public void endTransaction() {
}
@Override
public void refresh(Object bean) {
}
@Override
public void refreshMany(Object bean, String propertyName) {
}
@Override
public <T> T find(Class<T> beanType, Object uid) {
return null;
}
@Override
public <T> T getReference(Class<T> beanType, Object id) {
return null;
}
@Override
public <T> int findRowCount(Query<T> query, Transaction transaction) {
return 0;
}
@Override
public <T> List<Object> findIds(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> QueryIterator<T> findIterate(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> void findEach(Query<T> query, QueryEachConsumer<T> consumer, Transaction transaction) {
}
@Override
public <T> void findEachWhile(Query<T> query, QueryEachWhileConsumer<T> consumer, Transaction transaction) {
}
@Override
public <T> void findVisit(Query<T> query, QueryResultVisitor<T> visitor, Transaction transaction) {
}
@Override
public <T> List<T> findList(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> FutureRowCount<T> findFutureRowCount(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> FutureIds<T> findFutureIds(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> FutureList<T> findFutureList(Query<T> query, Transaction transaction) {
return null;
}
@Override
public SqlFutureList findFutureList(SqlQuery query, Transaction transaction) {
return null;
}
@Override
public <T> PagingList<T> findPagingList(Query<T> query, Transaction transaction, int pageSize) {
return null;
}
@Override
public <T> PagedList<T> findPagedList(Query<T> query, Transaction transaction, int pageIndex, int pageSize) {
return null;
}
@Override
public <T> Set<T> findSet(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> Map<?, T> findMap(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> T findUnique(Query<T> query, Transaction transaction) {
return null;
}
@Override
public List<SqlRow> findList(SqlQuery query, Transaction transaction) {
return null;
}
@Override
public Set<SqlRow> findSet(SqlQuery query, Transaction transaction) {
return null;
}
@Override
public Map<?, SqlRow> findMap(SqlQuery query, Transaction transaction) {
return null;
}
@Override
public SqlRow findUnique(SqlQuery query, Transaction transaction) {
return null;
}
@Override
public void save(Object bean) throws OptimisticLockException {
}
@Override
public int save(Iterator<?> it) throws OptimisticLockException {
return 0;
}
@Override
public int save(Collection<?> beans) throws OptimisticLockException {
return 0;
}
@Override
public void delete(Object bean) throws OptimisticLockException {
}
@Override
public int delete(Iterator<?> it) throws OptimisticLockException {
return 0;
}
@Override
public int delete(Collection<?> c) throws OptimisticLockException {
return 0;
}
@Override
public int delete(Class<?> beanType, Object id) {
return 0;
}
@Override
public int delete(Class<?> beanType, Object id, Transaction transaction) {
return 0;
}
@Override
public void delete(Class<?> beanType, Collection<?> ids) {
}
@Override
public void delete(Class<?> beanType, Collection<?> ids, Transaction transaction) {
}
@Override
public int execute(SqlUpdate updSql) {
return 0;
}
@Override
public int execute(Update<?> update) {
return 0;
}
@Override
public int execute(Update<?> update, Transaction t) {
return 0;
}
@Override
public int execute(CallableSql callableSql) {
return 0;
}
@Override
public void externalModification(String tableName, boolean inserted, boolean updated, boolean deleted) {
}
@Override
public <T> T find(Class<T> beanType, Object uid, Transaction transaction) {
return null;
}
@Override
public void save(Object bean, Transaction transaction) throws OptimisticLockException {
}
@Override
public int save(Iterator<?> it, Transaction transaction) throws OptimisticLockException {
return 0;
}
@Override
public int save(Collection<?> beans, Transaction transaction) throws OptimisticLockException {
return 0;
}
@Override
public void markAsDirty(Object bean) {
}
@Override
public void update(Object bean) throws OptimisticLockException {
}
@Override
public void update(Object bean, Transaction t) throws OptimisticLockException {
}
@Override
public void update(Object bean, Transaction transaction, boolean deleteMissingChildren) throws OptimisticLockException {
}
@Override
public void update(Collection<?> beans) throws OptimisticLockException {
}
@Override
public void update(Collection<?> beans, Transaction transaction) throws OptimisticLockException {
}
@Override
public void insert(Object bean) {
}
@Override
public void insert(Object bean, Transaction t) {
}
@Override
public void insert(Collection<?> beans) {
}
@Override
public void insert(Collection<?> beans, Transaction t) {
}
@Override
public int deleteManyToManyAssociations(Object ownerBean, String propertyName) {
return 0;
}
@Override
public int deleteManyToManyAssociations(Object ownerBean, String propertyName, Transaction t) {
return 0;
}
@Override
public void saveManyToManyAssociations(Object ownerBean, String propertyName) {
}
@Override
public void saveManyToManyAssociations(Object ownerBean, String propertyName, Transaction t) {
}
@Override
public void saveAssociation(Object ownerBean, String propertyName) {
}
@Override
public void saveAssociation(Object ownerBean, String propertyName, Transaction t) {
}
@Override
public void delete(Object bean, Transaction t) throws OptimisticLockException {
}
@Override
public int delete(Iterator<?> it, Transaction t) throws OptimisticLockException {
return 0;
}
@Override
public int execute(SqlUpdate updSql, Transaction t) {
return 0;
}
@Override
public int execute(CallableSql callableSql, Transaction t) {
return 0;
}
@Override
public void execute(TxScope scope, TxRunnable r) {
}
@Override
public void execute(TxRunnable r) {
}
@Override
public <T> T execute(TxScope scope, TxCallable<T> c) {
return null;
}
@Override
public <T> T execute(TxCallable<T> c) {
return null;
}
@Override
public ServerCacheManager getServerCacheManager() {
return null;
}
@Override
public BackgroundExecutor getBackgroundExecutor() {
return null;
}
@Override
public void runCacheWarming() {
}
@Override
public void runCacheWarming(Class<?> beanType) {
}
@Override
public JsonContext createJsonContext() {
return null;
}
@Override
public JsonContext json() {
return null;
}
}
@@ -0,0 +1,79 @@
package com.avaje.ebeaninternal.server.cluster.socket;
import com.avaje.ebean.config.ContainerConfig;
import com.avaje.ebeaninternal.api.TDSpiEbeanServer;
import com.avaje.ebeaninternal.api.TransactionEventTable;
import com.avaje.ebeaninternal.server.cluster.ClusterManager;
import com.avaje.ebeaninternal.server.transaction.RemoteTransactionEvent;
import org.junit.Test;
import java.util.Arrays;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public class SocketClusterBroadcastTest {
class TestServer extends TDSpiEbeanServer {
RemoteTransactionEvent event;
TestServer(String name) {
super(name);
}
@Override
public void remoteTransactionEvent(RemoteTransactionEvent event) {
this.event = event;
}
}
private ContainerConfig createContainerConfig(String local, String threadPoolName) {
ContainerConfig container0 = new ContainerConfig();
container0.setMode(ContainerConfig.ClusterMode.SOCKET);
ContainerConfig.SocketConfig socketConfig = new ContainerConfig.SocketConfig();
socketConfig.setLocalHostPort(local);
socketConfig.setThreadPoolName(threadPoolName);
socketConfig.setMembers(Arrays.asList("127.0.0.1:9876", "127.0.0.1:9866"));
container0.setSocketConfig(socketConfig);
return container0;
}
@Test
public void testStartup() throws Exception {
ContainerConfig container0 = createContainerConfig("127.0.0.1:9876", "pool0");
ClusterManager mgr0 = new ClusterManager(container0);
TestServer server0 = new TestServer("s001");
mgr0.registerServer(server0);
ContainerConfig container1 = createContainerConfig("127.0.0.1:9866", "pool1");
ClusterManager mgr1 = new ClusterManager(container1);
TestServer server1 = new TestServer("s001");
mgr1.registerServer(server1);
Thread.sleep(1000);
RemoteTransactionEvent evt = new RemoteTransactionEvent("s001");
TransactionEventTable.TableIUD tableIUD = new TransactionEventTable.TableIUD("noSuchTable", true, false, false);
evt.addTableIUD(tableIUD);
assertNull(server1.event);
mgr0.broadcast(evt);
Thread.sleep(100);
assertNotNull(server1.event);
Thread.sleep(1000);
mgr0.shutdown();
mgr1.shutdown();
}
}
@@ -1,23 +1,19 @@
package com.avaje.ebeaninternal.server.deploy;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.config.GlobalProperties;
import com.avaje.tests.model.mappedsuper.ASimpleBean;
import com.avaje.tests.model.mappedsuper.NotEnhancedMappedSuper;
import org.junit.Assert;
import org.junit.Test;
public class TestNotEnhancedMappedSuper extends BaseTestCase {
@Test
public void simpleBean_mappedSuperNotEnhanced_ok() {
GlobalProperties.put("ebean.search.packages", "com.avaje.tests.model.mappedsuper");
ASimpleBean bean = new ASimpleBean();
bean.setName("junk");
@@ -41,7 +41,7 @@ public class TestDataSourceMax extends BaseTestCase {
// return;
// }
DefaultBackgroundExecutor bg = new DefaultBackgroundExecutor(1, 2, 180, 30, "testDs");
DefaultBackgroundExecutor bg = new DefaultBackgroundExecutor(1, 1, 2, 180, 30, "testDs");
try {
for (int i = 0; i < 12; i++) {
@@ -22,7 +22,7 @@ public class TestDataSourceMaxWithEntity extends BaseTestCase {
EbeanServer server = Ebean.getServer(null);
DefaultBackgroundExecutor bg = new DefaultBackgroundExecutor(1, 2, 180, 30, "testDs");
DefaultBackgroundExecutor bg = new DefaultBackgroundExecutor(1, 1, 2, 180, 30, "testDs");
try {
for (int i = 0; i < 12; i++) {
@@ -1,17 +1,15 @@
package com.avaje.ebeaninternal.server.transaction;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.EbeanServerFactory;
import com.avaje.ebean.Transaction;
import com.avaje.ebean.config.GlobalProperties;
import com.avaje.ebean.config.ServerConfig;
import com.avaje.tests.model.basic.UTDetail;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
public class TestAutoCommitDataSource extends BaseTestCase {
@@ -21,17 +19,16 @@ public class TestAutoCommitDataSource extends BaseTestCase {
ServerConfig config = new ServerConfig();
config.setName("h2autocommit");
config.loadFromProperties();
config.setDefaultServer(false);
config.setRegister(false);
config.addClass(UTDetail.class);
config.setDdlGenerate(true);
config.setDdlRun(true);
config.setAutoCommitMode(true);
GlobalProperties.setSkipPrimaryServer(true);
EbeanServer ebeanServer = EbeanServerFactory.create(config);
UTDetail detail1 = new UTDetail("one", 12, 30D);
UTDetail detail2 = new UTDetail("two", 11, 30D);
UTDetail detail3 = new UTDetail("three", 8, 30D);
@@ -54,7 +54,7 @@ public class ClassPathSearchTests {
public boolean isMatch(Class<?> cls) {
return true;
}
});
}, null);
List<Class<?>> found = search.findClasses();
@@ -72,7 +72,7 @@ public class ClassPathSearchTests {
public boolean isMatch(Class<?> cls) {
return true;
}
});
},null);
runAsserts(search.findClasses(), cl, search, jar, jarBang);
}