Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Bertha Heitkamp Geändert vor über 11 Jahren
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 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 FUNCTION removeElementRecursive( p_elm_Id IN NUMBER, includeSelf IN NUMBER, removeAssociations IN 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_bookmark%TYPE;
v_id element.elm_id%TYPE; v_ids t_array; BEGIN v_bookmark := :in_string_bookmark; 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 SELECT * FROM composition, association, element, simplevalue, uniquevalue, clobvalue, TABLE( CAST( v_ids AS t_array ) ) ids WHERE cmp_target_elm_id = ids.COLUMN_VALUE AND elm_id = cmp_target_elm_id AND ass_source_elm_id (+)= elm_id AND svl_elm_id (+)= elm_id AND cvl_elm_id (+)= elm_id AND uvl_elm_id (+)= elm_id;
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, "findProfileWithRolesByLogin.sql", null, bindVariables ); OMSElement[] elements = tree.getElements(); for (int i = 0; elements != null && i < 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_id%TYPE; v_roles_cat_id complexattribute.cat_id%TYPE; 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; IF v_roles_count > 0 THEN OPEN v_cur FOR -- ELSE END IF; SELECT * FROM DUAL WHERE ROWNUM = 0; :out_cursor_tree := v_cur; END; 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
There is no silver bullet
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: Präsentationsfolien: omsCube offizielle Seite: openCube Verein:
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.