Download Persistence

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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