Scripting is the ideal mechanism to automate start up and teardown for repeated tasks and those that you just want to automate. Here are a couple of more illustrations of how to easily construct a model in ODI, the script will also create all of the topology objects. The script uses two methods; createLogicalSchema and createModel. The createLogicalSchema creates the logical schema, data server, physical schema and logical schema to physical schema mapping via a context all from one function call.
The signature of these methods looks like this;
createLogicalSchema
contextCode – the ODI code for the context used to map the logical schema to the physical
technologyCode – the ODI code for the technology
nameForLogicalSchema – the name for the logical schema to create
NameForDataserver – the name for the data server to create
userNameForAuthentication – the username for the connection to the data server
passwordForAuthentication – the password for the connection to the data server
urlForAuthentication – the URL for the connection to the data server
driverForAuthentication – the JDBC driver for the connection to the data server
schemaForAuthentication – the schema to use for the ODI physical schema
createModel
logicalSchemaObject – the ODI logical schema object (instance of ODILogicalSchema)
contextCode – the ODI context code for reverse engineering
nameForModel – the name for the model to create
codeForModel – the code for the model to create
So with these two methods or variations of them you can easily construct your topology objects and models. For example the call below creates a new model named ORACLE_MODEL and all of the topology objects that will allow me to go straight to reverse engineering when the script has been run.
lschema = createLogicalSchema("GLOBAL", "ORACLE", "ORACLE_EBS", "ORACLE_HQLINUX_DEV", "SCOTT",
ObfuscatedString.obfuscate("<password>"), "jdbc:oracle:thin:@localhost:1521:orcl", "oracle.jdbc.OracleDriver", "SCOTT")
createModel(lschema, "GLOBAL", "ORACLE_MODEL", "ORACLE_MODEL")
Here is the source code for the script
import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition;
import oracle.odi.domain.util.ObfuscatedString;
import oracle.odi.domain.model.OdiModel;
import oracle.odi.domain.topology.OdiLogicalSchema;
import oracle.odi.domain.topology.OdiPhysicalSchema;
import oracle.odi.domain.topology.OdiDataServer;
import oracle.odi.domain.topology.OdiContext;
import oracle.odi.domain.topology.OdiTechnology;
import oracle.odi.domain.topology.OdiContextualSchemaMapping;
import oracle.odi.domain.topology.AbstractOdiDataServer;
import oracle.odi.domain.topology.finder.IOdiContextFinder;
import oracle.odi.domain.topology.finder.IOdiTechnologyFinder;def createLogicalSchema(contextCode, techCode, schName, dataserverName, userName, password, url, driver, schema) {
txnDef = new DefaultTransactionDefinition();
tm = odiInstance.getTransactionManager()
txnStatus = tm.getTransaction(txnDef)contextFinder = (IOdiContextFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiContext.class);
context = contextFinder.findByCode(contextCode);techFinder = (IOdiTechnologyFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiTechnology.class);
tech = techFinder.findByCode(techCode);lschema = new OdiLogicalSchema(tech, schName)
dserver = new OdiDataServer(tech, dataserverName)
con = new AbstractOdiDataServer.JdbcSettings(url, driver)
dserver.setConnectionSettings(con)
dserver.setUsername(userName)
dserver.setPassword(password)
pschema = new OdiPhysicalSchema(dserver)
pschema.setSchemaName(schema)
pschema.setWorkSchemaName(schema)
cschema = new OdiContextualSchemaMapping(context, lschema, pschema)odiInstance.getTransactionalEntityManager().persist(lschema)
odiInstance.getTransactionalEntityManager().persist(dserver)
tm.commit(txnStatus)
return lschema
}def createModel(lschema, contextCode, modName, modCode) {
txnDef = new DefaultTransactionDefinition();
tm = odiInstance.getTransactionManager()
txnStatus = tm.getTransaction(txnDef)contextFinder = (IOdiContextFinder) odiInstance.getTransactionalEntityManager().getFinder(OdiContext.class);
context = contextFinder.findByCode(contextCode);mod = new OdiModel(lschema, modName, modCode)
mod.setReverseContext(context)
odiInstance.getTransactionalEntityManager().persist(mod)
tm.commit(txnStatus)
return mod
}lschema = createLogicalSchema("GLOBAL", "ORACLE", "ORACLE_EBS", "ORACLE_HQLINUX_DEV", "SCOTT", ObfuscatedString.obfuscate("<password>"),
"jdbc:oracle:thin:@localhost:1521:orcl", "oracle.jdbc.OracleDriver", "SCOTT")createModel(lschema, "GLOBAL", "ORACLE_MODEL", "ORACLE_MODEL")
Have fun scripting!