UNIVERSITA’ DEGLI STUDI DI MODENA E REGGIO EMILIA Facoltà di Ingegneria – Sede di Modena Corso di laurea in Ingegneria Informatica Progetto MOMIS : I wrapper DB2/ODLi3 e Oracle/ODLi3 Relatore Chiar.mo Prof. Sonia Bergamaschi Tesi di Laurea di Mauro Verardi MOMIS: Mediator envirOnment for Multiple Information Sources Obiettivo: Realizzazione di uno strumento semi-automatico per l’integrazione di sorgenti eterogenee e distribuite Approccio adottato: semantico e virtuale Architettura di riferimento I3 (ARPA) Intelligent Integration of Information SERVIZI DI WRAPPING (I3) Comunicazione •Trasformazione interfaccia delle chiamate •Gestione del traffico di eventi •Trasformazione di chiamate di metodi e funzioni Ristrutturazione dei dati •Traslazione tra differenti formati di dati •Trasformazione di metadati Trasformazione del Comportamento •Modifica della semantica •Modifica dei protocolli •Traslazione tra differenti linguaggi di manipolazione dati SERVIZI DI WRAPPING (I3) Comunicazione •Trasformazione interfaccia delle chiamate •Gestione del traffico di eventi •Trasformazione di chiamate di metodi e funzioni Ristrutturazione dei dati •Traslazione tra differenti formati di dati •Trasformazione di metadati Trasformazione del Comportamento •Modifica della semantica •Modifica dei protocolli •Traslazione tra differenti linguaggi di manipolazione dati MOMIS: Mediator envirOnment for Multiple Information Sources MOMIS: Mediator envirOnment for Multiple Information Sources MOMIS: Mediator envirOnment for Multiple Information Sources MOMIS: Mediator envirOnment for Multiple Information Sources I WRAPPER NEL SISTEMA MOMIS: Interfaccia Wrapper •Implementato in JAVA •Oggetto CORBA •Dichiara le funzioni o String getDescription() o String getDescriptionXml() o String getSourceName() o WrapperRS runQuery() o String getType() Wrapper già disponibili in MOMIS: Wrapper XML Wrapper JDBC-ODBC-MS_Access Wrapper JDBC generico Wrapper Microsoft SQL Server LA TECNOLOGIA JDBC: Java DataBase Connectivity •Stabilire una connessione •Inviare query •Elaborare i risultati ottenuti Interfaccia DatabaseMetadata •Nomi delle tabelle •Nomi e tipi dei campi delle tabelle •Chiavi primarie •Foreign key API JAVA implementate dai Driver I DRIVER ORACLE/JDBC • JDBC OCI Client Side driver • JDBC Thin Client-Side driver • JDBC Thin Server-Side driver • JDBC Server-Side Internal driver I DRIVER ORACLE/JDBC • JDBC OCI Client Side driver • JDBC Thin Client-Side driver • JDBC Thin Server-Side driver • JDBC Server-Side Internal driver I DRIVER DB2/JDBC • DB2 Universal JDBC Driver • JDBC/SQLJ 2.0 Driver per OS/390 • DB2 JDBC Type 2 Driver for Linux,UNIX e Windows IL WRAPPER JDBC GENERICO Metodo Schema getSchema() •Nomi delle tabelle •Nomi e tipi dei campi delle tabelle Metodo Type getAttributeType( int t ) per le traduzione da tipo JDBC a tipo ODLI3 IL WRAPPER JDBC GENERICO Metodo Schema getSchema() •Nomi delle tabelle •Nomi e tipi dei campi delle tabelle CREATE TABLE TBL_AMBITI_CDS_SPECIFICI ( IDCds numeric(18, 0) NOT NULL, interface TBL_AMBITI_CDS_SPECIFICI ( IDAttivita numeric(18, 0) NOT NULL, extent TBL_AMBITI_CDS_SPECIFICI) { IDAmbitoSpecifico numeric(18, 0) NOT NULL, attribute string DENOMINAZIONE; Denominazione varchar (100), attribute float IDAMBITOSPECIFICO; CFU varchar (10)) ; attribute float IDCDS; ALTER TABLE TBL_AMBITI_CDS_SPECIFICI attribute float IDATTIVITA; ADD CONSTRAINT PK_TBL_AMBITI_SPEC attribute string CFU;} PRIMARY KEY (IDCds,IDAttivita,IDAmbitoSpecifico); ALTER TABLE TBL_AMBITI_CDS_SPECIFICI ADD CONSTRAINT FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS FOREIGN KEY (IDAttivita,IDCds) REFERENCES TBL_AMBITI_CDS (IdAttivita,IDCdS); IL WRAPPER JDBC GENERICO Mapping tra tipi di dato JDBC e ODLI3 Metodo Type getAttributeType( int t ) JDBC ODLI3 ARRAY Unsupported BIGINT IntegerType(true,true) = Long BINARY Unsupported BIT BooleanType BLOB Unsupported CHAR CharType CLOB Unsupported DATE DateType DECIMAL FloatingType(false) = Float DISTINCT Unsupported DOUBLE FloatingType(true) = Double FLOAT FloatingType(true) =Double INTEGER IntegerType(false,true) = Short LONGVARBINARY StringType(unsupported) LONGVARCHAR StringType(unsupported) NUMERIC FloatingType(true) =Double OTHER AnyType (?) REAL FloatingType(true) =Double REF Unsupported SMALLINT IntegerType(false,true) = Short STRUCT Unsupported TIME DateType TIMESTAMP DateType TINYINT IntegerType(false,true) = Short VARBINARY StringType(unsupported?) VARCHAR StringType I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() •Nomi delle tabelle •Nomi e tipi dei campi delle tabelle •Chiavi primarie •Foreign key Metodo boolean theTableShouldBeDescribed(String tableName) per l‘esclusione delle tabelle di sistema • Data dictionary di Oracle • System catalog di DB2 Metodo Type getAttributeType( int t ) per le traduzione da tipo JDBC a tipo ODLI3 ereditato dal wrapper JDBC generico I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() CREATE TABLE TBL_AMBITI_CDS_SPECIFICI ( IDCds numeric(18, 0) NOT NULL, IDAttivita numeric(18, 0) NOT NULL, IDAmbitoSpecifico numeric(18, 0) NOT NULL, Denominazione varchar (100), CFU varchar (10)) ; ALTER TABLE TBL_AMBITI_CDS_SPECIFICI ADD CONSTRAINT PK_TBL_AMBITI_SPEC PRIMARY KEY (IDCds,IDAttivita,IDAmbitoSpecifico); ALTER TABLE TBL_AMBITI_CDS_SPECIFICI ADD CONSTRAINT FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS FOREIGN KEY (IDAttivita,IDCds) REFERENCES TBL_AMBITI_CDS (IdAttivita,IDCdS); I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() DB2/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDCDS,IDATTIVITA,IDAMBITOSPECIFICO) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA, IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} Oracle/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAMBITOSPECIFICO,IDATTIVITA, IDCDS) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA,IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} SQL_Server/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAmbitoSpecifico, IDAttivita, IDCds) foreign_key FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS (IDAttivita, IDCds) references TBL_AMBITI_CDS (IdAttivita, IDCdS) ){ attribute double IDAmbitoSpecifico; attribute string Denominazione; attribute double IDCds; attribute double IDAttivita; attribute string CFU;} I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() DB2/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDCDS,IDATTIVITA,IDAMBITOSPECIFICO) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA, IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} Oracle/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAMBITOSPECIFICO,IDATTIVITA}, IDCDS) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA,IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} SQL_Server/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAmbitoSpecifico, IDAttivita, IDCds) foreign_key FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS (IDAttivita, IDCds) references TBL_AMBITI_CDS (IdAttivita, IDCdS) ){ attribute double IDAmbitoSpecifico; attribute string Denominazione; attribute double IDCds; attribute double IDAttivita; attribute string CFU;} I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() DB2/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDCDS,IDATTIVITA,IDAMBITOSPECIFICO) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA, IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} Oracle/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAMBITOSPECIFICO,IDATTIVITA, IDCDS) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA,IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} SQL_Server/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAmbitoSpecifico, IDAttivita, IDCds) foreign_key FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS (IDAttivita, IDCds) references TBL_AMBITI_CDS (IdAttivita, IDCdS) ){ attribute double IDAmbitoSpecifico; attribute string Denominazione; attribute double IDCds; attribute double IDAttivita; attribute string CFU;} I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() DB2/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDCDS,IDATTIVITA,IDAMBITOSPECIFICO) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA, IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} Oracle/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAMBITOSPECIFICO,IDATTIVITA, IDCDS) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA,IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} SQL_Server/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAmbitoSpecifico, IDAttivita, IDCds) foreign_key FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS (IDAttivita, IDCds) references TBL_AMBITI_CDS (IdAttivita, IDCdS) ){ attribute double IDAmbitoSpecifico; attribute string Denominazione; attribute double IDCds; attribute double IDAttivita; attribute string CFU;} I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo Schema getSchema() DB2/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDCDS,IDATTIVITA,IDAMBITOSPECIFICO) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA, IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} Oracle/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAMBITOSPECIFICO,IDATTIVITA, IDCDS) foreign_key FK_TBL_AMBITI_SPEC_TBL_AMB_CDS (IDATTIVITA,IDCDS) references TBL_AMBITI_CDS (IDATTIVITA,IDCDS) ){ attribute string DENOMINAZIONE; attribute float IDAMBITOSPECIFICO; attribute float IDCDS; attribute float IDATTIVITA; attribute string CFU;} SQL_Server/ODLI3 interface TBL_AMBITI_CDS_SPECIFICI ( extent TBL_AMBITI_CDS_SPECIFICI key (IDAmbitoSpecifico, IDAttivita, IDCds) foreign_key FK_TBL_AMBITI_SPECIFICI_TBL_AMBITI_CDS (IDAttivita, IDCds) references TBL_AMBITI_CDS (IdAttivita, IDCdS) ){ attribute double IDAmbitoSpecifico; attribute string Denominazione; attribute double IDCds; attribute double IDAttivita; attribute string CFU;} I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Oracle SQL datatypes JDBC datatypes ODLI3 datatypes NUMBER BIGINT IntegerType(true,true) NUMBER INTEGER IntegerType(false,true) NUMBER SMALLINT NUMBER TINYINT NUMBER BIT BooleanType CHAR CHAR CharType DATE DATE DateType DATE TIME TIMESTAMP TIMESTAMP NUMBER DECIMAL FloatingType(false) NUMBER FLOAT (Float) NUMBER DOUBLE FloatingType(true) NUMBER NUMERIC (Double) NUMBER REAL LONGRAW LONGVARBINARY LONG LONGVARCHAR RAW VARBINARY VARCHAR2 VARCHAR StringType I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Oracle SQL datatypes JDBC datatypes ODLI3 datatypes NUMBER BIGINT IntegerType(true,true) NUMBER INTEGER IntegerType(false,true) NUMBER SMALLINT NUMBER TINYINT NUMBER BIT BooleanType CHAR CHAR CharType DATE DATE DateType DATE TIME TIMESTAMP TIMESTAMP NUMBER DECIMAL FloatingType(false) NUMBER FLOAT (Float) NUMBER DOUBLE FloatingType(true) NUMBER NUMERIC (Double) NUMBER REAL LONGRAW LONGVARBINARY LONG LONGVARCHAR RAW VARBINARY VARCHAR2 VARCHAR StringType I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo boolean theTableShouldBeDescribed(String tableName) public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) TABLE_CAT String => table catalog (may be null) TABLE_SCHEM String => table schema (may be null) TABLE_NAME String => table name TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". REMARKS String => explanatory comment on the table TYPE_CAT String => the types catalog (may be null) TYPE_SCHEM String => the types schema (may be null) TYPE_NAME String => type name (may be null) SELF_REFERENCING_COL_NAME String => name of the designated "identifier" column of a typed table (may be null) REF_GENERATION String => specifies how values in SELF_REFERENCING_COL_NAME are created. Values are "SYSTEM", "USER", "DERIVED". (may be null) I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo boolean theTableShouldBeDescribed(String tableName) public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) TABLE_CAT String => table catalog (may be null) TABLE_SCHEM String => table schema (may be null) TABLE_NAME String => table name TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". REMARKS String => explanatory comment on the table TYPE_CAT String => the types catalog (may be null) TYPE_SCHEM String => the types schema (may be null) TYPE_NAME String => type name (may be null) SELF_REFERENCING_COL_NAME String => name of the designated "identifier" column of a typed table (may be null) REF_GENERATION String => specifies how values in SELF_REFERENCING_COL_NAME are created. Values are "SYSTEM", "USER", "DERIVED". (may be null) I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo boolean theTableShouldBeDescribed(String tableName) public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) TABLE_SCHEM String => table schema (may be null) TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo boolean theTableShouldBeDescribed(String tableName) public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) TABLE_SCHEM String => table schema (may be null) TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". getSchema() TABLE_TYPE = "TABLE" I WRAPPER SQL_SERVER/ODLI3, DB2/ODLI3, ORACLE/ODLI3 Metodo boolean theTableShouldBeDescribed(String tableName) public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) TABLE_SCHEM String => table schema (may be null) TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". getSchema() TABLE_TYPE = "TABLE" Oracle TABLE_SCHEM ≠ MDSYS OLAPSYS SYS SYSTEM WKSYS XDB DB2 TABLE_SCHEM ≠ SYSIBM SYSTOOLS I WRAPPER GUI I WRAPPER GUI I WRAPPER GUI Metodo getAllDatabase() • DB2 Universal Database per z/OS Database DSNDB06 Tabella SYSIBM.SYSDATABASE • DB2 Universal Database per Linux, Unix, Windows Comando “LIST DATABASE DIRECTORY” File <home_dir>/sqldbdir • Oracle Database su sistemi UNIX File /etc/oratab (/var/opt/oracle se sistemi Solaris ) • Oracle Database su sistemi Windows Registri di sistema HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_HOME_NAME\ORACLE_SID CONCLUSIONI WrapperJdbcCore_DB2Server WrapperJdbcCore_oracle DB2ServerWrapperGUI Metodo getAllDatabase() OracleServerWrapperGUI Metodo getAllDatabase() CONCLUSIONI WrapperJdbcCore_DB2Server WrapperJdbcCore_oracle DB2ServerWrapperGUI Metodo getAllDatabase() OracleServerWrapperGUI Metodo getAllDatabase() Oracle DBA Forum DUGI Listserv PROGETTO MOMIS: I WRAPPER DB2/ODLI3 E ORACLE/ODLI3 Grazie per l’attenzione Mauro Verardi