use of org.apache.cayenne.map.DataMap in project cayenne by apache.
the class MergerOptions method prepareMigrator.
/**
* check database and create the {@link List} of {@link MergerToken}s
*/
protected void prepareMigrator() {
try {
adapter = connectionInfo.makeAdapter(getApplication().getClassLoadingService());
MergerTokenFactory mergerTokenFactory = mergerTokenFactoryProvider.get(adapter);
tokens.setMergerTokenFactory(mergerTokenFactory);
FiltersConfig filters = FiltersConfig.create(defaultCatalog, defaultSchema, TableFilter.everything(), PatternFilter.INCLUDE_NOTHING);
DataMapMerger merger = DataMapMerger.builder(mergerTokenFactory).filters(filters).build();
DbLoaderConfiguration config = new DbLoaderConfiguration();
config.setFiltersConfig(filters);
DataSource dataSource = connectionInfo.makeDataSource(getApplication().getClassLoadingService());
DataMap dbImport;
try (Connection conn = dataSource.getConnection()) {
dbImport = new DbLoader(adapter, conn, config, new LoggingDbLoaderDelegate(LoggerFactory.getLogger(DbLoader.class)), new DefaultObjectNameGenerator(NoStemStemmer.getInstance())).load();
} catch (SQLException e) {
throw new CayenneRuntimeException("Can't doLoad dataMap from db.", e);
}
tokens.setTokens(merger.createMergeTokens(dataMap, dbImport));
} catch (Exception ex) {
reportError("Error loading adapter", ex);
}
}
use of org.apache.cayenne.map.DataMap in project cayenne by apache.
the class SchemaBuilder method rebuildSchema.
/**
* Completely rebuilds test schema.
*/
// TODO - this method changes the internal state of the object ... refactor
public void rebuildSchema() {
// generate schema combining all DataMaps that require schema support.
// Schema generation is done like that instead of per DataMap on demand
// to avoid conflicts when dropping and generating PK objects.
DataMap[] maps = new DataMap[MAPS_REQUIRING_SCHEMA_SETUP.length];
for (int i = 0; i < maps.length; i++) {
URL mapURL = getClass().getClassLoader().getResource(MAPS_REQUIRING_SCHEMA_SETUP[i]);
maps[i] = loader.load(new URLResource(mapURL));
}
this.domain = new DataDomain("temp");
domain.setEventManager(new DefaultEventManager(2));
domain.setEntitySorter(new AshwoodEntitySorter());
domain.setQueryCache(new MapQueryCache(50));
try {
for (DataMap map : maps) {
initNode(map);
}
if ("true".equalsIgnoreCase(System.getProperty(SKIP_SCHEMA_KEY))) {
logger.info("skipping schema generation... ");
} else {
dropSchema();
dropPKSupport();
createSchema();
createPKSupport();
}
} catch (Exception e) {
throw new RuntimeException("Error rebuilding schema", e);
}
}
use of org.apache.cayenne.map.DataMap in project cayenne by apache.
the class SchemaBuilder method dbEntitiesInDeleteOrder.
protected List<DbEntity> dbEntitiesInDeleteOrder(DataMap dataMap) {
DataMap map = domain.getDataMap(dataMap.getName());
List<DbEntity> entities = new ArrayList<>(map.getDbEntities());
dbEntitiesFilter(entities);
domain.getEntitySorter().sortDbEntities(entities, true);
return entities;
}
use of org.apache.cayenne.map.DataMap in project cayenne by apache.
the class ServerCaseDataDomainProvider method createAndInitDataDomain.
@Override
protected DataDomain createAndInitDataDomain() throws Exception {
DataDomain domain = super.createAndInitDataDomain();
DataNode node = null;
for (DataMap dataMap : domain.getDataMaps()) {
// add nodes and DataSources dynamically...
DataNodeDescriptor descriptor = new DataNodeDescriptor(dataMap.getName());
node = dataNodeFactory.createDataNode(descriptor);
node.addDataMap(dataMap);
// tweak procedures for testing...
for (Procedure proc : dataMap.getProcedures()) {
unitDbAdapter.tweakProcedure(proc);
}
// customizations from SimpleAccessStackAdapter that are not yet
// ported...
// those can be done better now
// node
// .getAdapter()
// .getExtendedTypes()
// .registerType(new StringET1ExtendedType());
//
domain.addNode(node);
}
if (domain.getDataMaps().size() == 1) {
domain.setDefaultNode(node);
}
return domain;
}
use of org.apache.cayenne.map.DataMap in project cayenne by apache.
the class CAY_743Test method testLoad2MapsWithCrossMapInheritance.
@Test
public void testLoad2MapsWithCrossMapInheritance() throws Exception {
Injector injector = DIBootstrap.createInjector(new ServerModule() {
@Override
public void configure(Binder binder) {
super.configure(binder);
ServerModule.contributeProjectLocations(binder).add("cay743/cayenne-domain.xml");
}
});
try {
DataDomain domain = injector.getInstance(DataDomain.class);
assertEquals(2, domain.getDataMaps().size());
DataMap m1 = domain.getDataMap("map1");
DataMap m2 = domain.getDataMap("map2");
ObjEntity oe11 = m1.getObjEntity("Entity11");
ObjEntity oe12 = m1.getObjEntity("Entity12");
ObjEntity oe21 = m2.getObjEntity("Entity21");
ObjEntity oe22 = m2.getObjEntity("Entity22");
// this causes StackOverflow per CAY-743
ObjEntity oe21Super = oe21.getSuperEntity();
ObjEntity oe12Super = oe12.getSuperEntity();
assertSame(oe12Super, oe22);
assertSame(oe21Super, oe11);
} finally {
injector.shutdown();
}
}
Aggregations