Upload
doctor
View
36
Download
0
Embed Size (px)
DESCRIPTION
SIGILUM. UNIVERSITATIS. REDONENSIS. UNIVERSITE DE RENNES 1. The tools used by esup-helpdesk developers: Eclipse, Omondo EclipseUML plugin, Apache OJB JDO. Pascal Aubry & Alexandre Boisseau IFSIC – University of Rennes 1 – May 2004 http://perso.univ-rennes1.fr/pascal.aubry/presentations/jdo. - PowerPoint PPT Presentation
Citation preview
Format PDF
The tools used by esup-helpdesk developers:
Eclipse,Omondo EclipseUML plugin,
Apache OJB JDO
Pascal Aubry & Alexandre BoisseauIFSIC – University of Rennes 1 – May 2004
http://perso.univ-rennes1.fr/pascal.aubry/presentations/jdo
Format PDF
Program.java(runtime logic)
Program.java(runtime logic)
runtime components
Program.classProgram.classjavac
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
Legend:
A Java program
Format PDF
Channel.java(runtime logic)
Channel.java(runtime logic)
runtime components
Channel.classChannel.class
uPortal
IChannel.javaIChannel.java
javac
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
Legend:
A uPortal channel
Format PDF
Channel.java(runtime logic)
Channel.java(runtime logic)
runtime components
Data.classData.class
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
javacdatabaseaccesses
databasemanagement
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
Legend:
A uPortal channel accessing a database
Format PDF
Channel.java(runtime logic)
Channel.java(runtime logic)
runtime components
Data.classData.class
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
javacdatabaseaccesses
databasemanagement
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
Legend:
Accessing the database through (OJB) JDO
OJB JDOenhancer
databaseobject map
databaseobject map
JDO runtimeJDO runtime
Format PDF
runtime components
Channel.java(runtime logic)
Channel.java(runtime logic)
Data.classData.class JDO runtimeJDO runtime
UMLmodel
UMLmodel
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
OJB JDOenhancer
databaseobject map
databaseobject map
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
OmondoeclipseUML
javacdatabaseaccesses
databasemanagement
code generation &reverse engineering
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
Legend:
Using Omondo EclipseUML plugin
Format PDF
runtime components
Channel.java(runtime logic)
Channel.java(runtime logic)
Data.classData.class JDO runtimeJDO runtime
UMLmodel
UMLmodel
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
OJB JDOenhancer
databaseobject map
databaseobject map
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
OmondoeclipseUML
javacdatabaseaccesses
databasemanagement
code generation &reverse engineering
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
Legend:
Using Omondo EclipseUML plugin
Format PDF
runtime components
Channel.java(runtime logic)
Channel.java(runtime logic)
Data.classData.class JDO runtimeJDO runtime
UMLmodel
UMLmodel
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
OJB JDOenhancer
databaseobject map
databaseobject map
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
OmondoeclipseUML
javacdatabaseaccesses
databasemanagement
code generation &reverse engineering
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
missing feature
Legend:
database object mapping
Format PDF
runtime components
Channel.java(runtime logic)
Channel.java(runtime logic)
Data.classData.class JDO runtimeJDO runtime
UMLmodel
UMLmodel
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
OJB JDOenhancer
databaseobject map
databaseobject map
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
OmondoeclipseUML
javacdatabaseaccesses
databasemanagement
code generation &reverse engineering
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
missing feature
Legend:
database object mapping
Format PDF
runtime components
Channel.java(runtime logic)
Channel.java(runtime logic)
Data.classData.class JDO runtimeJDO runtime
UMLmodel
UMLmodel
Data.java(data access)
Data.java(data access)
Channel.classChannel.class
uPortal
database
OJB JDOenhancer
databaseobject map
databaseobject map
IChannel.javaIChannel.java
javacdatabaseaccessconfig
databaseaccessconfig
OmondoeclipseUML
javacdatabaseaccesses
databasemanagement
code generation &reverse engineering
database object mapping
runtimedata
XMLoutput
impl
emen
tatio
n
user-maintained datauser-maintained data
generated datagenerated data
tools and programs
missing feature
Legend:
Format PDF
JDO principles
• Database abstraction– Uses JDBC– JDBC abstracts the database manager– JDO abstracts the data:
no SQL code is written at all!
• Persistence management– Perform changes on objects– the changes are automatically reflected on the
data (in the database)
Format PDF
JDO specifications
• http://java.sun.com/products/jdo/index.jsp
• http://www.theserverside.com/articles/article.tss?l=JDO
• http://www.onjava.com/pub/a/onjava/excerpt/JDO_chap3/
Format PDF
JDO implementations• Commercial
– Kodo JDO (SolarMetric/Versant)• the most feature complete, easy to use implementation.
– JDO Genie• pretty feature complete, but bad reputation.
– JCredo
• Open-source– OJB (Apache, open source)
• JDO support is added through a plugin. A native JDO implementation will come with JDO 2.0.
– TJDO (dead), XORM (not followed)– Castor JDO
• Last release in march 2004. Middle product– JOnAS (ObjectWeb)
• JOnAS is a J2ee specification which include JDO implementation.– Hibernate JDO (Hibernate)
• seems to be a good product– JBoss announced an open-source JDO implementation in JBoss.
• http://www.theserverside.com/discussions/thread.tss?thread_id=21825
Format PDF
A very short example
Format PDF
The CUser class
public class CUser {private String id;private String displayName;
public CUser(String id, String displayName) {this.id = id;this.displayName = displayName;
}public String getId() {
return id;}public String getDisplayName() {
return displayName;}
}
Format PDF
The CDoc classpublic class CDoc { private long id; private java.sql.Timestamp date; private CUser sender; private String senderId;
public CDoc(String description, CUser sender) { // id is automatically set by OJB-JDO. this.date = new java.sql.Timestamp( new Date().getTime()); this.sender = sender; this.senderId = sender.getId(); }
public long getId() { return id; } public Timestamp getDate() { return date; } public CUser getSender() { return sender; }}
Format PDF
CUser database mapping
<class-descriptor class="CExample.CUser" table="user"> <field-descriptor name="id" column="id" jdbc-type="VARCHAR" primarykey="true" /> <field-descriptor name="displayName" column="displayName" jdbc-type="VARCHAR"/></class-descriptor>
Format PDF
CUser database mapping
Table user :
- id (primary-key)
- displayname
Table user :
- id (primary-key)
- displayname
<field-descriptor name="displayName" column="displayname" jdbc-type="VARCHAR"/>
<field-descriptor name="id" column="id" jdbc-type="VARCHAR"/>
Format PDF
CDoc database mapping
<class-descriptor class="CExample.CDoc" table="doc"> <field-descriptor name="id" column="id" jdbc-type="BIGINT" primarykey="true" autoincrement="true"/> <field-descriptor name="date" column="date“ jdbc-type="TIMESTAMP"/> <field-descriptor name="senderId" column="sender" jdbc-type="VARCHAR"/> <reference-descriptor name="sender" class-ref="CExample.CUser"> <foreignkey field-ref="senderId"/> </reference-descriptor></class-descriptor>
Format PDF
CDoc database mapping
Table doc :
- id (primary-key)
- date
- sender-id
Table doc :
- id (primary-key)
- date
- sender-id
Table user :
- id (primary-key)
- displayname
Table user :
- id (primary-key)
- displayname<reference-descriptor name="sender" class-ref="CExample.CUser"><foreignkey field-ref="senderId"/>
field-descriptor name="date" column="date" jdbc-type="TIMESTAMP"/>
Format PDF
Programming with OJB
// Get an Persistence Manager Factory (PMF)OjbStorePMF f = new OjbStoryPMF();
// Get a Persistence ManagerPersistenceManager manager = f.getPersistenceManager();
// Start a transactionmanager.currentTransaction().begin();
//// Do things... //
// Commit or rollback the transactionmanager.currentTransaction().commit();
Format PDF
Example: display all userstry { manager.currentTransaction().begin();
Query query = manager.newQuery(CUser.class);
Collection allUsers = (Collection) query.execute();
Iterator iter = allUsers.iterator(); while (iter.hasNext()) { u = (CUser) iter.next(); System.out.println("id=" + u.getId() + ", displayName=" + u.getDisplayName()); i++; }
manager.currentTransaction().commit();
} catch (Throwable t) { t.printStackTrace();
} finally { manager.close();}}
Format PDF
Example: create a user
CUser u = new CUser("mon-id", "NOM prenom");
Transaction tx = manager.currentTransaction();
tx.begin();
// Mark object as persistantmanager.makePersistent(u);
try{ // Commit the transaction, object mark persistent is stored. tx.commit();
} catch(OjbStoreFatalInternalException ex){ System.out.println("User already exists!");
} finally { manager.close();}
Format PDF
Example: delete a user
Transaction tx = manager.currentTransaction();tx.begin();
Query query = manager.newQuery(CUser.class, "displayName == \"Toto\""); Collection result = (Collection) query.execute();
if (result.size() == 0) { System.out.println("No user found!");} else if (result.size() > 1) { System.out.println("Several users match!");} else { CUser u = (CUser) result.iterator().next(); manager.deletePersistent(u);}tx.commit();