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