Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertIngeborg Andersson Endret for 10 år siden
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”))}
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.