Utviklingsstrategi – Mobility - PowerPoint PPT Presentation

taran
utviklingsstrategi mobility n.
Skip this Video
Loading SlideShow in 5 Seconds..
Utviklingsstrategi – Mobility PowerPoint Presentation
Download Presentation
Utviklingsstrategi – Mobility

play fullscreen
1 / 16
Download Presentation
Utviklingsstrategi – Mobility
87 Views
Download Presentation

Utviklingsstrategi – Mobility

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Utviklingsstrategi – Mobility Kai Quale, Bjørn Kristoffersen

  2. Innledning • WS for utveksling av studentdata mellom europeiske utdanningsinstitusjoner • 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 ORM FSWS Mobility FS Mobility JBoss, Java Oracle, PL/SQL

  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-spesifikkemetadata (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-processingofgenerated DDL is manual • Renameconstraints • Addcolumns used by themappingengine • Hibernateannotationsareaddedmanually (problem when WSDL changes) • XML configuration files? • Programmatictechniques?

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

  11. Database Read & Write • Bothrequests and responsesare Java treestructures • May be persisted to and fetched from database with a single save/getinvocation from the (req/resp) ”root” • Make Hibernate ”eager” and ”cascading” GetXResponsegetX(GetXRequestreq) { session.save(req); // Schema mapper addsresponse to database returnsession.get(GetXResponse.class, req.getID()); }

  12. Tables & Columns • Basic rule: Class = Table, Property=Column • Make a table: @Entity • Classwithonly simple properties: @Embedded • Little need to do anything to make columns • Hibernate likes surrogatekeys • Addkey to everyclass: @Id • Autonumbering: @GeneratedValue • Key is not part ofthe XML: @XmlTransient

  13. Naming • Implemented a subclass of org.hibernate.cfg.DefaultNamingStrategy • Length • Oracle has a 30 character limit onidentifiers • WSDL namesare 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 • Encloseidentifiers in ”double quotes”

  14. Dates • JAXB usesXMLGregorianCalendar • Replacewithjava.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 (propertyof type X*) * X is a ”Mobilityclass” • @ManyToOne (cascade=CascadeType.ALL) • @JoinColumn (name="LogicalName") • 1:N relationships (propertyof type List<X*>) • @OneToMany (CascadeType.ALL, FetchType.EAGER) • @Fetch (FetchMode.SUBSELECT) • @JoinColumn (name="LogicalName") • 1:N relationships (propertyof type List<String>) • @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 • Fullynormalized (tables for thesuperclass and eachsubclass, whichinheritprimarykey from superclass): • @Inheritance (strategy=InheritanceType.JOINED) • Multiple embeddedclasses (classcontains multiple propertiesofthe same type X*) • @Embedded • @AttributeOverrides • { @(name="x", column=@Column(name="RoleN”))}