面向对象数据库_第1页
面向对象数据库_第2页
面向对象数据库_第3页
面向对象数据库_第4页
面向对象数据库_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象数据库第1页,共100页,2023年,2月20日,星期四第13章面向对象数据库对复杂数据类型的需求面向对象数据模型面向对象语言持久性程序设计语言持久性C++系统持久性JAVA系统第2页,共100页,2023年,2月20日,星期四对复杂数据类型的需求数据处理中的传统数据库应用具有简单数据类型相对较少的数据类型,第一范式成立近年来复杂数据类型越来越重要例如:地址可处理为单个字符串,或者为每个子部分用一单独的属性,或者复合属性(不属于第一范式)例如:允许直接存储多值属性而不是创建单独的第一范式关系存储通常更方便应用CAD,CASE多媒体与图像数据库,文档/超文本数据库第3页,共100页,2023年,2月20日,星期四面向对象数据模型(略讲)对象大体上对应于E-R模型中的实体面向对象是基于将与一对象有关的代码与数据封装成一个单位的思想.面向对象数据模型是一个逻辑数据模型(类似E-R模型).使面向对象程序设计风格(e.g.,Smalltalk,C++)适应数据库系统第4页,共100页,2023年,2月20日,星期四对象结构对象具有:变量集合:包含对象的数据.变量值本身也是对象.消息集合:对象对消息进行反应;消息可具有零,一个或多个参数.方法集合:

实现消息的代码体;方法返回一个值作为对消息的反应数据的物理表示仅对对象的实现者可见消息与反应提供了对象的唯一的外部界面消息这个词不必意味着物理上的消息传递.消息可以实现为过程调用第5页,共100页,2023年,2月20日,星期四消息与方法方法是用通用语言写的程序,具有下列特性变量仅在对象本身内部可以直接引用其他对象的数据只能通过发送消息引用.方法分为read-only和update方法只读方法不改变对象的值严格地说,实体的每个属性都必须表示为一个变量和两个方法,一个用于读属性,另一个用于更新例如,属性address可用变量address与两条消息get-address和set-address表示为方便起见,许多面向对象数据模型都允许直接存取其他对象的变量.第6页,共100页,2023年,2月20日,星期四对象类相似对象组成类;每个对象称为它的类的实例一个类中所有对象具有相同的具有相同类型的变量,消息接口方法赋给变量的值可能不同例如:所有人对象组成person类类与E-R模型中的实体集相似第7页,共100页,2023年,2月20日,星期四类定义例

classemployee{

/*Variables*/

stringname;

stringaddress;

datestart-date;

intsalary;

/*Messages*/

intannual-salary();

stringget-name();

stringget-address();

intset-address(stringnew-address);

intemployment-length();

};在严格的封装中还需要用来读与设置其他变量的值的方法方法单独定义如:int

employment-length(){return

today()–start-date;}

int

set-address(string

new-address){address=new-address;}第8页,共100页,2023年,2月20日,星期四继承例如,银行客户类与银行雇员类相似,尽管有不同之处两者可以共享某些变量和消息,如name与address.

两者也各有特殊变量和消息,如雇员的salary和客户的credit-rating.每个雇员是人;所以employee是person的特例同样,customer也是person的特例.创建类person,employeeandcustomer对所有人都适用的变量/消息与类person关联.雇员所特有的变量/消息与类employee关联客户所特有的变量/消息与类customer关联第9页,共100页,2023年,2月20日,星期四继承类组织成一个特化/IS-A层次属于类person的变量/消息被类employee和customer继承结果构成一个类层次注意与E-R模型中的ISA层次的相似性第10页,共100页,2023年,2月20日,星期四类层次定义

classperson{

string name;

string address:

};

classcustomerisaperson{

intcredit-rating;

};

classemployeeisaperson{

datestart-date;

intsalary;

};

classofficerisaemployee{

intoffice-number,

intexpense-account-number,

};

...第11页,共100页,2023年,2月20日,星期四类层次例类officer的对象的完整变量列表:office-number,expense-account-number:

局部定义start-date,salary:从employee继承name,address:从person继承同变量一样还继承方法.可替换性—类的任何方法可以被属于其子类的任何对象调用.类外延(extent):类中所有对象的集合.两种选择:1. 类employee的外延包含所有officer,teller和secretary对象.类employee的外延仅包含不属于子类officer,teller或secretary的雇员对象这是OO系统通常的做法可访问子类的外延求所有子类对象第12页,共100页,2023年,2月20日,星期四多重继承多重继承使一个类可有多个超类.类/子类联系可表示为有向无圈图(DAG)当对象有多种相互独立的分类方式时尤其有用E.g.临时/永久独立于Officer/secretary/teller为每一种子类组合创建一个子类不必为数据库中不可能出现的子类组合创建子类类从它的所有超类继承变量和方法存在歧义的可能:当从两个超类A和B继承同名变量/消息N时若该变量/消息是在共享的超类中定义的则没有问题否则,采用如下方法之一标志为出错,重命名变量(A.N和B.N)选择其一.第13页,共100页,2023年,2月20日,星期四多重继承例银行例的类DAG第14页,共100页,2023年,2月20日,星期四多重继承例一个对象可以同时属于多个子类一个person可以具有student,teacher或footballPlayer等角色,或者任何组合例如,踢足球的学生助教可用多重继承建模对象的“角色”即,允许对象具有多个类型但许多系统坚持对象必须具有最具体类即,若某对象属于多个类,则必须存在这些类的一个共同子类创建子类student-teacher与student-teacher-footballPlayer当有许多可能的组合时,为每种组合创建子类会很麻烦第15页,共100页,2023年,2月20日,星期四对象标识即使某些或全部变量的值或方法定义随时间改变,对象仍保持其身份.对象标识是一个比非面向对象的程序语言或数据模型中对应概念更强的标识概念.值–数据值;例如关系系统中所用的主键值.名–由用户提供;用于过程中的变量.内建–数据模型或程序语言内建的标识.不需用户提供标识.面向对象系统采用的标识形式第16页,共100页,2023年,2月20日,星期四对象标识对象标识用于唯一标识对象对象标识是唯一的:没有两个对象具有相同的标识每个对象只有一个标识例如,person对象的spouse字段可以是另一个person对象的标识.可保存为一对象的字段,用来引用另一对象.可以是系统生成的(由数据库创建),或外部的(如社会安全号)系统生成的标识:更易用,但不能跨数据库系统使用如果已存在唯一标识则冗余第17页,共100页,2023年,2月20日,星期四对象包含设计中的每个部件可以包含其他部件可建模为对象包含.包含其他对象的对象称为复合对象.多层次的包含形成了包含层次连线解释为is-part-of,而非is-a.允许数据被不同用户在不同粒度上观察第18页,共100页,2023年,2月20日,星期四面向对象语言面向对象概念在数据库系统中有多种用法面向对象可被用作设计工具类似于用E-R图建模再转换成关系面向对象概念可与操作数据库的程序设计语言结合.对象关系系统–在关系语言中增加复杂类型和面向对象.持久性程序设计语言–通过增加持久性和集合之类的概念来扩展面向对象程序设计语言以便处理数据库.第19页,共100页,2023年,2月20日,星期四持久性程序设计语言持久性程序设计语言允许创建对象并存储在数据库中,并且可在程序设计语言中直接使用允许从程序设计语言直接操作数据不必通过SQL.不必有显式的格式(类型)改变格式改变由系统透明地完成若没有持久性程序设计语言,格式改变成为程序员的负担要写更多的代码更多的出错机会允许对象在内存中处理不必有显式的从数据库加载或存储到数据库节省代码,节省加载/存储大量数据的开销第20页,共100页,2023年,2月20日,星期四持久性程序设计语言持久性程序设计语言的缺点由于多数程序设计语言的表达能力,很容易造成编程错误而破坏数据库.语言的复杂性使得自动的高级优化更加困难.不支持描述性查询和关系数据库第21页,共100页,2023年,2月20日,星期四对象的持久性使临时对象持久化的途径类持久–声明某个类的所有对象是持久的;简单但不灵活.创建持久–扩展创建对象的语法以声明对象是持久的.标记持久–在程序中止之前将对象标记为持久的.可达性持久–声明(根)持久对象;被根对象直接或间接引用的对象也是持久的.对程序员更容易,但对数据库系统有更多开销类似Java中的垃圾收集,要检查可达性第22页,共100页,2023年,2月20日,星期四对象标识与指针持久对象被赋予持久的对象标识.标识的永久程度过程内–标识仅在单个过程执行期间持续程序内–标识仅在单个程序或查询执行期间持续程序间–标识在多个程序的执行之间持续,但随存储组织改变而改变持久的–标识在程序执行之间和数据的结构重组之间持久这是面向对象系统要求的第23页,共100页,2023年,2月20日,星期四对象标识与指针在O-O语言(如C++)中,对象标识实际上是内存指针持久性指针–在程序执行之间持久可看作是指向数据库内对象的指针E.g.指明文件标识和文件内偏移第24页,共100页,2023年,2月20日,星期四持久对象的存储与存取命名对象(同命名文件一样)不能用于大量对象.通常只对类外延及其他对象集合命名,而非对象.暴露对象标识或指向对象的持久指针可在外部保存.所有对象都有对象标识存储对象集合,并允许程序在该集合上迭代以找到所需对象将对象集合建模为汇集类型类外延–属于类的所有对象的集合;通常为具有持久对象的类维护外延.如何在数据库中找到对象:第25页,共100页,2023年,2月20日,星期四持久性C++系统C++语言允许增加对持久性的支持而不修改语言声明一个类Persistent_Object来支持持久性重载–在新类型中重定义标准函数名及运算符(如+,–,指针去引用运算–>)的能力模板类有助于构建一个类型安全的支持汇集和持久类型的类型系统.不必扩展C++语言而提供对持久性的支持相对容易实现但难以使用与避免改变语言的系统一样,向C++语言增加新特性的持久性C++系统已被构建第26页,共100页,2023年,2月20日,星期四ODMGC++对象定义语言ObjectDatabaseManagementGroup是一致力于标准化面向对象数据库的工业协会尤其是持久性程序设计语言包括C++,Smalltalk和Java标准ODMG-93ODMG-2.0and3.0(whichis2.0plusextensionstoJava)我们的描述基于ODMG-2.0ODMGC++标准避免改动C++语言

通过模板类和类库提供功能第27页,共100页,2023年,2月20日,星期四ODMG类型模板类d_Ref<class>用于声明引用(持久性指针)模板类d_Set<class>用于定义对象集合. 方法包括insert_element(e)和delete_element(e)还提供其他汇集类如d_Bag(允许重复的集合),d_List和d_Varray(变长数组).还提供许多标准类型的d_版本,如d_Long和d_string对这些类型的解释是依赖于平台的动态分配的数据在数据库中分配,而非在内存第28页,共100页,2023年,2月20日,星期四ODMGC++1.0ODL:例

classBranch:publicd_Object{…. } classPerson:publicd_Object{

public:

d_Stringname;//shouldnotuseString! d_Stringaddress;

};

classAccount:publicd_Object{

private:

d_Longbalance;

public:

d_Longnumber;

d_Set<d_Ref<Customer>>owners; intfind_balance();

intupdate_balance(intdelta);

};第29页,共100页,2023年,2月20日,星期四ODMGC++1.0ODL:例classCustomer:publicPerson{

public:

d_Datemember_from;

d_Longcustomer_id;

d_Ref<Branch>home_branch;

d_Set<d_Ref<Account>>accounts;};第30页,共100页,2023年,2月20日,星期四C++ODL2.0ExampleclassPerson(extentpeople){private:AttributeStringname;AttributeRef<Person>spouse;AttributeSet<Person>children;AttributeList<Person>parents;public:Person(char*name);voidbirth(Personchild);voidmarriage(Personspouse);Stringget_name(){returnname;}List<Person>get_children(){returnchildren;};};第31页,共100页,2023年,2月20日,星期四实现联系类之间的联系用引用实现特定的引用类型通过增加/删除逆链接来实施完整性.类型d_Rel_Ref<Class,InvRef>是对Class的引用,其中Class的属性InvRef是逆引用.类似地,d_Rel_Set<Class,InvRef>用于引用的集合类d_Rel_Ref的赋值方法(=)是重载的用类型定义来自动查找及更新逆链接使程序员免除更新逆链接的任务消除不一致链的可能性类似地,d_Rel_Set的insert_element()和delete_element()方法利用类型定义自动查找及更新逆链接第32页,共100页,2023年,2月20日,星期四实现联系E.g.

externconstchar_owners[],_accounts[];

classAccount:publicd.Object{

….

d_Rel_Set<Customer,_accounts>owners;

}

//..Sincestringscan’tbeusedintemplates…

constchar_owners=“owners”;

constchar_accounts=“accounts”;第33页,共100页,2023年,2月20日,星期四ODMGC++对象操纵语言使用C++运算符的持久性版本,如

new(db)

d_Ref<Account>account=new(bank_db,“Account”)Account;new在指定数据库中分配对象,而不是在内存中.第二个参数(“Account”)给出数据库中用的类型名.当去除引用运算符->作用于d_Ref<Account>引用时,在继续通常的C++去除引用之前先加载被引用对象到内存(如果不在内存的话)类的构造子–创建对象时用于初始化对象的特殊方法;对new自动调用.在创建与删除对象时类外延自动被维护仅针对说明了此特性的类通过用户接口说明,而非C++早期版本的ODMG不支持自动维护类外延第34页,共100页,2023年,2月20日,星期四ODMGC++OML:数据库与对象函数类d_Database提供方法打开数据库:open(databasename)

命名对象:set_object_name(object,name)用名查找对象:lookup_object(name)重命名对象:rename_object(oldname,newname)关闭数据库:close()类d_Object被所有持久性类继承.提供方法分配及删除对象更新对象之前必须调用方法mark_modified().创建对象时自动调用第35页,共100页,2023年,2月20日,星期四ODMGC++OML:例intcreate_account_owner(Stringname,StringAddress){ d_Databasebank_db.obj;

d_Database*bank_db=&bank_db.obj;

bank_db->open(“Bank-DB”);

d_TransactionTrans;

Trans.begin();

d_Ref<Account>account=new(bank_db)Account;

d_Ref<Customer>cust=new(bank_db)Customer;

cust->name=name;

cust->address=address;

cust->accounts.insert_element(account);

...Codetoinitializeotherfields

Tmit();}第36页,共100页,2023年,2月20日,星期四ODMGC++OML:例数据库中类外延自动维护.为存取类外延:

d_Extent<Customer>customerExtent(bank_db);类d_Extent提供方法

d_Iterator<T>create_iterator()

来创建一个类外延上的迭代子提供select(pred)方法以返回满足选择谓词pred的对象上的迭代子.迭代子用于遍历集合或类外延中的对象.汇集(sets,lists等)也提供方法create_iterator().第37页,共100页,2023年,2月20日,星期四ODMGC++OML:迭代子例intprint_customers(){

Databasebank_db_obj;

Database*bank_db=&bank_db_obj;

bank_db->open(“Bank-DB”);

d_TransactionTrans;Trans.begin();

d_Extent<Customer>all_customers(bank_db);

d_Iterator<d_Ref<Customer>>iter;

iter=all_customers–>create_iterator();

d_Ref<Customer>p; while{iter.next(p))

p->print_cust();//Functionassumedtobedefinedelsewhere Tmit();}第38页,共100页,2023年,2月20日,星期四ODMGC++Binding:其他特性说明性查询语言OQL,看上去像SQL形成查询字符串,执行之得到返回结果集合(实际上是bag,因为可能有重复)

d_Set<d_Ref<Account>>result;

d_OQL_Queryq1("selecta

fromCustomerc,c.accountsa

where=‘Jones’

anda.find_balance()>100");

result=q1.d_oql_execute();提供基于C++例外的出错处理机制,通过类d_Error提供API用来存取数据库模式.第39页,共100页,2023年,2月20日,星期四使指针持久性透明ODMG1.0C++方法的缺点:两种指针程序员必须确保调用mark_modified(),否则数据库可能被破坏ObjectStore方法内存中与数据库中的对象使用完全相同的指针类型持久性对应用是透明的创建对象时例外由于指针类型相同,同样的函数可以用在内存中对象和持久对象上实现时采用一种称为指针swizzling的技术,第11章有具体描述.不需要调用mark_modified(),因为可以自动监测到更新.第40页,共100页,2023年,2月20日,星期四ODMG2.0ObjectQueryLanguageObjectQueryLanguage,PrinciplesDeclarativequerylanguage(SQL-like)CanbeoptimizedSyntaxbasedonSQLQueriescanreturn:AcollectionofobjectsAnobjectAcollectionofliteralsAliteral第41页,共100页,2023年,2月20日,星期四ODMGLanguageBindings,Why?Extendprogramminglanguagewithpersistentcapability

MigrateprogrammingapplicationsinmemorytoDBManipulateobjectdatabaseswithstandardprogramminglanguageProvidetoprogramminglanguagedatabasefunctionality:Querying,Transactions,Indexing,…第42页,共100页,2023年,2月20日,星期四ODMGLanguageBindingsBindingsforODL,OMLandOQLSingle,unifiedtypesystempersistentortransientinstancesLanguage-specificbindingsrespectthesyntaxandsemanticsofthebaselanguageSmallsetofextensionsCanmixexpressionsofOML,OQLandbaselanguage第43页,共100页,2023年,2月20日,星期四C++Binding:DesignPrinciplesProvideaC++librarywherethereisaunifiedtypesystemacrosstheprogramminglanguageandthedatabaseTheC++bindingmapstheODMGObjectModelintoC++throughasetof"persistence-capable"classes

UsesC++templateclassesforimplementationBasedonthesmartpointer("ref-based")approachMainFeaturesMappingbetweenODMGtypesandC++typesC++/OQLCouplingTheOML/C++isC++compliant(i.e.standardC++compilers)CompatiblewithStandardTemplateLibrary(STL)+persistence第44页,共100页,2023年,2月20日,星期四Persistence-capableClassesForeachpersistence-capableclassT,atwinclassd_Ref<T>isdefinedInstancesofapersistence-capableclassbehavelikeC++pointers(butOIDs

¹C++pointer)TheC++bindingdefinestheclassd_Objectasthesuperclassofallpersistence-capableclassesPersistencepropagationbyinheritanceThenotionofinterfaceisimplicitinODMGC++binding

interface:publicpartofC++classdefinitionsimplementation:privatepartsofC++classdefinitions第45页,共100页,2023年,2月20日,星期四C++BindingC++ODLMaybegenerated(fromODMGODL)orprogrammer-writtenC++OMLC++OQL第46页,共100页,2023年,2月20日,星期四C++ODLBasicTypesBasicTypeRangeDescriptiond_Short16bitssignedintegerd_Long32bitssignedintegerd_UShort16bitsunsignedd_ULong16bitsunsignedd_Float32bitsSingleprecisiond_Double64bitsdoubleprecisiond_Char8bitsASCII………第47页,共100页,2023年,2月20日,星期四C++ODLd_RefAd_Refisparameterizedbythetypeofthereferencedobjectd_Ref<Employee>Employee;d_Ref<Dept>Dept;Dept=Employee->Departmentd_Refisdefinedasaclasstemplate:Template<classT>classd_Ref{…..}Thedereferencingoperator(->)isusedtoaccessmembersofthepersistentobject“addressed”bythespecificreference第48页,共100页,2023年,2月20日,星期四C++ODLCollectiond_Set,d_Bag,d_list,d_Array,d_Dictionaryaresubclassofd_CollectionThecollectionsclassesaredefinedasclasstemplates:Template<classT>classd_Collection{…..}Template<classT>classd_Set:publicd_Collection{…..}Elementsthereinareaccessedthroughiterators第49页,共100页,2023年,2月20日,星期四MappingtheODMGODLintoC++ODLClassCSet<T>Bag<T>List<T>Array<T>RelationshipTExtentofclassTOperationCreateDeleteBasictypesTd_Ref<C>d_Set<T>d_Bag<T>d_List<T>d_Array<T>d_Rel_Ref<T>D_Extent<T>C++functionsConstructor,Destructord_T:d_String,d_Time,d_Date,d_Boolean第50页,共100页,2023年,2月20日,星期四C++ODLExampleclassPerson(extentpeople){private:AttributeStringname;AttributeSet<Person>spouse;AttributeSet<Person>children;AttributeList<Person>parents;public:Person(char*name);voidbirth(Personchild);voidmarriage(Personspouse);Stringget_name(){returnname;}List<Person>get_children() {returnchildren;};};classPerson{private:d_Stringname;d_Ref<Person>spouse;d_List<d_Ref<Person>>children;d_List<d_Ref<Person>>parents;public:Person(char*name);voidbirth(d_Ref<Person>child);voidmarriage(d_Ref<Person>spouse);d_Stringget_name(){returnname;}d_List<d_Ref<Person>>get_children() {returnchildren;};d_Set<d_Ref<Person>>*people;};第51页,共100页,2023年,2月20日,星期四C++OMLStandardC++syntaxusedObjectcreation/modification/deletionManipulationcollectionsOQLembeddedinC++Databasesandtransactionssupportedthroughclasslibraries第52页,共100页,2023年,2月20日,星期四ObjectCreation/DeletionPerson::Person(char*pname){ this->name=pname; people->insert_element(this);}d_Ref<Person>toto;toto=newPerson(“Toto”);

第53页,共100页,2023年,2月20日,星期四Using“This”notationVoidPerson::marriage(d_Ref<Person>with){ this->spouse=with; with->spouse_=this;}d_Ref<Person>toto,tata;toto=newPerson(“Toto”);tata=newPerson(“Tata”);toto->marriage(tata);

第54页,共100页,2023年,2月20日,星期四ObjectNaming&d_DatabaseclassToretrieveobjectsinadatabaseweneedpersistentnamesThesesnamesaretherootofthepersistencyAnamecanidentifyauniqueobjectoracollectionofobjectsOthersupportedoperationsincludeopeningandclosinganexistingdatabase.第55页,共100页,2023年,2月20日,星期四ObjectNaming&d_Databaseclass:

Exampled_Databasedatabase;database.open(“family”);database.create_persistent_root(“Toto”,”d_Ref<Person>”);database.create_persistent_root(“people”, ”d_Set<d_Ref<Person>>”);

d_Ref<Person>toto(“Toto”);d_Set<d_Ref<Person>>people(people);toto=newPerson(“Toto”);Person*titi;titi=newPerson(“titi”);toto->spouse=titi;

第56页,共100页,2023年,2月20日,星期四ManipulatingCollectionVoidPerson::birth(d_Ref<Person>child){ this->children.insert_element_last(child); child->parents.insert_element_last(this); if(spouse_!=0){ spouse->children.insert_element_last(child); child->parents.insert_element_last(spouse);}d_Ref<Person>toto,tata;toto=newPerson(“Toto”);tata=newPerson(“Tata”);toto->marriage(tata);toto->birth(newPerson(“Titi”));

第57页,共100页,2023年,2月20日,星期四IteratingonCollectionsToiterateoncollectionsatemplateclassd_Iterator<T>isdefinedIteratorscanbeobtainedthoughthecreate_iteratormethoddefinedintheclassd_CollectionTheget_elementfunctionreturnthevalueofthecurtrently“pointed-to”elementinthecollectionThenextfunctioncheckstheendofiteration,advancingtheiteratorandreturningthecurrentelementIteratorsmeangreatflexibility:Collectiontypeindependence,Elementtypeindependence.

第58页,共100页,2023年,2月20日,星期四IteratingonCollections:Examplevoidprint_persons(d_Collection<d_Ref<Person>>s){ d_Ref<Person>p; d_Iterator<d_Ref<Person>>it=s.create_iterator(); while(it.next(p)) cout<<p->get_name()<<endl;} 第59页,共100页,2023年,2月20日,星期四OQLEmbeddedinC++Anobjectoftyped_OQL_QuerymustbeconstructedThequerymustbeexecutedwiththed_oql_executefunctionQueriesareconstructedincrementallyusing<<Queriescanbeparameterized:parametersinthequeryare$i,theshift-leftoperator(<<)isusedtoprovidevalues.

第60页,共100页,2023年,2月20日,星期四OQLEmbeddedinC++:Exampled_List<d_Ref<Person>>list;d_OQL_Queryq1(“sortpinpeoplebyp.get_name”);d_oql_execute(q1,list);d_Ref<Person>Toto;d_OQL_Queryq1(“element(selectpfrompinpeoplewherep.get_name==$1”);q1<<“Toto”;d_oql_execute(q1,Toto);第61页,共100页,2023年,2月20日,星期四持久性Java系统ODMG-3.0定义了对Java的持久性扩充Java不支持模板,因此需要对语言进行扩充持久性模型:按可达性持久配合Java的垃圾收集模型对数据库同样需要垃圾收集对短暂和持久指针只有一种指针类型第62页,共100页,2023年,2月20日,星期四持久性Java系统通过对Java编译器生成的目标代码执行一个后处理器使得类成为可持久的(persistencecapable)与C++中用的预处理器不同后处理器自动加上mark_modified()定义汇集类型DSet,DBag,DList,etc.使用Java迭代子,不需要新的迭代子类第63页,共100页,2023年,2月20日,星期四持久性Java系统事务必须从根对象之一开始存取数据库(按名查找)从根对象沿指针找到其他对象被一个已读取对象所引用的对象也在内存分配空间,但不一定读取读取可以是以懒惰方式进行的已分配空间但尚未读取的对象称为空洞对象(hollowobject)访问空洞对象时,其数据才从磁盘读取.第64页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

Acall-levelinterface:JDBCLowLevel,InvokeSQLCommandsDirectlyABaseUponWhichtoBuildHigher-levelInterfacesandTools,suchasSQLJJavaBlendWhatdoesJDBCdo?EstablishaConnectionwithaDatabaseSendSQLStatementsProcesstheResultsLatestUpdate:JDBC4.0APICoreAPIStandardExtensions第65页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

JDBC2.0APINewFeaturesofJDBCCoreAPIScrollableResultSetsResultSetsthatcanbeUpdatedBatchUpdatesSQL3DataTypeSupport(SQLtypesARRAY,BLOB,CLOB,STRUCT,DISTINCTandREF)CustomMappingofSQL3User-DefinedTypestoJavaClassesStoringJavaObjectsinanObject-RelationalDatabase第66页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

JDBC2.0APIJDBC2.0APIStandardExtensionRowsetEstablishingDatabaseConnectionsUsingDataSourceObjectsandtheJavaNamingandDirectoryInterfaceTM(JNDI)ConnectionPoolingDistributedTransactions第67页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

JDBCProductADistributedObjectJDBCArchitecture

OPENjdbc,theJDBCDriverforDataBrokerCORBA-basedJDBCsolutionprovidesacompletetechnologybridgefromcurrenttofutureITsolutions第68页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

EmbeddedSQLStatements:SQLJALanguagethatEmbedsStaticSQLinJavaProgramSpecifiedbyOracle,IBMandCompaq'sTandemJointly,AcceptedasANSIStandardinDecember1998HowDoesSQLJwork?第69页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

SQLJFeaturesPrecededby:#sql#sql{UPDATETABSETCOL1=:xWHERECOL2>:yANDCOL3<:z};ProvidesApplicationDeveloperswithaHigher-levelProgrammingInterfaceforStaticSQLSQLJtranslatorperformstype-checkingandschema-checkingofSQLstatementsatprogramdevelopmenttimeSQLJRuntime,aThinLayerofPureJavaCodeaboveaJDBCDriverComprehensiveFacilitiesDatabaseIndependence第70页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

SQLJandOracle8iOracleDatabaseServer--Oracle8iJavavirtualmachineinternaltothedatabaseOracleExtendsSupportforStandardsBasedSQLJImplementedSQLJintoOracle8iSupportsAccesstoBLOBandCLOBDataSupportsSQLObjectTypesinSQLJProgramsthroughJPulishertoolJavaStoredProceduresandTriggersProvidesAccesstoOracleProprietaryLanguagePL/SQLUsingSQLJinOracle8iEJBServerOracelJavaIDE--JDeveloper第71页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

SQLJExampleimportjava.sql.*;importsqlj.runtime.ref.DefaultContext;importoracle.sqlj.runtime.Oracle;

publicclassJDBCInterop{

#sqlpublicstaticiteratorEmployees(Stringename,doublesal);

publicstaticvoidmain(String[]args)throwsSQLException{

if(args.length!=1){

System.out.println("usage:JDBCInterop");

System.exit(1);

} Oracle.connect(JDBCInterop.class,"perties");

Connectionconn= DefaultContext.getDefaultContext().getConnection();

第72页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

SQLJExample

//createaJDBCStatementobjecttoexecuteadynamicquery

Statementstmt=conn.createStatement();

Stringquery="SELECTename,salFROMempWHERE";

query+=args[0];

//usetheresultsetreturnedbyexecutingthequerytocreate

//anewstrongly-typedSQLJiterator

ResultSetrs=stmt.executeQuery(query);

Employeesemps;

#sqlemps={CAST:rs};

while(emps.next()){

System.out.println(emps.ename()+"earns"+emps.sal());

}

emps.close();

stmt.close();

}}第73页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

ODMGJavaBindingImpedanceMismatchObjectDataManagementGroup(ODMG)JavaBindingwasAddedtoODMG2.0AppliestobothODBMSandRDBMSPersistencebyReachabilityDatabaseTransparencyAutomaticallyMappingbetweenDatabaseandaCacheintheApplicationMemoryJavaObjectsareMappedintotheCacheWhenApplicationNavigatesthroughthemDatabaseTracksJavaObjectsintheCacheandWritethembacktoDatabaseatTransactionCommitTime第74页,共100页,2023年,2月20日,星期四DatabaseServerJavaDatabaseSupport

ODMGJavaBindingThree-TierModelClient...GUIApplicationLogicApplicationLogicObjectManagementApplicationLogicObjectManagementApplicationServers第75页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

ODMGJavaBindingComponentsJavaObjectDefinitionLanguage(ODL)DefinetheSpecificationsofObjectTypesthatConformtotheODMGObjectModelJavaObjectManipulationLanguage(OML)SupporttheODMGObjectModelwithCollections,TransactionsandDatabasesJavaObjectQueryLanguage(OQL)ProvidesFastandEfficientObject-QueryingCapabilitiesinJavaOQLQueriesandJavaMethodscancalleachotherinterchangeably第76页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

ODMGJavaBindingProduct1VisualBSFfromObjectmatterObject-relationalJavaFrameworkthatAllowsJavaObjectstobeEasilySavedandRetrievedfromRelationalDatabasesNon-intrusiveandDynamicOpenArchitectureCompleteObjectModelingLegacyDatabaseIntegrationSecurityPowerfulQueryCapabilitiesStandardsBasedFastPerformance

第77页,共100页,2023年,2月20日,星期四JavaDatabaseSupport

ODMGJavaBindingProduct2POETObjectServer5.0fromPOETPOET'sJavaSDKandSQLObjectFactoryAddsDistributedandEnterpriseCriticalFeatureODMG2.0CompliantJavaAPIBindingJavaObjectsareMappedtothePOETObjectDatabaseoraRelationalDatabaseatRuntimeTransparentJavaObjectPersistenceMulti-threadingandTransactionCapabilitiesTierIndependentOtherProductsJavaBlend,Jasmine…

第78页,共100页,2023年,2月20日,星期四IntroductiontoEnterpriseJavaBeansWhatisEJB?ServersidecomponentimplementingbusinesslogicwrappingDBwrappingexistingapplicationprovidingnewbusinessfunctionsSimilartoJavaBeanwrappedinejb-jarvisualdeploymentandmanagementEasyprogrammingWriteonce,runanywhere(clientandserver)Reusable第79页,共100页,2023年,2月20日,星期四Multi-tierEJBApplications(**)Heavy-dutyserversintheorganizationsDeployedoverintranetImprovedperformanceImprovedmanageabilityEasiermaintenanceIn-controlsystemupgradeThinclientsGUIpresentationEasytodownloadPossiblebuilt-inupgradingfeatures第80页,共100页,2023年,2月20日,星期四High-levelViewofaSimpleScenarioTransparentinvocationContainer-managedpersistencyTransaction第81页,共100页,2023年,2月20日,星期四EJBRolesandDeployment第82页,共100页,2023年,2月20日,星期四Client’sViewContractContractbetweenclientandcontainerFulfilledbybothEJBproviderandcontainerproviderIncludesIdentityMethodinvocationHomeinterfaceJNDINamingconventionSessionBeanexample:TraderBeanTraderTraderHome第83页,共100页,2023年,2月20日,星期四SessionBeanExamplepublicclassTraderBeanimplementsSessionBean{

publicvoidejbRemove()throws...{...}publicvoidejbActivate()…{…}publicvoidejbPassivate()...publicvoidsetSessionContext(SessionContextctx)...

publicvoidejbCreate()...

publicTradeResultbuy(...)...publicTradeResultsell(...)...publicdoublegetStockPrice(StringstockSymbol)...}publicinterfaceTraderHomeextendsEJBHome{Tradercreate()…}publicinterfaceTraderextendsEJBObject{publicTradeResultbuy(...)...publicTradeResultsell(...)...publicdoublegetStockPrice(StringstockSymbol)...}第84页,共100页,2023年,2月20日,星期四ComponentContractContractbetweenBeanandcontainerIncludesBeanclassinstance’sviewofitslifecycleForsessionBeans,statemanagementcallbackmethodsinvokedby

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论