Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Utviklingsstrategi – Mobility Kai Quale, Bjørn Kristoffersen.

Liknende presentasjoner


Presentasjon om: "Utviklingsstrategi – Mobility Kai Quale, Bjørn Kristoffersen."— Utskrift av presentasjonen:

1 Utviklingsstrategi – Mobility Kai Quale, Bjørn Kristoffersen

2 Innledning • WS for utveksling av studentdata mellom europeiske utdanningsinstitusjoner • http://www.rs3g.org http://www.rs3g.org • Toveis – Alle noder skal kunne være både klient og tjener – Utveksling av data kan initieres av begge – Hver operasjon kommer i 2 utgaver: sendX & getX – Disse er ”inverse” (sendXRequest ~ getXResponse) • SOAP er valgt, WSDL er definert (eksternt)

3 Forskjeller fra eksisterende FSWS • XML-skjema er predefinert (WSDL) – Medfører at strukturen er svært forskjellig fra FS • Operasjonene tar XML-parametre • Full ”speiling” av alle operasjoner – sendX/getX * klient/tjener (* request/response) – Max gjenbruk mellom varianter av operasjon X • Klientdelen må kunne startes fra FS-klienten

4 Arkitekturvalg • Mappingen går langs to akser: – Fysisk (format):XML  Database – Logisk (domene):Mobility  FS • Skiller disse aksene fra hverandre: – Fysisk:JAX-WS/Hibernate => ”Relasjonell XML” – Logisk:Relasjonell mapping

5 Fordeler • Fysisk (XML  Hibernate-tabeller) – Gjenbrukbar metode (bruk av annotasjoner) – (Prosjektspesifikke annotasjoner) • Logisk (Hibernate-tabeller  FS) – Gjenbrukbar mappingmotor (gen. dynamisk SQL) – Kvalitetskontroll via rapportering • Felt som ikke er mappet • Felt som er mappet > 1 gang for samme melding •…•… – (Prosjektspesifikke metadata)

6 Plattform • JBoss EAP 5.1 • JAX-WS / JAXB / wsconsume • Oracle 10gR2 Relational schema mapper Oracle, PL/SQLJBoss, Java Mobility FS FSWS Mobility ORM

7 Mønster – generert SQL INSERT INTO Target_Tabell ( ”Element1”,..., ”ElementN” ) SELECT KonvFunk_1 (tab_i.”DataFelt”...),..., KonvFunk_N (tab_j.”DataFelt”...) FROM ”Source_Tabell_1” tab_1,..., ”Source_Tabell_M” tab_M WHERE -- Join tab_1.”JoinFelt1” = tab_2.JoinFelt2... AND tab_M-1.”JoinFeltM-1” = tab_M.”JoinFeltM” -- -- Filter (søkekriterier) AND tab_i.”SøkeFelt_i” = :SøkeKrit_i...

8 Utviklingsoppgaver • Engangsjobb – Design og implementasjon av mappingmotor • Tabellstruktur • Rutine som traverserer strukturen og genererer dynamisk SQL – Registrering av FS-spesifikke metadata (dictionary) – Impl. av GUI for registrering av mappinger (etterhvert) • Jobb som må gjøres for hver ”kunde” – Registrering av kundespesifikke metadata • Tabeller (dictionary) • Mappinger (manuelt) – Impl. av kundespesifikke konv.funksjoner (manuelt)

9 Unsolved problems • Post-processing of generated DDL is manual – Rename constraints – Add columns used by the mapping engine • Hibernate annotations are added manually (problem when WSDL changes) – XML configuration files? – Programmatic techniques?

10 Datamodell – mappingmotor EntitetAttributt Funksjon Formell Parameter Returverdi for Er Har Funksjons Kall Aktuell Parameter Har Instansierer Oppdat Rolle Har Prosjekt Deltager MOBILITY / FS Home Partner - agreementData UTVAVTALE Rolle Oppdatering Instansierer For Returnerer data tilhørende Nøkkel Medlem Eier = PK UK FK Rolle Kombinasjon Annen Rolle Administrative Institutional - Home/Administrative Partner/Institutional Entitet Rolle Komb = Attributt Bet RelopVerdi For Kontekst Req/Resp GetV/Send Sender data i Skiller på EntRollKomb Betingelse

11 Database Read & Write • Both requests and responses are Java tree structures • May be persisted to and fetched from database with a single save/get invocation from the (req/resp) ”root” • Make Hibernate ”eager” and ”cascading” GetXResponse getX(GetXRequest req) { session.save(req); // Schema mapper adds response to database return session.get(GetXResponse.class, req.getID()); }

12 Tables & Columns • Basic rule: Class = Table, Property=Column – Make a table: @Entity – Class with only simple properties: @Embedded – Little need to do anything to make columns • Hibernate likes surrogate keys – Add key to every class: @Id – Autonumbering: @GeneratedValue – Key is not part of the XML: @XmlTransient

13 Naming • Implemented a subclass of org.hibernate.cfg.DefaultNamingStrategy – Length • Oracle has a 30 character limit on identifiers • WSDL names are longer + need for prefix – Case • Oracle uses default UPPERCASE • We preserve WSDL CamelCase (startMiddleEnd) – to avoid even longer names (START_MIDDLE_END) – for clarity in error messages • Enclose identifiers in ”double quotes”

14 Dates • JAXB uses XMLGregorianCalendar • Replace with java.util.Date – @Temporal (value=TemporalType.DATE) • Adapter class for parsing/serialization – @XmlElement (required=true) – @XmlSchemaType (name="date") – @XmlJavaTypeAdapter (CalendarAdapter.class)

15 Relationships • N:1 relationships (property of type X*) * X is a ”Mobility class” – @ManyToOne (cascade=CascadeType.ALL) – @JoinColumn (name="LogicalName") • 1:N relationships (property of type List ) – @OneToMany (CascadeType.ALL, FetchType.EAGER) – @Fetch (FetchMode.SUBSELECT) – @JoinColumn (name="LogicalName") • 1:N relationships (property of type List ) – @CollectionOfElements (targetElement=String.class) – @JoinTable (name="TableName“,@JoinColumn(name="FK")) – @CollectionId (@Column(name="ID"), @Type(type="string")) – @Column (name=”ColumnName", nullable=false)

16 Subclasses & Multiple embedded • Subclasses – Fully normalized (tables for the superclass and each subclass, which inherit primary key from superclass): • @Inheritance (strategy=InheritanceType.JOINED) • Multiple embedded classes (class contains multiple properties of the same type X*) – @Embedded – @AttributeOverrides • { @(name="x", column=@Column(name="RoleN”))}


Laste ned ppt "Utviklingsstrategi – Mobility Kai Quale, Bjørn Kristoffersen."

Liknende presentasjoner


Annonser fra Google