Internetteknologi (ITNET1)

Download Report

Transcript Internetteknologi (ITNET1)

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