Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

OmsCube Objektverwaltung, basierend auf einem relationalen Datenbankmanagementsystem.

Ähnliche Präsentationen


Präsentation zum Thema: "OmsCube Objektverwaltung, basierend auf einem relationalen Datenbankmanagementsystem."—  Präsentation transkript:

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 ... 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 );... stored procedures - Beispiel

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

9 Architektur

10 omsCube core Klassen

11 omsCube core API

12 DECLARE v_bookmark element.elm_bookmark%TYPE; v_id element.elm_id%TYPE; 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 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; END; Anfragebeispiel

13 DAO und Entities

14 Beispiel – generierte Klassen 1/2

15 Beispiel – generierte Klassen 2/2 FindersEntities

16 OmsManager

17 Beispiel: Benutzerverwaltung

18 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; } Beispiel – Loginprozedur 1/3

19 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; } Beispiel – Loginprozedur 2/3

20 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 OPEN v_cur FOR -- END IF; ELSE OPEN v_cur FOR SELECT * FROM DUAL WHERE ROWNUM = 0; END IF; :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 ) ; Beispiel – Loginprozedur 3/3 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 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 Vorteile

24 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 Nachteile

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

26 FINGO: –Robert Marek: Präsentationsfolien: omsCube offizielle Seite: –openCube Verein: Kontakt


Herunterladen ppt "OmsCube Objektverwaltung, basierend auf einem relationalen Datenbankmanagementsystem."

Ähnliche Präsentationen


Google-Anzeigen