Download Eclipse, Omondo EclipseUML plugin, Apache OJB JDO

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

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

Document related concepts
no text concepts found
Transcript
The tools used by esup-helpdesk developers:
Eclipse,
Omondo EclipseUML plugin,
Apache OJB JDO
Pascal Aubry & Alexandre Boisseau
Format PDF
IFSIC – University of Rennes 1 – May 2004
http://perso.univ-rennes1.fr/pascal.aubry/presentations/jdo
A Java program
Program.java
(runtime logic)
runtime components
javac
Program.class
Legend:
Format PDF
user-maintained data
generated data
tools and programs
implementation
A uPortal channel
Channel.java
(runtime logic)
runtime components
IChannel.java
javac
Channel.class
XML
output
Legend:
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
uPortal
A uPortal channel accessing a database
implementation
database
management
Channel.java
(runtime logic)
database
Data.java
(data access)
runtime components
IChannel.java
javac
javac
Data.class
database
access
config
Channel.class
XML
output
Legend:
database
accesses
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
uPortal
Accessing the database through (OJB) JDO
database
management
implementation
database
object map
Channel.java
(runtime logic)
database
Data.java
(data access)
OJB JDO
enhancer
runtime components
IChannel.java
javac
javac
Data.class
database
accesses
database
access
config
Channel.class
XML
output
Legend:
JDO runtime
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
uPortal
Using Omondo EclipseUML plugin
UML
model
Omondo
eclipseUML
database
management
implementation
code generation &
reverse engineering
Channel.java
(runtime logic)
database
object map
database
Data.java
(data access)
OJB JDO
enhancer
runtime components
IChannel.java
javac
javac
Data.class
database
accesses
database
access
config
Channel.class
XML
output
Legend:
JDO runtime
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
uPortal
Using Omondo EclipseUML plugin
UML
model
Omondo
eclipseUML
database
management
implementation
code generation &
reverse engineering
Channel.java
(runtime logic)
database
object map
database
Data.java
(data access)
OJB JDO
enhancer
runtime components
IChannel.java
javac
javac
Data.class
database
accesses
database
access
config
Channel.class
XML
output
Legend:
JDO runtime
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
uPortal
UML
model
Omondo
eclipseUML
implementation
code generation &
reverse engineering
Channel.java
(runtime logic)
database
management
database object mapping
database
object map
database
Data.java
(data access)
OJB JDO
enhancer
runtime components
IChannel.java
javac
javac
Data.class
database
accesses
database
access
config
Channel.class
XML
output
Legend:
JDO runtime
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
missing feature
uPortal
UML
model
Omondo
eclipseUML
implementation
code generation &
reverse engineering
Channel.java
(runtime logic)
database
management
database object mapping
database
object map
database
Data.java
(data access)
OJB JDO
enhancer
runtime components
IChannel.java
javac
javac
Data.class
database
accesses
database
access
config
Channel.class
XML
output
Legend:
JDO runtime
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
missing feature
uPortal
UML
model
Omondo
eclipseUML
implementation
code generation &
reverse engineering
Channel.java
(runtime logic)
database
management
database object mapping
database
object map
database
Data.java
(data access)
OJB JDO
enhancer
runtime components
IChannel.java
javac
javac
Data.class
database
accesses
database
access
config
Channel.class
XML
output
Legend:
JDO runtime
runtime
data
Format PDF
user-maintained data
generated data
tools and programs
missing feature
uPortal
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.
Format PDF
•
http://www.theserverside.com/discussions/thread.tss?thread_id=21825
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 class
public 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
<field-descriptor name="id"
column="id"
jdbc-type="VARCHAR"/>
Table user :
- id (primary-key)
- displayname
<field-descriptor name="displayName"
column="displayname"
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"/>
Format PDF
</reference-descriptor>
</class-descriptor>
CDoc database mapping
field-descriptor name="date"
column="date"
jdbc-type="TIMESTAMP"/>
Table doc :
- id (primary-key)
- date
- sender-id
Table user :
- id (primary-key)
<reference-descriptor
name="sender"
class-ref="CExample.CUser">
<foreignkey field-ref="senderId"/>
- displayname
Format PDF
Programming with OJB
// Get an Persistence Manager Factory (PMF)
OjbStorePMF f = new OjbStoryPMF();
// Get a Persistence Manager
PersistenceManager manager = f.getPersistenceManager();
// Start a transaction
manager.currentTransaction().begin();
//
// Do things...
//
// Commit or rollback the transaction
manager.currentTransaction().commit();
Format PDF
Example: display all users
try {
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 persistant
manager.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();
Format PDF
Related documents