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 2-3x35 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
• Exemplified 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 OOMI2 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
Transparency of Persistence
• Persistence should be transparent to users and
designers of client objects
Client Objects
Server Objects Datastore Objects
Decouple Datastore technology from client-objects
Client
Interface
Slide 9
Persistence
Interface Ingeniørhøjskolen i Århus
Persistence Concepts
C++/Java object
Object
= row in
RDBMS table
Storage
Objects
Storage Home
Incarnation
Datastore
C++/Java object
Sessions
Storage
Homes
RDBMS
Server
Storage Object
Incarnation
RDBMS
Table
C++/Java object
Slide 10
Ingeniørhøjskolen i Århus
Datastore Technology for Persistence
Datastore Technology
• Persistence can be implemented using
• Files
– CORBA Externalization
– Java 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/
Slide 12
Ingeniørhøjskolen i Århus
How to obtain persistence
• Roll your own persistence
– SOAP, RMI
•
•
•
•
For Java – use JDBC for RDBMS, serialization for filesystems
CORBA externalization for filesystems
COM serialization or structured storage
Possible to construct your own framework (as ROAD)
• Use a standard service
–
–
–
–
–
–
–
CORBA Persistence service (PSS)
COM Persistence service
Enterprise Java Beans
JDO Toolkit
Hibernate
LLBLGen Pro
May still be necessary to obtain persistence manually
Slide 13
Ingeniørhøjskolen i Århus
Externalization in CORBA
• Technique to
– write composite objects into a byte stream
– load composite objects from a byte stream
• Byte stream can then be written to/read from the
file system
• Supported by several CORBA products
Slide 14
Ingeniørhøjskolen i Århus
Java Serialization
• Transforms Java objects into stream
• Follows all referenced Java objects
• Stream can be written onto a file to achieve
persistence
• Objects must implement Serializable
• Attributes that need not be made persistent can
be declared as transient in the class definition
Slide 15
Ingeniørhøjskolen i Århus
Example of using Serialization for RMI
• http://java.sun.com/j2se/1.3/docs/guide/rmi/activat
ion/activation.4.html
– Class:
• public MyPersistentClass(ActivationID id, MarshalledObject
data) throws RemoteException, ClassNotFoundException,
java.io.IOException {
• This activatable class will
– Restore its State upon activation (if
persistentObjectStore.ser exist)
– Save its State after a new transaction is registered
– This could have been done utilizing an RDBMS
Slide 16
Ingeniørhøjskolen i Århus
private Vector transactions;
private File holder;
public MyPersistentClass(ActivationID id, MarshalledObject data)
throws RemoteException, ClassNotFoundException, java.io.IOException {
CONSTRUCTOR of MyPersistentClass
Find complete example and tutorial at:
http://java.sun.com/j2se/1.4.2/docs/guide
/rmi/activation/activation.4.html
// Register the object with the activation system
// then export it on an anonymous port
super(id, 0);
// Extract the File object from the MarshalledObject that was
// passed to the constructor
//
holder = (File)data.get();
Every time a passivated object is called,
the constructor is called as the rmid daemon
Instantiates it to activate – and here it
is checked whether the File exist – or not.
If it does exist, then its State is restored
if (holder.exists()) {
// Use the MarshalledObject to restore my state
//
this.restoreState();
} else {
transactions = new Vector(1,1);
transactions.addElement("Initializing transaction vector");
}
}
MarshalledObject data = new MarshalledObject (new File( "/home/rmi_tutorial/activation/persistentObjectStore.ser"
Slide 17
Ingeniørhøjskolen i Århus
public Vector calltheServer(Vector v) throws RemoteException {
Find complete example and tutorial at:
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/
activation/activation.4.html
int limit = v.size();
for (int i = 0; i < limit; i++) {
transactions.addElement(v.elementAt(i));
}
// Save this object's data out to file
//
this.saveState();
return transactions;
}
private void restoreState() throws IOException, ClassNotFoundException {
File f = holder;
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
transactions = (Vector)ois.readObject();
ois.close();
}
private void saveState() {
try {
File f = holder;
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(getTransactions());
oos.close();
} catch (Exception e) {
throw new RuntimeException("Error saving vector of data");
}
}
Slide 18
Using simple Java Serialization
To obtain persistence
Ingeniørhøjskolen i Århus
Persistence Interfaces in COM
<<Interface>>
IUnknown
<<Interface>>
IPersist
+ GetClassID()
<<Interface>>
IPersistStorage
+ IsDirty()
+ InitNew()
+ Load()
+ Save()
+ SaveCompleted()
+ HandsOffStorage()
<<Interface>>
IPersistStream
+ IsDirty()
+ Load()
+ Save()
+ GetSizeMax()
Slide 19
<<Interface>>
IPersistFile
+ IsDirty()
+ Load()
+ Save()
+ SaveCompleted()
+ GetCurFile()
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 20
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 21
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 22
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 23
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 24
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
– JDBC is at a low level
– Hibernate & Torque/Turbine project freeware
– In the following EJB will be presented, because:
• EJB may be used with Java RMI, Web service & CORBA
• CCM is built on the EJB specification
• EJB semantics covers most of the issues
Slide 25
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 27
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 28
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 29
Ingeniørhøjskolen i Århus
Persistence Concepts in EJB
Storage
Objects
Storage Home
Incarnation
Datastore
Sessions
Storage
Homes
Storage Object
Incarnation
Slide 30
Ingeniørhøjskolen i Århus
State Management
• State synchronization methods
– ejbLoad
– ejbStore
• Resource Management methods
– ejbActivate
– ejbPassivate
Slide 31
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 32
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 33
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 34
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 35
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 36
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 37
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 38
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 39
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 40
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 41
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 43
Ingeniørhøjskolen i Århus
Mapping to ODBMS’s
• ODL is a superset of OMG/IDL
• Programming language bindings of ODBMS’s are
also supported by CORBA
• ODBMS objects can be
– clients of CORBA objects
– servers for CORBA objects
Slide 44
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 OOMI-2
– Pro’s and Con’s
– How to implement?
– Compared to using RDBMS and file externalization
Slide 45
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 46
Ingeniørhøjskolen i Århus