omsCube - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

omsCube

Description:

Persistenz ist eine der wichtigsten Funktionalit ten in Businessanwendungen. In vielen Anwendungen bilden die Datenbankoperationen einen gro en Teil des Sourcecodes ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 27
Provided by: robert928
Category:
Tags: omscube | teil

less

Transcript and Presenter's Notes

Title: omsCube


1
omsCube
  • Objektverwaltung, basierend auf einem
    relationalen Datenbankmanagementsystem

2
Wichtigkeit von Persistenz
  • Persistenz ist eine der wichtigsten
    Funktionalitäten in Businessanwendungen
  • In vielen Anwendungen bilden die
    Datenbankoperationen einen großen Teil des
    Sourcecodes
  • Die Daten werden länger genutzt als die
    Anwendungen, die die Daten erzeugt haben
  • Performance von Datenbankoperationen hat
    entscheidende Rolle in der Anwendungsperformance

3
Persistenz-Lösungen
  • RDBMS relational database management systems
  • Problem object-relational impedance mismatch
  • ODBMS object database management systems
  • ORDBMS object/relational database management
    systems
  • Andere Lösungen
  • flat files, XML, in memory

4
omsCube E/R Diagramm
5
omsCube Metadaten
6
omsCube Daten
7
stored procedures - Beispiel
  • ...
  • FUNCTION createElement( p_displayName IN
    VARCHAR2, p_bookmark IN VARCHAR2, p_scm_Id IN
    NUMBER, p_creating_elm_Id IN NUMBER
  • ) RETURN NUMBER
  • FUNCTION updateElement( p_elm_Id IN NUMBER,
    p_displayName IN VARCHAR2, p_bookmark IN
    VARCHAR2, p_modifying_elm_Id IN NUMBER
  • ) RETURN NUMBER
  • FUNCTION cloneElementAppend( p_elm_Id IN NUMBER,
    p_target_elm_id IN NUMBER, p_target_cat_id IN
    NUMBER, p_target_key IN VARCHAR, p_recursive IN
    NUMBER, p_cloneAssociations IN NUMBER,
    p_creating_elm_Id IN NUMBER
  • ) RETURN NUMBER
  • FUNCTION removeElementRecursive( p_elm_Id IN
    NUMBER, includeSelf IN NUMBER, removeAssociations
    IN NUMBER
  • ) RETURN NUMBER
  • PROCEDURE moveCompositionBefore( p_cmp_Id in
    number, p_before_cmp_Id IN NUMBER,
    p_modifying_elm_Id in number )
  • ...

8
stored procedures - packages
  • PCK_AUTHORISATION
  • PCK_COMPOSITIONPATH
  • PCK_ELEMENT
  • PCK_EXCEPTION
  • PCK_LOCKING
  • PCK_META
  • PCK_NAMESPACEPATH
  • PCK_RELATION
  • PCK_VALIDATOR

9
Architektur
10
omsCube core Klassen
11
omsCube core API
12
Anfragebeispiel
  • DECLARE
  • v_bookmark element.elm_bookmarkTYPE
  • v_id element.elm_idTYPE
  • v_ids t_array
  • BEGIN
  • v_bookmark in_string_bookmark
  • BEGIN
  • select elm_id into v_id from element where
    elm_bookmark v_bookmark
  • EXCEPTION
  • when NO_DATA_FOUND then v_id 0
  • END
  • SELECT ass_target_elm_id BULK COLLECT INTO v_ids
  • FROM association
  • WHERE ass_cat_id in_int_members_att_id
  • AND ass_source_elm_id v_id
  • OPEN out_cursor_tree FOR

13
DAO und Entities
14
Beispiel generierte Klassen 1/2
15
Beispiel generierte Klassen 2/2
Finders
Entities
16
OmsManager
17
Beispiel Benutzerverwaltung
18
Beispiel Loginprozedur 1/3
  • Profile getProfile( String username, String
    password )
  • DataStore store Context.getDataStore()
  • ProfileFinder finder new ProfileFinder( store
    )
  • Profile profile
  • finder.findProfileWithRolesByLogin( username )
  • store.commit()
  • password MD5.getHashString( password )
  • if( profile null
  • !profile.getPassword().equalsIgnoreCase(
    password ) )
  • return null
  • return profile

19
Beispiel Loginprozedur 2/3
  • public Profile findProfileWithRolesByLogin(
    String loginName ) throws Exception
  • Scheme profileScm getMetaData().getScheme(
    Profile.NAMESPACE_PATH,
  • Profile.SCHEME_NAME )
  • BoundVariable bindVariables new
    BoundVariable
  • new BoundVariable( "out_cursor_tree", null ),
  • new BoundVariable( "in_string_username",
    loginName ),
  • new BoundVariable( "in_int_username_att_id",
    profileScm.getSimpleAttributeByName(
    Profile.SAT_USERNAME ).getId() ),
  • new BoundVariable( "in_int_roles_att_id",
    profileScm.getComplexAttributeByName(
    Profile.CAT_ROLES ).getId() ),
  • OMSStructure tree getStructureByResource(
    ProfileFinder.class, "findProfileWithRolesB
    yLogin.sql", null, bindVariables )
  • OMSElement elements tree.getElements()
  • for (int i 0 elements ! null i lt
    elements.length i)
  • if( elements i .getNamespacePath().equals(
    Profile.NAMESPACE_PATH ) elements i
    .getSchemeName().equals( Profile.SCHEME_NAME ) )
  • return new Profile( elements i )
  • return null

20
Beispiel Loginprozedur 3/3
  • DECLARE
  • v_count INTEGER
  • v_roles_count INTEGER
  • v_profile_id element.elm_idTYPE
  • v_roles_cat_id complexattribute.cat_idTYPE
  • v_cur SYS_REFCURSOR
  • BEGIN
  • v_roles_cat_id in_int_roles_att_id
  • SELECT MAX( uvl_elm_id ) into v_profile_id
  • FROM uniquevalue
  • WHERE uvl_sat_id in_int_username_att_id
  • AND uvl_value in_string_username
  • IF v_profile_id IS NOT NULL THEN
  • SELECT count() INTO v_roles_count FROM
    association
  • WHERE ass_cat_id v_roles_cat_id
  • AND ass_source_elm_id v_profile_id

SELECT FROM association JOIN element ON (
elm_id ass_target_elm_id OR elm_id
v_profile_id ) LEFT OUTER JOIN simplevalue ON
svl_elm_id elm_id LEFT OUTER JOIN clobvalue ON
cvl_elm_id elm_id LEFT OUTER JOIN blobvalue ON
bvl_elm_id elm_id LEFT OUTER JOIN uniquevalue
ON uvl_elm_id elm_id WHERE ( ass_cat_id
v_roles_cat_id AND ass_source_elm_id
v_profile_id )
SELECT FROM ELEMENT LEFT OUTER JOIN simplevalue
ON svl_elm_id elm_id LEFT OUTER JOIN clobvalue
ON cvl_elm_id elm_id LEFT OUTER JOIN blobvalue
ON bvl_elm_id elm_id LEFT OUTER JOIN
uniquevalue ON uvl_elm_id elm_id WHERE elm_id
v_profile_id
21
omsCube Rechte
22
omsCube Locking
23
Vorteile
  • Direkte Abbildung von Businessklassen in der
    Datenbank
  • Leichte Erweiterbarkeit des logischen
    Datenbankschemas
  • Gute Ablage von Baumstrukturen
  • Gut für Speicherung von vielen unterschiedlichen
    Objekten geeignet
  • Gute Performance von Suchoperationen
  • Alle Objekte sind auf die selbe Weise in der
    Datenbank gespeichert
  • Nutzt oft bereits vorhandene und gut bekannte
    relationale Datenbanken als Basis
  • Kann mit relationalen Modellen kombiniert werden

24
Nachteile
  • Komplizierte Abfragen
  • Anwendungslogik-Klassen sind von der
    Datenbankschicht abhängig
  • Schlechte Unterstützung für verschiedene
    Datenbanken
  • Numerische- und Datums-Werte sind als VARCHAR
    gespeichert
  • Schlechtere Performance von Schreiboperationen
  • Die Technologie ist nicht weit verbreitet

25
Fazit
  • Wähle immer die Technologie, die am besten Deinen
    Anforderungen und Bedürfnissen entspricht
  • There is no silver bullet

26
Kontakt
  • FINGO www.fingo.pl
  • Robert Marek robert_at_fingo.pl
  • Präsentationsfolien www.fingo.info/omscube/
  • omsCube offizielle Seite www.opencube.org
  • openCube Verein info_at_opencube.org
Write a Comment
User Comments (0)
About PowerShow.com