g9 Konsepter
Domenekunnskap er viktig for å forstå og vedlikeholde en applikasjon. En domenemodell er et nyttig redskap enten man velger en smidig eller mer tradisjonell utviklingsmodell. Gjennom hele applikasjonens livssyklus oppdateres modellen, og ofte vil dette også medføre kodeendringer.
En domenemodell beskrives ofte som en modell som inneholder informasjon om oppførsel og data. Modellen viser hvilke objekter (entiteter) som inngår i en applikasjon og sammenhenger mellom disse. g9 baserer seg på en modelldrevet tilnærming til programvareutvikling.
Viktige begreper og modeller i g9 er:
- Domenemodell - klassemodell beskrevet i Java, UML eller EMF/Xcore. Modellen synkroniseres inn i g9 og beskriver objekter som inngår i applikasjonen og sammenhenger mellom disse
- Databasemodell - de delene av klassemodellen som beskriver databaselaget (persisteringslaget)
- Objektseleksjon - En delmengde av klassemodellen. Et utvalg av objekter og assosiasjoner/roller som representerer en brukerhistorie/use-case/oppgave og som for eksempel danner grunnlag for et brukergrensesnitt (dialog), en rapport e.l.
- Ressurser og Dialogmal - Elementer som farger, fonter og bilder og standarder for design av brukergrensesnitt (dialoger)
- Dialogmodell - Brukergrensesnitt basert på en objektseleksjon og en dialogmal
Les mer om:
- UML på www.uml.org
- modellering i en smidig utviklingsprosess, SAFe (http://scaledagileframework.com/domain-modeling/)
g9 Modeller
Domenemodell i Enterprise Architect
Enterprise Architect er et omfattende UML analyse- og design verktøy fra Sparx systems. En UML-profil til bruk i EA definerer g9-spesifikke elementer. Modellen importeres til et g9 prosjekt og er grunnlag for generering av applikasjonen under utvikling.
Les mer om modellering i EA: http://www.sparxsystems.com/
Domenemodell i EMF Ecore/Xcore
Eclipse Modeling Framework er et åpent kildekodeprosjekt i regi av Eclipse. Det er et rammeverk for å lage verktøy og applikasjoner basert på en strukturert datamodell. Ecore-formatet er en delmengde av UML klassediagrammet og beskriver objekter, attributter, sammenhenger, operasjoner og begrensninger som gjelder for dette formatet. Modellfilen (*.ecore) kan importeres til et g9-prosjekt og er grunnlag for generering av applikasjonen under utvikling.
Et hvilket som helst verktøy som produserer en modellfil i et standard Ecore-format kan brukes sammen med g9. Det er en fordel å benytte et verktøy hvor man enkelt kan vedlikeholde Ecore-modellen. I Eclipse kan Xcore brukes til å vedlikeholde Ecore-modeller (i en tekstlig representasjon). Xcore er en utvidelse av Ecore-syntaksen.
Les mer om:
- Modellering i Ecore http://www.eclipse.org/modeling/emf/?project=emf
- Xcore http://wiki.eclipse.org/Xcore
Domenemodell i Java
Mange beskriver domenemodellen direkte i Java. g9 kan lese dine klassedefinisjoner og etablere disse som domenemodellen og bruke den for videre modellering og kodegenerering. Javaklassene kan annoteres med JPA og g9 annotasjoner.
Databasemodell
En databasemodell brukes til å definere informasjon som er spesifikk for en database målplattform, f.eks. Oracle eller MySQL. Databasemodellen er basert på persistenslaget som er definert i domenemodellen. Modellen kan brukes til å lage databaseschema og OR-mapping. OR-mapping er nyttig hvis man ønsker å generere CRUD-tjenester. Merk at det er fullt mulig å ta utgangspunkt i en eksisterende databasemodell. Databasemodellen vises i en trestruktur i g9.
Objektseleksjon
Informasjonsmodellen som er grunnlaget for en dialog (skjermbilde), CRUD-tjenester eller webservice kalles en objektseleksjon. Modellen er en delmengde av klassemodellen. Vanligvis er det en objektseleksjon per dialog i en applikasjonen. Objektseleksjonen benyttes både i modellering og som grunnlag for kodegenerering.
Dialogmal og Dialogmodell
En dialogmal inngår i en samling av egenskaper (ressurser) som brukes i design og generering av dialoger.
En dialogmodell beskriver brukergrensesnittkomponenter som er koblet til en objektseleksjons rolleattributter.
Dialogeditoren viser dialogen i en trestruktur og som et GUI. Dialogen kan endres i trestrukturen eller i GUI.
g9 Kodegenerering
Generering av applikasjon
I g9 er det kodegeneratorer som lager Javakode for ulike deler av en applikasjon. Domenegenerator lager Java domeneklasser og eventuelle webspesifikke filer, servicegenerator lager kode for f.eks. CRUD-tjenester, dialoggenerator lager klientkode (f.eks. React, JSF/ICEfaces eller Swing), og databasegenerator lager schema scripts og data-aksess laget som bruker Hibernate til å aksessere databasen.
Implementering av forretningslogikk gjøres i Hooks. Hooks blir aldri overskrevet ved generering/regenerering av kode.
Generatorer
Alle innebyggede generatorer er nærmere beskrevet i generator oversikt.
Dialoggenerator
Dialoggeneratoren lager klientdelen(e) av applikasjonen. Generatoren benytter dialogmodellene med tilhørende objektseleksjoner i generering av Javakode.
Domenegenerator
Domenegeneratoren lager Javakode for blant annet Javaklasser, interfaces og enumeratorer. Domenegeneratoren kan konfigureres og den genererte koden kan skreddersys. Skreddersøm blir ikke overskrevet ved regenerering.
Webservice-generator
benyttes i tjenesteutvikling til å generere
- SOAP/Castor marshalling
- WS Client
- WSDL
- XSD
Objektseleksjon
Objektseleksjonsgeneratoren benyttes til å lage tjenestelaget (Services) i applikasjonen. Dette inkluderer kode for CRUD tjenester.
- CRUD tjenester brukt i dialoger
- SOAP meldinger brukt i Web services
Databasegenerator
Databasegeneratoren inkluderer generering av Hibernate-mapping som mapper domenemodellen til database schema, og eventuelt generering av schema for databaser som støttes i g9 (Derby, MySQL, Oracle, SQL Server og Sybase).
Skreddersy dine egne generatorer
g9 har støtte for utvikling av skreddersydde generatorer. Generatorer kan skrives i Xtend eller i Java. Xtend er en Java dialekt som er tilpasset template programmering og håndtering av tekststrenger. Xtend oversettes til Java kode, men har flere forbedringer sammenliknet med standard Java. Xtend Eclipse plugin gjør det enkelt å programmere i Xtend og den er sømløst integrert med Java.
g9 run-time modul er fri programvare og koden kan tilpasses etter behov.
Les mer om Xtend på http://www.eclipse.org/xtend/
g9 Arkitektur
g9 genererer en flerlagsapplikasjon med følgende komponenter:
- Klient: Swing, React, ICEfaces eller en egenskrevet målplattform
- Objektseleksjon: CRUD (Create, Read,Update, Delete) tjenestelag som benytter POJOs (Plain old Java objects) eller Java EE stateless session beans
- ORM (Object-Relational Mapping) mapping og persistering ved hjelp av Hibernate
- Domenemodell
- Databaselagring (Oracle, Sybase, MS SQL, MySql mm.)
- Eventuell støtte for Web service eller JMS
- Eventuell utskrift av data ved hjelp av Jasper Report eller til eksport til regneark
g9 runtime arkitektur
g9 klientarkitektur har følgende run-time komponenter:
- Domenemodell (Domain model): Javaklasser generert fra g9 eller modelleringsverktøyet
- Brukergrensesnitt (View og Controller): generert Javakode som håndterer opptegning av brukergrensesnitt
- Hendelser (Actions): generert Javakode som håndterer oppførsel i brukergrensesnittet. Denne koden er limet mellom klient og tjenersiden
- Egenskrevet kode (Hooks): her kan man overstyre generert kode og legge til egen kode. NB! Røres ikke ved regenerering
- Proxy (Service proxy og Spring) lag mot serverside CRUD tjenester. Default benyttes Spring
g9 serverside arkitektur
- Domenemodell (Domain model): Javaklasser generert fra g9 eller modelleringsverktøyet
- Grensesnitt mot klientside (Service interface). Velg mellom en POJO implementering (som kjører i samme JVM som klienten), eller EJB, dvs. J2EE stateless beans (tilstandsløs bønne). Spring-konfigurering gjør det enkelt å skifte mellom POJO og EJB
- Generert kode som håndterer CRUD actions serverside (Service)
- Egenskrevet kode (Hooks): kode som overstyrer generert kode, eller kode hvor man legger til ny forretningslogikk
- Persistenslag (Persistence): sørger for at implementeringssdetaljer i persistering skjules for CRUD og Hooks. Implementering av persistens (Hibernate)
- Hibernate (Object-Relational) mapping, generert kode som gjør at Hibernate transporterer (flytter) data mellom databasen og Java domeneobjektene
- Databaseskjema (DB) generert fra g9.
g9 Lisens
g9 runtime
- g9 run-time er gratis programvare, se http://download.esito.no/licenses/g9runtimelicense.html
g9
- g9 kan kjøres uten lisens, men verktøyet har da en begrensninger i antall domeneklasser mm. som kan inngå i et prosjekt.
- g9 prøvelisens er en full lisens som varer i 30 dager, se http://download.esito.no/licenses/g9license.html
- g9 lisens er en full lisens som automatisk fornyes årlig inntil den sies opp, se http://download.esito.no/licenses/g9license.html
For å kunne oppdatere til nyere versjoner av g9 må det finnes en gyldig lisens.
g9 lisensinformasjon finnes i Eclipse > Preferences > g9 > License. Dialogen viser type lisens som er installert og hvordan man kan bestille en lisens.
Ta kontakt med oss på adm@esito.no, hvis du trenger en ny eller en utvidelse av lisens.