The tools used by esuphelpdesk developers Eclipse Omondo
The tools used by esup-helpdesk developers: Eclipse, Omondo Eclipse. UML plugin, Apache OJB JDO Pascal Aubry & Alexandre Boisseau Format PDF IFSIC – University of Rennes 1 – May 2004 http: //perso. univ-rennes 1. fr/pascal. aubry/presentations/jdo
A Java program Program. java (runtime logic) runtime components javac Legend: user-maintained data generated data Program. class Format PDF tools and programs
implementation A u. Portal channel Channel. java (runtime logic) IChannel. java runtime components javac XML output Legend: user-maintained data generated data Channel. class runtime data Format PDF tools and programs u. Portal
A u. Portal channel accessing a database implementation database management Channel. java (runtime logic) IChannel. java runtime components javac generated data Data. class database accesses database access config Channel. class XML output Legend: user-maintained database Data. java (data access) runtime data Format PDF tools and programs u. Portal
Accessing the database through (OJB) JDO database management implementation database object map Channel. java (runtime logic) OJB JDO enhancer IChannel. java runtime components javac generated data Data. class JDO runtime database accesses database access config Channel. class XML output Legend: user-maintained database Data. java (data access) runtime data Format PDF tools and programs u. Portal
Using Omondo Eclipse. UML plugin UML model Omondo eclipse. UML database management implementation code generation & reverse engineering Channel. java (runtime logic) database object map OJB JDO enhancer IChannel. java runtime components javac generated data Data. class JDO runtime database accesses database access config Channel. class XML output Legend: user-maintained database Data. java (data access) runtime data Format PDF tools and programs u. Portal
Using Omondo Eclipse. UML plugin UML model Omondo eclipse. UML database management implementation code generation & reverse engineering Channel. java (runtime logic) database object map OJB JDO enhancer IChannel. java runtime components javac generated data Data. class JDO runtime database accesses database access config Channel. class XML output Legend: user-maintained database Data. java (data access) runtime data Format PDF tools and programs u. Portal
UML model Omondo eclipse. UML implementation code generation & reverse engineering Channel. java (runtime logic) database object map OJB JDO enhancer runtime components javac Data. class JDO runtime database accesses database access config Channel. class XML output Legend: generated database Data. java (data access) IChannel. java user-maintained database management database object mapping runtime data Format PDF tools and programs missing feature u. Portal
UML model Omondo eclipse. UML implementation code generation & reverse engineering Channel. java (runtime logic) database object map OJB JDO enhancer runtime components javac Data. class JDO runtime database accesses database access config Channel. class XML output Legend: generated database Data. java (data access) IChannel. java user-maintained database management database object mapping runtime data Format PDF tools and programs missing feature u. Portal
UML model Omondo eclipse. UML implementation code generation & reverse engineering Channel. java (runtime logic) database object map OJB JDO enhancer runtime components javac Data. class JDO runtime database accesses database access config Channel. class XML output Legend: generated database Data. java (data access) IChannel. java user-maintained database management database object mapping runtime data Format PDF tools and programs missing feature u. Portal
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_chap 3/ Format PDF
JDO implementations • Commercial – Kodo JDO (Solar. Metric/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 – JOn. AS (Object. Web) • JOn. AS is a J 2 ee 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 display. Name; public CUser(String id, String display. Name) { this. id = id; this. display. Name = display. Name; } public String get. Id() { return id; } public String get. Display. Name() { return display. Name; Format PDF } }
The CDoc class public class CDoc { private long id; private java. sql. Timestamp date; private CUser sender; private String sender. Id; public CDoc(String description, CUser sender) { // id is automatically set by OJB-JDO. this. date = new java. sql. Timestamp( new Date(). get. Time()); this. sender = sender; this. sender. Id = sender. get. Id(); } public long get. Id() { return id; } public Timestamp get. Date() { return date; } public CUser get. Sender() { 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="display. Name" column="display. Name" 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="display. Name" 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="sender. Id" column="sender" jdbc-type="VARCHAR"/> <reference-descriptor name="sender" class-ref="CExample. CUser"> <foreignkey field-ref="sender. Id"/> 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="sender. Id"/> - displayname Format PDF
Programming with OJB // Get an Persistence Manager Factory (PMF) Ojb. Store. PMF f = new Ojb. Story. PMF(); // Get a Persistence Manager Persistence. Manager manager = f. get. Persistence. Manager(); // Start a transaction manager. current. Transaction(). begin(); // // Do things. . . // // Commit or rollback the transaction manager. current. Transaction(). commit(); Format PDF
Example: display all users try { manager. current. Transaction(). begin(); Query query = manager. new. Query(CUser. class); Collection all. Users = (Collection) query. execute(); Iterator iter = all. Users. iterator(); while (iter. has. Next()) { u = (CUser) iter. next(); System. out. println("id=" + u. get. Id() + ", display. Name=" + u. get. Display. Name()); i++; } manager. current. Transaction(). commit(); } catch (Throwable t) { t. print. Stack. Trace(); } finally { manager. close(); } } Format PDF
Example: create a user CUser u = new CUser("mon-id", "NOM prenom"); Transaction tx = manager. current. Transaction(); tx. begin(); // Mark object as persistant manager. make. Persistent(u); try{ // Commit the transaction, object mark persistent is stored. tx. commit(); } catch(Ojb. Store. Fatal. Internal. Exception ex){ System. out. println("User already exists!"); } finally { manager. close(); } Format PDF
Example: delete a user Transaction tx = manager. current. Transaction(); tx. begin(); Query query = manager. new. Query(CUser. class, "display. Name == "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. delete. Persistent(u); } tx. commit(); Format PDF
- Slides: 24