330 likes | 449 Views
Effektiv utvikling av enterpriseapplikasjoner med Java / Swing / J2EE. Carl-Olav Løvald Sjefskonsulent, Mesan AS E-post: col@mesan.no. Mesan. Ledende i Norge mht MDA-basert J2EE systemutvikling Har 15-20 års bred erfaring fra utvikling av store, virksomhetskritiske systemer.
E N D
Effektiv utvikling av enterpriseapplikasjoner med Java / Swing / J2EE Carl-Olav Løvald Sjefskonsulent, Mesan ASE-post: col@mesan.no
Mesan • Ledende i Norge mht MDA-basert J2EE systemutvikling • Har 15-20 års bred erfaring fra utvikling av store, virksomhetskritiske systemer. • Sertifisert OptimalJ-partner med Compuware
Agenda • Hva er utfordringen(e)? • Hvordan kan vi møte utfordringen(e) med teknologi? • Generelle egenskaper • Overordnet arkitektur • Swing-arkitektur • Hva med effektivitet, kodekvalitet og vedlikehold? • Forretningsmodellering • Kodegenerering • Live Demo: Vi lager en J2EE/Swing-applikasjon
Hva er utfordringene? • Hvordan tilpasse systemer til endringer i virksomheten? – Time to market • Hvordan skal vi gjøre utviklerne mer effektive? – “Do more with less” • Hvordan kan vi sikre deltagelse for fagpersonell i IT-prosjektene? – ”User involvement” • Hvordan skal vi sikre at Best Practices, standarder og retningslinjer følges? • Hva skjer ved oppgradering til ny basisprogramvare?
Hvordan ønsker vi å jobbe? • Forretningsrettet utvikling • Virksomhetens behov styrer prioritering • Brukere / superbrukere deltar i utviklingsprosessen • Mer fokus på hva vi skal lage enn hvordan • Iterative prosesser • Prototyping • Hyppige leveranser • Frihet til å gjøre endringer • Kortest mulig vei fra ide til synlig produkt / løsning
Hva bør teknologien tilby? • Visuell utvikling • Modeller (som varer hele systemets levetid) • Visuell utvikling av brukergrensesnitt • Grafisk dialogeditor • Enkel kobling mellom data og visning • Muligheter for å vise testdata • Lav teknologisk kompleksitet... eller hjelp til å håndtere teknologisk kompleksitet • Basisfunksjonalitet (CRUD) • Kodegenerering eller funksjonsbiblioteker • Versjonshåndtering av kildekode
Hvordan får vi det til med Java / J2EE / Swing? • Model View Controller • Scope HMVC-implementasjon • Modellbasert utvikling • Utviklingsmiljøet OptimalJ • Kodegenerering • Egenutviklet Swing-generator
Swingapplikasjon Overordnet arkitektur Swing GUI Scope HMVC Model Objects Klient EJB Facade Objects EJB / DAO App Server Database Db Server
Scope HMVC • Open Source prosjekt • (http://scope.sourceforge.net/index.html) • Infrastruktur for å binde modeller til views med full to-veis synkronisering • Hierarkisk Model View Controller (HMVC) • Støtter Servlet, XML/XSLT og SWING • Wrappere til en rekke swing widgets (data binding og validering): • Button, ComboBox, Checkbox, Listbox, Panel, RadioButton, Table, TextField, MenuItem, Label, Password Field, Slider, Textarea... • Støtter integrasjon med IDE • Inneholder kodegenerator og test suite (Junit)
Gevinster med Scope • Enkelt å sette opp databinding mellom view og modell / submodell • To-veis synkronisering med ”Aktive” modeller som kringkaster endringer i state • Innebygget inputvalideringsfunksjonalitet • Eventhandling skilt fra presentasjon • Subkontrollere kan la kontrollmeldinger ”boble” opp til hovedkontroller • Støtte for språktilpasning av ledetekster og meldinger
Scope - virkemåte View Model Widget Selector Widget Selector Widget Selector Widget Selector Selector Control SubModel Selector Controller Selector Selector Selector
Scope - eksempel Modellen: public class ActivemodelModel extends BasicModel { private String name; public final static Selector NAME = Selector.fromString(”name"); public String getName() { return name; } public void setName(String inName) { name = inName; fireModelChange(VALUE_CHANGED, NAME); } } I viewet: STextField t = new STextField(); t.setColumns(20); t.setSelector("name");
Controller Controller Controller View View View Model Model Model Scope - HMVC
Hvordan sikre produktivitet, kodekvalitet og bruk av standarder?
J2EE Kompleksitet • Multi-language • Multi-tier • Multi Channel • Scalability 4GL C/C++ COBOL Java ProduktivitetKompleksitet reduserer produktivitet Productivity Time 90’s 80’s 00’s 70’s
Definere • Overordnet applikasjons- arkitektur • J2EE ekspertise • Teknologistandarder • Utviklingsstandarder • Best practices • Patterns • Code templates • Metoder • Modeller Gjennomsyn og retting • Feilaktig implementert arkitektur • Teknologistandarder ignorert • Avvik fra utviklingsstandarder • Feiltolkning av best practices • Patterns/templates ikke brukt • Modeller laget på nytt (unødig) Utviklingsteam Implementere • Applikatsjons- arkitektur • Teknologi- standarder • Utviklings-standarder • Best practices • Patterns • Code templates • Metoder • Modeller Utviklingsteam Systemarkitekter KunnskapsoverføringSikre bruk av best practices, standarder & retningslinjer
Platform Independent Model Code Model MDA - modelldrevet arkitektur • Fokus på hva man skal løse (mer enn hvordan) • Modeller på forretningsnivå sikrer lang levetid • Forenkler håndtering av kompleks teknologi • PIM • Representerer forretningsfunksjonalitet, egenskaper og relasjoner uten teknologi- detaljer • PSM • Beskriver komponentene i applikasjonen • Genereres fra PIM modellen. • Beskriver teknologispesifikke komponenter (J2EE, .NET, Web Services etc) • Code Model • All kildekode i applikasjonen • Kildekoden genereres fra PSM-modellen • Skriver forretningslogikk i free blocks i kildekoden Platform Specific Model
Teknologi- Transformasjon Platform Independent Model Systemarkitekter Kode- transformasjon Platform Specific Model Code Model KunnskapsoverføringMed MDA Transformasjoner
Effektivitet og Kvalitet • Modellbasert utvikling og kodegenerering • Håndterer repetitiv kodeimplementering • Teknisk design implementeres i kodegeneratoren • Generering bør ha sitt opphav i modeller • Vårt valg : Utviklingsmiljøet OptimalJ (basert på MDA) • Utviklet egen kodegenerator i OptimalJ for generering av Swing-klienter • Swing-klientene baserer seg på persistens-funksjonalitet generert fra OptimalJ
Teknologi- Transformasjon (Java) PIM (MOF) Kode- Transformasjon (TPL / Java) PSM (MOF) Code Model Transformasjoner i OptimalJ • Funksjonalitet for å definere egne • transformasjoner • metamodeller • Funksjonalitet for å lage transformasjoner • Eget scriptspråk for kodegenerering – TPL
Utvikling av nye generatorer Tilpasse eksisterende Full fleksibilitet Mer arbeid ved oppgraderinger Tilby hooks (Joinpoints) Som gir mulighet til å utvide eller overstyre Gir god nok fleksibilitet Enklere ved oppgraderinger My 1st Pattern Baseline Pattern Joinpoint A Joinpoint B My 2nd Pattern Kodegenerering i OptimalJ Tilpasning og nyutvikling
Template Pattern Language – TPLCode snippet [GUARD("ValueObject",wDataClass)] [FREE("Imports")] // Place your imports here... [/FREE] public class [UCF(VALUEOBJECTNAME(wDataClass))] extends BasicModel implements DynamicReadOnly{ private boolean changed; private boolean created; public [UCF(VALUEOBJECTNAME(wDataClass))](){ [SUBVALUEOBJECTINIT(wDataClass)] this.changed = false; this.created = false; } public boolean isChanged(){ boolean returnValue = this.changed; [FREE("isChangedPre")] //Your code here [/FREE] [SUBVALUEOBJECTCHANGED(wDataClass)] [FREE("isChangedPost")] //Your code here [/FREE] return returnValue; } [/GUARD]
Teknologi- Transformasjon Platform Independent Model Kode- transformasjon Platform Specific Model Code Model Kodegenerator - Utviklingsprosess • Utvikle referanse-implementasjon • Definere teknisk design • Implementere løsning • Test og verifiser • Utvikle metamodell og kodegenerator • ( Avgjør behov for metainformasjon ) • ( Implementer metamodell ) • Lag kodegenerering med utgangpunkt i kode fra referanseimpl. • Test kodegenerator på referansemodell
Mesans SWING pattern - Asta • Prosjekt • Stort arkiveringssystem (4+ MNOK) • Erstatter eksisterendeløsning for å oppnå mer fleksibilitet mht • Deployment • Funksjonalitet og struktur • Utfordringer • Komplekse datastrukturer • Rikt brukergrensesnitt – bruk av Java / Swing • Løsning • Persistensmodellen modellert som Domenemodell i OptimalJ • Utviklet kodegenerator for Swing i OptimalJ • Baserte Swing GUI på ”Scope” HMVC-implementasjon, og benyttet persistensfunksjonalitet generert fra OptimalJ
Demo Vi bygger en SWING/J2EE-applikasjon
Referanser Mesans kunder på MDA og OptimalJ • AtosOrigin • Dagbladet • Stiftelsen Asta i samarbeid med Riksarkivaren • WesternGeco Mesan benyttes som foredrags- og kursholder • Universitet i Oslo (UiO) • ECOOP • JAAO
- når standardsystemerikke er nok Carl-Olav Løvald Sjefskonsulent, Mesan ASE-post: col@mesan.no www.mesan.no