Objektorienteret netvrkskommuniationITONK1 - PowerPoint PPT Presentation

1 / 44
About This Presentation
Title:

Objektorienteret netvrkskommuniationITONK1

Description:

secondary keys for object references. Resolve inheritance statically ... limits the number of distributed calls required between the client and the entity beans ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 45
Provided by: SW11
Category:

less

Transcript and Presenter's Notes

Title: Objektorienteret netvrkskommuniationITONK1


1
Objektorienteret netværkskommuniation(ITONK1)
  • Persistence

2
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
  • You will not
  • Be an expert on persistence, as this is a huge
    area in itself

3
Outline
  • Plenum experince with persistent datastorage
  • Principles of Persistence
  • Datastore Technology for Persistence
  • Files
  • Relational Databases
  • Object Databases
  • Examplified OR-mapping with EJB

4
Experience with Persistent datastorage
  • To establish a picture of your knowledge
  • What kind of persistent datastorage do you know?
  • What experience do you have in using it with
    programming languages?
  • What problems did you face and how did you
    solve them?

5
Principles of Persistence
6
What is Persistence?
  • 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?

7
How to achieve Persistence?
  • Storing object state on persistent datastore
    before de-activation
  • Upon activation, load object state from
    persistent datastore
  • E.g. RMI activation
  • Persistent storage can be obtained by?
  • File system
  • embedded systems with a diskstorage
  • Relational Database
  • All from embedded, to desktop and enterprise
    servers (most widely used is SQL servers)
  • Object-Database
  • no widespread support yet
  • Flash-RAM
  • embedded systems cameras, cellphones, digital
    radios etc.

8
Transparency of Persistence
  • Persistence should be transparent to users and
    designers of client objects

Client Objects
Datastore Objects
Server Objects
Client Interface
Persistence Interface
9
Persistence Concepts
Object row in RDBMS table
C/Java object
Storage
Storage Home
Objects
Incarnation
C/Java object
Datastore
Sessions
Storage
Homes
RDBMS Server
Storage Object
RDBMS Table
Incarnation
C/Java object
10
Datastore Technology for Persistence
11
Datastore Technology
  • Persistence can be implemented using
  • Files
  • CORBA Externalization
  • Java Serialization
  • Structured Storage in COM
  • Relational Databases
  • Object Relational Mappings
  • JDBC/ODBC
  • Oracle, IBM DB2, Microsoft SQL Server Access,
    MySQL
  • Object Databases

12
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
  • May still be necessary to obtain persistence
    manually

13
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
  • Also used to store Java objects

14
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

15
Example of using Serialization for RMI
  • http//java.sun.com/j2se/1.3/docs/guide/rmi/activa
    tion/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

16
private Vector transactions private File
holder public MyPersistentClass(ActivationID
id, MarshalledObject data) throws
RemoteException, ClassNotFoundException,
java.io.IOException // 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() if (holder.exists())
// Use the MarshalledObject to restore
my state // this.restoreState() else
transactions new Vector(1,1)
transactions.addElement("Initializing
transaction vector")
CONSTRUCTOR of MyPersistentClass Find complete
example and tutorial at http//java.sun.com/j2se
/1.3/docs/ guide/rmi/activation/activation.4.html
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
17
public Vector calltheServer(Vector v) throws
RemoteException int limit
v.size() for (int i 0 i lt 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(f
is) 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")
Find complete example and tutorial at
http//java.sun.com/j2se/1.3/docs/ guide/rmi/acti
vation/activation.4.html
Using simpel Java Serilization To obtain
perstistence
18
Persistence Interfaces in COM
ltltInterfacegtgt
IUnknown
ltltInterfacegtgt
IPersist
GetClassID()
ltltInterfacegtgt
ltltInterfacegtgt
ltltInterfacegtgt
IPersistStorage
IPersistStream
IPersistFile
IsDirty()
IsDirty()
IsDirty()
InitNew()
Load()
Load()
Load()
Save()
Save()
Save()
GetSizeMax()
SaveCompleted()
SaveCompleted()
GetCurFile()
HandsOffStorage()
19
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

20
Relational Database
  • Relational Database Management Systems (RDBMSs)
    Examples
  • Ingres
  • Oracle
  • Sybase
  • DB2
  • Microsoft SQL Server
  • Microsoft Access
  • MySQL
  • PostGree DB

21
Mapping to RDBMSs
  • Relational database schemas consist of sets of
    tables
  • Define a table for each type
  • 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 RDMBS
  • secondary keys for object references
  • Resolve inheritance statically
  • This and other problems -gt the OR impedance
    mismatch

22
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

23
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
  • JDBC is at a low level
  • Torque/Turbine project freeware
  • JDO maps to XMI
  • In the following EJB will be presented

24
RDBMS mapping illustrated with EJBs
25
Enterprise JavaBeans (EJBs)
  • 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
  • Enterprise Java Beans (EJB) designed for
    inter-process purposes

26
EJBs (cont.)
  • Java
  • 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
  • Oracles Application Server (OAS)
  • IBMs Websphere
  • BEAs Weblogic Server and Weblogic Enterprise
  • Sybases EAServer
  • Open Source JBoss (see links)

27
EJB Architecture
  • Interfaces and Classes
  • beans
  • entity bean (maps perfectly to the Entity
    stereotype
  • session beans (no primary key maps to
    Control)
  • Stateless session bean
  • Stateful session bean
  • GUI? JSP/Servlet or Java Application
  • primary key (implemented in a class)
  • home interface (local and remote)
  • EJB object interface (local and remote)
  • Container / Application Server

28
Bean Types
  • Entity beans
  • models persistent state - this state is
    maintained through all method and server
    invocations
  • nouns of the domain
  • real world objects (e.g. Owner, Account,
    Transaction)
  • Session beans
  • models non-persistent state - this state will be
    lost between method invocations (stateless
    session) or server invocations (Stateful session)
  • manage tasks performed on behalf of a single
    client (e.g. Teller, Monthly Statement)
  • contains the business processes in which to use
    entity beans
  • manages actions that may cross entity beans or go
    outside the concern of an entity bean
  • e.g. Teller may authenticate the user and
    transfer funds between accounts
  • e.g. Statement may include transactions from
    multiple accounts

29
Bean Usage
Maps to domain model (Entity classes)
  • Entity beans
  • model state maintained across all client
    interactions
  • represent a row of data in a database
  • Session beans
  • 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

Maps to Use Case model (Control classes)
30
Persistence Concepts in EJB
Storage
Storage Home
Objects
Incarnation
Datastore
Sessions
Storage
Homes
Storage Object
Incarnation
31
State Management
  • State synchronization methods
  • ejbLoad
  • ejbStore
  • Resource Management methods
  • ejbActivate
  • ejbPassivate

32
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 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

33
Bean Managed Persistence
  • Have to handle all database interaction
  • except transactions (more of this next time)
  • 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

34
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

35
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()
  • pstatementconn.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

BookBMP
OR mapping
36
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_.getPrim
    aryKey())
  • 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")

37
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

38
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_.getPrim
    aryKey())
  • pstatement.executeUpdate()
  • catch(SQLException ex) throw new
    EJBException(getText(ex))
  • finally

39
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 ...

40
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 ...

41
Principles of Persistence continuedODBMS
42
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)
  • Support persistence of OO programming language
    objects

43
Mapping to ODBMSs
  • ODL is a superset of OMG/IDL
  • Programming language bindings of ODBMSs are also
    supported by CORBA
  • CORBA portable object adapter supports ODBMSs
  • ODBMS objects can be
  • clients of CORBA objects
  • servers for CORBA objects

44
Comparison
  • Externalization is not transparent for
    implementors of server objects
  • Persistence in RDBMSs is
  • complicated by impedence mismatch
  • simplified by wide availability of RDBMSs
  • Persistence in ODBMSs is
  • simplified by conceptual similarities of
  • object models
  • programming language bindings
Write a Comment
User Comments (0)
About PowerShow.com