Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Objektorienteret netværkskommuniation(ITONK1) Persistence Goal with todays lesson • After these 2x35 minutes you will be: – Comfortable with the expression “persistence”, and how it relates to Distributed Systems – Knowledgeable about different strategies for obtaining persistence for Distributed Systems – Ready to explore the subject further – You will not: • Be an expert on persistence, as this is a huge area in itself Slide 2 Ingeniørhøjskolen i Århus Outline • • • • Plenum – experience with persistent datastorage Continuing exercise Principles of Persistence Datastore Technology for Persistence – Files – Relational Databases • Examplified OR-mapping with EJB – Object Databases Slide 3 Ingeniørhøjskolen i Århus Experience with Persistent datastorage • To establish a picture of your knowledge – Which types of persistent datastorage do you know? – What experience do you have in using it with (oo) programming languages? – What problems did you face – and how did you solve them? Slide 4 Ingeniørhøjskolen i Århus Exercise: comparing strategies for persistence • This will be a continuing discussion • Select one or more entity classes from your own required assignment 1 an discuss how to solve the persistent requirements of the assignment using: – File persistence – Relational Database Management System (toolkit or emb. JDBC) – Object database system (ODBMS, e.g. JDO) • Using information obtained from the examples from ONK-2 and the following slides • Feel free to use the classroom PC for searching for more information • We will stop after each section (files, RDBMS, ODBMS), and allow for 5 min. group work • We will end with a follow-up discussion Slide 5 Ingeniørhøjskolen i Århus Principles of Persistence What is Persistence – a definition • Persistence is the ability of an object to survive the lifetime of the process in which it resides. • Persistence is relevant for stateful server objects. • What is State? – State = object instance attributes – private & public – Not methods • We remember the activation/deactivation discussion? – The state needs to be retained between object deactivation and object activation – Why? Slide 7 Ingeniørhøjskolen i Århus How to achieve Persistence? • Storing object state on persistent datastore before deactivation • Upon activation, load object state from persistent datastore – E.g. RMI activation • Persistent storage can be obtained by? – File system • embedded systems on disk-storage, Flash-RAM and others – Relational Database • All from embedded, to desktop and enterprise servers (most widely used is SQL servers) – Object-Database • Has been emerging technology for years, but no widespread support yet. JDO for Java is a promising technology however – Others? Slide 8 Ingeniørhøjskolen i Århus Datastore Technology for Persistence Datastore Technology • Persistence can be implemented using • Files – CORBA Externalization – C#/Java type File Serialization – Structured Storage in COM • Relational Databases – Object Relational Mapping • “Homegrown”, CMP, JDO, Hibernate, Torque, LLBLGen Pro – JDBC/ODBC • Oracle, IBM DB2, Microsoft SQL Server & Access, MySQL • Object Databases – http://www.odmg.org/ , Versant, JDO Slide 10 Ingeniørhøjskolen i Århus Problems with File-based Persistence • Mapping to Files can be inefficient for large composite objects • File systems only have crude support for concurrency control • File systems lack support for fault-tolerance (transactions) • Application specific code needed for every persistent class Slide 11 Ingeniørhøjskolen i Århus Continuing exercise part 1 – file-based • Select one or more entity classes from your own required assignment 1 an discuss how to solve the persistent requirements of the assignment using: – File persistence – Pro’s and Con’s – How to implement? Slide 12 Ingeniørhøjskolen i Århus Relational Database • Relational Database Management Systems (RDBMSs) Examples: – – – – – – – – Ingres Oracle Sybase DB2 Microsoft SQL Server Microsoft Access MySQL PostGree DB Slide 13 Ingeniørhøjskolen i Århus Mapping to RDBMS’s • Relational database schemas consist of sets of tables • Types of mapping: – Define a table for each type – Complex mapping • In each table create – primary key for object identifier – a column for each attribute of the object • mapping of middleware atomic types to primitive types supported by RDBMS • secondary keys for object references • Resolve inheritance statically – This and other problems -> • Objects and RDBMS does not map perfectly: – the OR impedance mismatch Slide 14 Ingeniørhøjskolen i Århus Embedding Queries into Programs • Embedded SQL – – – – Macros to embed queries into programs RDBMS provides processor to expand macros API to traverse queries Not standardized • Open Database Connectivity (Microsoft) – Standardized API for RDBMS Access available on all Microsoft Platforms • Java Database Connectivity (Sun) – Standardized RDBMS Access from Java Slide 15 Ingeniørhøjskolen i Århus Issues with mapping • Does this mean that we should figure out for ourselfes how to obtain the OR-mapping? – No – Frameworks available – CORBA PSS, COM persistence, EJB for Java, CCM, Hibernate, others – JDBC is at a low level – Hibernate project freeware Slide 16 Ingeniørhøjskolen i Århus RDBMS mapping illustrated with EJB’s Enterprise JavaBeans (EJB’s) • Standard server-side component model for Java Enterprise Applications – – – – – security resource pooling persistence concurrency transactional integrity • Has nothing to do with “JavaBeans” – JavaBeans designed for intra-process purposes • GUIs, non-visual widgets, entity representations – Enterprise Java Beans (EJB) designed for inter-process purposes Slide 18 Ingeniørhøjskolen i Århus EJB’s (cont.) • Restricted to Java (only implementation language) – platform independence – “write once, run anywhere” • EJB components – platform/implementation independence – write once, run in any Application Server complying with the EJB spec • • • • • • J2EE reference implementation Oracle’s Application Server (OAS) IBM’s Websphere BEA’s Weblogic Server and Weblogic Enterprise Sybase’s EAServer Open Source – JBoss (see links) Slide 19 Ingeniørhøjskolen i Århus Bean Usage • Entity beans Maps to domain model (Entity classes) – model state maintained across all client interactions – represent a row of data in a database • Session beans Maps to Use Case model (Control classes) – model business process being performed by a single client involving one or more entity beans – it extends the actions of the client into the server • simplifies the actions programmed by the client • limits the number of distributed calls required between the client and the entity beans • limits the number of stubs that have to be loaded by the client – are not persisted to a database Slide 20 Ingeniørhøjskolen i Århus Entity Bean Types • Bean can have total control over loading and storing from database – Bean Managed Persistence (BMP) • Container can take over this responsibility – Container Managed Persistence (CMP) • Still need to define an OR mapping in admin tool • This is the same in CORBA CCM / PSS – Specialized Implementations • Legacy applications such as CICS • When to choose what? – Well – start out with CMP if possible, and then migrate code as performance issues pops up during testing Slide 21 Ingeniørhøjskolen i Århus Bean Managed Persistence • Have to handle all database interaction – except distributed transactions • ejbLoad() and ejbStore() called when bean instance state must be synchronized with database • ejbActivate() and ejbPassivate() called when bean is moved between the ready state and pooled state Slide 22 Ingeniørhøjskolen i Århus Implement a BMP Entity Bean package java.examples.ejb.entity.bean; import javax.ejb.EntityBean; import javax.ejb.EntityContext; … public class BookBMP extends BookEJB { private DataSource dataSource_; private EntityContext ctx_; … Additional setup of database connections needed – some are done in the configuration tool Important features: Entity beans always implement the following event handles: •ejbCreate: insert •ejbRemove: delete •ejbLoad: select •ejbStore: update •ejbFindByPrimaryKey: select •And more can be implemented: •ejbFindBooksByAuthor: select Slide 23 Ingeniørhøjskolen i Århus Implement DB Insertion public String ejbCreate(String id, String title, String author, String topic) { super.ejbCreate(id, title, author, topic); Connection conn = null; PreparedStatement pstatement = null; try { conn = dataSource_.getConnection(); pstatement=conn.prepareStatement("insert into Book (id, title, author, topic)"+ ” values (?, ?, ?, ?)"); pstatement.setString(1,id_); pstatement.setString(2,title_); pstatement.setString(3,author_); pstatement.setString(4,topic_); pstatement.execute(); return id_; } catch(SQLException ex) { throw new EJBException(ex); } finally { … } } Slide 24 BookBMP OR-mapping id title author topic 42123 EJB SW EJB 43423 EJB2 SW EJB … … … … Ingeniørhøjskolen i Århus Implement DB Load public void ejbLoad() { Connection conn = null; PreparedStatement pstatement = null; ResultSet rs = null; try { conn = dataSource_.getConnection(); pstatement = conn.prepareStatement( "select id, title, author, topic from Book " + "where id = ?"); pstatement.setString(1, (String)ctx_.getPrimaryKey()); rs = pstatement.executeQuery(); if (rs.next()) { if (rs.next()) { id_ = rs.getString("id"); title_ = rs.getString("title"); author_ = rs.getString("author"); topic_ = rs.getString("topic"); super.ejbLoad(); } else { throw new EJBException("unable to locate row"); } } catch(SQLException ex) { throw new EJBException(getText(ex)); } finally { … } … Slide 25 Ingeniørhøjskolen i Århus Implement DB Store public void ejbStore() { Connection conn = null; PreparedStatement pstatement = null; try { super.ejbStore(); conn = dataSource_.getConnection(); pstatement = conn.prepareStatement( "update Book set title=?, author=?, topic=? " + "where id = ?"); pstatement.setString(1,title_); pstatement.setString(2,author_); pstatement.setString(3,topic_); pstatement.setString(4,id_); pstatement.executeUpdate(); } catch(SQLException ex) { throw new EJBException(getText(ex)); } finally { … } } Slide 26 Ingeniørhøjskolen i Århus Implement DB Remove public void ejbRemove() { Connection conn = null; PreparedStatement pstatement = null; try { super.ejbRemove(); conn = dataSource_.getConnection(); pstatement = conn.prepareStatement("delete from Book " + "where id = ?"); pstatement.setString(1, (String)ctx_.getPrimaryKey()); pstatement.executeUpdate(); } catch(SQLException ex) { throw new EJBException(getText(ex)); } finally { … } } Slide 27 Ingeniørhøjskolen i Århus Implement Finders public String ejbFindByPrimaryKey(String pk) throws FinderException { Connection conn = null; PreparedStatement pstatement = null; ResultSet rs = null; try { conn = dataSource_.getConnection(); pstatement = conn.prepareStatement("select id from Book " + "where id = ?"); pstatement.setString(1, pk); rs = pstatement.executeQuery(); if (rs.next()) { return rs.getString("id"); } else { throw new ObjectNotFoundException(pk + " no found"); } } catch(SQLException ex) { throw new EJBException(getText(ex)); } finally {... } } Slide 28 Ingeniørhøjskolen i Århus Implement Finders (cont.) public Collection ejbFindAll() throws FinderException { Connection conn = null; PreparedStatement pstatement = null; ResultSet rs = null; try { Vector pKeys = new Vector(); conn = dataSource_.getConnection(); pstatement = conn.prepareStatement("select id from Book "); rs = pstatement.executeQuery(); while (rs.next()) { pKeys.add(rs.getString("id")); } return pKeys; } catch(SQLException ex) {throw new EJBException(getText(ex)); } finally {... } } Slide 29 Ingeniørhøjskolen i Århus Continuing exercise part 2 – RDBMS based • Select one or more entity classes from your own required assignment 1 an discuss how to solve the persistent requirements of the assignment using: – RDBMS • Embedded SQL • If you have experience using toolkits, be free to elaborate on this – Pro’s and Con’s – How to implement – Compared to using file externalization Slide 30 Ingeniørhøjskolen i Århus Principles of Persistence continued ODBMS ODBMS • ODBMSs have been standardized by the Object Database Management Group – Schema definition language (ODL) – subset of CORBA IDL – Programming language bindings to • C++ • Java • And many others – Object Query Language (OQL) – JDO has replaced the Java binding • Support persistence of OO programming language objects Slide 32 Ingeniørhøjskolen i Århus JDO: POJO’s Slide 33 Ingeniørhøjskolen i Århus Continuing exercise part 3 – ODBMS based • Select one or more entity classes from your own required assignment 1 an discuss how to solve the persistent requirements of the assignment using: – ODBMS • Use the JDO example from ONK-2 – Pro’s and Con’s – How to implement? – Compared to using RDBMS and file externalization Slide 34 Ingeniørhøjskolen i Århus Comparison • File externalization / serialization is not transparent for implementors of server objects • Persistence in RDBMS’s is – complicated by OR-impedance mismatch – simplified by wide availability of RDBMS’s – Well-known tested technology • Persistence in ODBMS’s is – simplified by conceptual similarities of • object models • programming language bindings – No widespread support – (personal view) I would not risk high-performance system on this Slide 35 Ingeniørhøjskolen i Århus