Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben
|
|
|
- Helena Villadsen
- 10 år siden
- Visninger:
Transkript
1 GoogleAppEngine GoogleAppEnginesomplatform ClausMyglegaardVagnerogJacobvonEyben
2 Abstract CloudcomputingerenteknologidervinderfremidengenerelleITinfrastruktur. SocialemediersåsomLinkedIn,TwitterogFacebookharøgetbehovetfor distribueredeapplikationerogdatacentre. StorevirksomhedersomGoogleogAmazonharåbnetopforatudefrakommende kanbenyttederescloudcomputinginfrastruktur. RapportenfokuserepåudviklingafJavaapplikationerpåGoogleAppEngine. Ligeledesserdenpåomudviklingietcloudcomputingmiljøkræverenanden tilgangtilarkitekturen,setiforholdtiltraditionellehostedeapplikationer. Dererudvikletenonlinenetbutiksomdanneretpraktiskerfaringsgrundlagtil underbyggelseafvoreskonklusioner.ligeledeserderpådetteoretiskeplan, perspektiveretiforholdtilfølgendealternativer:amazonec2,stax,aptana CloudConnectogegenhosting. RapportenviserhvaddertekniskskaltilforatudvikleenapplikationpåGoogle AppEngine,beståendeafteknologistakken:Wicket,Spring,JPA. Ligeledesviserrapportenatcloudcomputingkræverenandentilgangsvinkeltil specieltpersisteringafdata. GoogleAppEngineerengratisognemplatformatstarteoppå.Platformen skalerernemtogervelegnettilapplikationstypermedspidsbelastningsperioder. Enrækkekritiskebegrænsningeromkringlagerpladsogenøvregrænsepå processeringstidforetrequest,gøratmanbørovervejealternativecloud computingimplementationer.
3 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Indledning Motivation Formål Problemformulering Aspekter Forretningen Platformen Integration Baggrund CloudComputing GoogleAppEngine Prismodelogkvoter BigtableogGAEDatastore Udviklingogafviklingafwebapplikation KendtebegrænsningeriGAE GoogleAppEngineservices Case Valgafteknologier JPA Spring Wicket Caseerfaringer Prismodelogkvoter Administrationogovervågning Backup Portering Versionering Persisteringafdata Transaktionsstyring Adgangtilfilsystemet Fejlsøgning Unittest Sockethåndtering HTTP/HTTPS FTP Webservices AlternativertilGoogleAppEngine AmazonElasticComputerCloud Stax AptanaCloudConnect Egenhosting Opsummering Konklusion Litteraturliste Process AfClausMyglegaardVagnerogJacobvonEyben Side1af44
4 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Indledning Googlelanceredei2008GoogleAppEngine(fremoverbetegnetGAE)oggjorde hermedplatformen,sommangeafderesegneapplikationerbyggerpå, tilgængeligforatandrekunneudnytteden. GAEgivermulighedforgratisatafviklewebapplikationerpåGooglesIT infrastrukturogdenvejigennemmulighedfornemtatskaleresinapplikationtil atkunnehåndteremangesamtidigebrugere. MedGAEtilbyderGoogledogikkebaregodeskaleringsmulighederfor webapplikationer,menenhelstøbtplatformsomskalhjælpeudviklernemed helelivscyklussenforenapplikation.manuploadersinkodetilgooglesom sørgerfor,atafvikleden,atopgradereplatformen,atviselogfiler,ogidethele tagetaltvedligeholdelsesomliggerudoverselveapplikationskoden. Dettebetyder,atmansomudviklerkankoncentreresigomdetatudvikleselve applikationenogikkeominstallation/opsætningafmiljøetdenskalafviklesi. Platformenunderstøttertoprogrammeringssprog.DetfortolkedesprogPython ogdetkompileredesprogjava.tilbeggesprogerderlavetetsoftware DevelopmentKitsomgørdetmuligt,atudviklesinapplikationlokaltfor efterfølgendeatuploadedentilgae.administrationafapplikationenforegår gennemenwebbaseretkonsol. IdennerapportvilviudelukkendefokuserepådendelafGAEderkanafvikle Javawebapplikationer.Viviludvikleenlillenetbutik,somvibenyttersomcase, tilatkommerundtomgaeplatformenogdenvejigennembesvare problemformuleringen. 1.1 Motivation MotivationenbagdetteprojektbyggerpåatundersøgeomGAEkunneværeen muligplatformforfremtidigeapplikationervimåtteudvikle. Hvismanvælgerselvattagesigafheleafviklingsplatformen,kandetvære omstændigtatfådeploy etenwebapplikation.derskalindkøbeshardware, opsættesnetværkoginstalleressoftwareogaltsammenskalløbende vedligeholdes. Etwebhoteludeibyen,medunderstøttelseafJava,erogsåenmulighed,som krævernogetmindreforatkommeigang,mendetvilaltidværeenløsningsom kosterogtypiskikkeskalerernemt. DaGAEløserovenståendeproblemervedgratisattilbydeafviklingafJava webapplikationerietnæstenvedligeholdelsesfritskalerbartmiljø,åbnerdet mulighedersomgørvejenfraidétilrealitetmegetkortere. 1.2 Formål Voresforhåbningogdetviønskeratundersøgeer,hvorvidtGAEkanværemed tilatdrivenyeideergennemafviklingafprototypersommåskeenddakunne udviklesigtilfærdigeapplikationerogstadigforblivepågaeplatformen. AfClausMyglegaardVagnerogJacobvonEyben Side2af44
5 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 VivilhaveafklaretomvimedGAEkanafvikleenapplikationudvikletsomvi ellersvillehavegjortdet,ietmiljømedfuldkontrol.oghvisikkedetkanladesig gøre,hvorstorebegrænsningernesåer. 1.3 Problemformulering MedudgangspunktiGAEsomplatformforenJavawebapplikationvilvi forklare/besvarefølgende: forklarehvilkeprincippermanskalbenytteforatafviklewebapplikationerpå GAE. sammenlignegaemedandrealternativerogudpegedevæsentligefordeleog ulemperiforholdtildisse. beskrivehvordandenunderliggendeimplementationafgaeindvirkerpå programmørensmuligheder. vurdererelevanteforholdomkringafviklingafprogrammerpågae,såsom skalerbarhed,robusthed,sikkerhedogportabilitet. forklarehvordanenjavawebapplikationkanmigreresfragaetiletandet servermiljøinklusivapplikationsdata. 1.4 Aspekter EnvurderingafenplatformsomGAEkansesfraforskelligesider. Viharvalgtatopdelebelysningeni3kategorier: Figur1:AspektersomvivilbrugeianalysenafGAE. Tilhverkategoriharvivalgtenrækkerelevanteaspekterdererværdattagei betragtningnårenplatformskalanalyseres Forretningen Setfraetforretningsmæssigtsynspunkterfølgendeaspekterinteressante. Prismodel HvilkenprismodeltilbyderGAE? Administrationogovervågning Erderhjælptiladministrationafapplikationen? Portering AfClausMyglegaardVagnerogJacobvonEyben Side3af44
6 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Hvilkeudfordringererderiforbindelsemedatportereenapplikation vækfragaeplatformen? Backup Erderdatasikkerhed? Platformen Kiggervipåselveplatformenerderrenttekniskenrækkeinteressanteaspekter derbørkiggespå. Persisteringafdata Hvilkemulighedererderforatfåpersisteretdataoghvordanlaverman forespørgslermoddepersisterededata? Transaktionsstyring Hvilkemulighedererderforatstyretransaktioner? Adgangtilfilsystemet Erdetmuligtatskriveoglæsetilogfrafilsystemet? Fejlsøgning KanmanprofileogdebuggeenGAEdeployetapplikation? Unittest Hvadermulighederneforatafvikleunittest? Versionering Hvilkekraverdertilreleaseafnyeversioner? Integration HerservipåmulighederneforatkommunikeretilogfraenGAEhostet applikation. Sockethåndtering Hvorvidtderkanlavesdirektesocketforbindelsertilogfra applikationen? HTTP/HTTPS HvilkemulighederharmanforatforetageGETogPOSTforbindelserbåde medogudenbrugafssl? FTP ErdetmuligtatbenytteFTPprotokollen? Webservices Kanderforetageswebservicekaldtilogfraapplikationen? 2 Baggrund Ifølgendeafsnitvilvibeskrivehvadcloudcomputingteknologienerogkomme nærmereindpåhvadgaeplatformenbeståraf. 2.1 CloudComputing MedGAEmelderGooglesigpåbanenblandtudbydereafdetsåkaldteCloud Computing.Idetfølgendevilvigiveenkortindsigtihvaddererkarakteristisk vedcloudcomputingogenredegørelsefortermertypiskbrugtomkringemnet. CloudComputing(CC)handleromatfåleveretnogleservicesfraenleverandør overinternettet.detkanværebådeinfrastrukturogsoftware. AfClausMyglegaardVagnerogJacobvonEyben Side4af44
7 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 FølgendeerkarakteristiskforCC(Reese, 2009): Elastisk MedCCskalmanhurtigtkunnefåstilletekstraressourcertilrådighedog ligeledesfrigøreressourcersomikkelængereernødvendige. Udgifter PrisenforCCafregnesefterforbrug.Detgiverenlangtmindreudgifttil indkøbafhardware.nogleafdisseudgifterrykkesdogoveriden efterfølgendeoperationelledelogudgiftenvilafhængeafhvilkenformfor CCderbenyttes.LidtsenerevilvikommeindpåprismodellernefordeCC platformeviharvalgtattageibetragtning. Klienter Enapplikationskalkunnetilgåsuafhængigtaflokalitet.Detvilsige,at manmedenbrowsermedeninternetforbindelseskalkunnenå applikationenoveraltiverden. Pålidelighed Pålidelighedvilværestørreiogmedatmantypiskharredundante lokationermedserveresomallebidragertildensamme cloud. Skalerbarhed SkalerbarhedernogetmansombrugernemtskalkunneskruepåietCC miljø.detkunneentenskeautomatiskellergennemetwebinterfacehvor manefterbehovkanskrueopforressourcer.dettekanværemeget anvendeligtforapplikationersomsvingermegetiantalletafsamtidige brugere. IforbindelsemedCCbliverderoftenævntfleretyperafservices: InfrastrutureasaService IaaS PlatformasaService PaaS SoftwareasaService SaaS AfClausMyglegaardVagnerogJacobvonEyben Side5af44
8 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Følgendefigurviserhvordandisseformeroverlapperhinanden: Figur2:ViserhvordanIaaS,PaasogSaaSoverlapperhinanden. IaaShenvendersigprimærttilnetværksarkitekterogerleverancenafIT infrastruktur.detteskeroftegennemenvirtualiseringsteknologi.manfåraltså ikkeandetendcomputerestillettilrådighedogmanskalselvsørgefor installationafsoftware.nogleudbyderehardoglavetværktøjersomletterdette. Mereunderafsnit4.2. PaaShenvendersigtilapplikationsudviklereogerleverancenafenhelplatform medapi ertilatudvikleapplikationerpå.manhartypiskmindrefleksibilitetend vediaasdamanerunderlagtenprædefineretplatform.derimodkanman udelukkendekoncentreresigomatudviklesinapplikation.gaeerenpaas. SaaShenvendersigtilslutbrugerneogerleverancenafnogetsoftwaresomer hostetgennemcc.eksemplerpådetteergmailoggoogledocs. 2.2 GoogleAppEngine Vivilidetteafsnitbelyseplatformenudfradendokumentationderfindesom GoogleAppEngine.Detvilværedokumentationskrevetomselveplatformen ellerrelateredeemnersomf.eks.bigtable Prismodelogkvoter GAEersomtidligerenævntgratisatkommeigangmed.Googlehardogsatnogle kvoterpåforbrugsomdetkosteratoverskride.manskalaktivtslåtil,gennem administrationen,atmanforventeratskullebetaleforforbrugudoverkvoterne medsinaktuelleapplikation.detbetyder,atmanikkeligepludseligfåren regningfragooglefordimanharoverskrevetenkvote.harmanikkeaktiveret AfClausMyglegaardVagnerogJacobvonEyben Side6af44
9 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 betalingforapplikationenogmanoverskriderenkvotevilderopståenfejlsom viltagesigforskelligtudaltefterhvilkenkvotederoverskrides 1. OverordnetsetkanmanopdeleGAEkvoteri2kategorier: fakturerbarekvoter fastekvoter Defakturerbarekvoterkanforøgesgennembetalinghvorimoddefastekvoter ikkekan,dadeermedtilatsikreatgae,somplatform,kanydeogskaleresom detloves. Enkvoteblivernulstilleténgangidøgnet. Fakturerbarekvoter Defakturerbarekvotererpålagtfølgenderessourcer: Båndbredde CPU Lagerplads E mail NårkvoternefordisseressourceroverskridesharGoogleenprismodelhvor manbetalerfordetmangåroverkvoten. Ressource Kvote Prispr.enhed Enhed Udgåendebåndbredde 1 $0,12 Gigabyte Indgåendebåndbredde 1 $0,10 Gigabyte CPUtid 6,5 $0,10 CPUtimer Lagerplads 1 $0,15 Gigabyteommåneden Sendtee mails 2000 $0,0001 Modtager Tabel1:Kvoterogpriserpåforbrugudoverkvoterne 2 anno12/2009. Mådenhvorpåmanadministrereomkostningerneer,atmanopsætteret dagsbudgetforhvadensapplikationmåbrugeafpenge.gårensapplikationud overkvoternefortilsidstatrammeomkostningsgrænsenvildersomtidligere nævntreturneresenfejlfraapplikationen. Googleharydermerelaveten pr.minutkvote forbådefakturerbaresomikke fakturerbarekvoter.dennekvotesikreapplikationenmodikkeatforbrugeen kvotemegethurtigthvisf.eks.enandenapplikationkørerrovdriftpåenspecifik ressource.eksempelvisfordenindgåendebåndbreddehvorkvotenpr.dager1 gigabyte,såmådermaksimaltkomme56megabyteiminuttet. Fastekvoter Dererressourcer/servicessomGoogleikketilladeratmanbarekøbermereaf. DeenkelteGAEservicessomvibeskriversenerevilallehaveetsætaffaste 1Enmeredetaljeretbeskrivelseafhvilkenfejlsomkommerhvornårerbeskrevether: 2Priseroplystgennemhttp://code.google.com/appengine/docs/billing.html AfClausMyglegaardVagnerogJacobvonEyben Side7af44
10 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 kvotertilknyttet 3.BortsetfraMailservicenhardeandreserviceskvoteraltefter omdeterenbetalendeapplikation. Vivurdereratmangeafdefastekvotererhøjeogvilideflestetilfældevære tilstrækkeligeihvertfaldhvismanharopsatbetalingforsinapplikation.idet øjeblikmanopsætterbetalingøgesdissefasterkvoter.foreksempelkanen gratisapplikationmodtage1,3millionforespørgsleromdagenhvorimoden betalendeapplikationkanmodtage43millioner.kvoterneergenereltmeget højereforbetalendeapplikationer,menmankommerdogogsålangtmedet maksimumpå1,3millionforespørgsleromdagen. Derkanværeforskelligeårsagertil,atmanikkekankøbesigtilmere,meni bundoggrundmådetbyggepå,atgaesomplatformsætternogleydrerammer foralleapplikationernesomermedtilatsikreydeevne,stabilitetog skalerbarhedforheleplatformen BigtableogGAEDatastore BigTable(Fay Chang, 2006)erenproprietærdatabaseudvikletafGoogle.Google benytterselvbigtabletilenrækkeafderesegneapplikationersomf.eks: YouTube,GoogleMaps,GoogleEarthogblogger.com. Databasetype GoogleharunderudviklingenafBigTablehaftfokuspåatdistribueredataud overenlangrækkefysiskemaskiner. DetharværetmedtilatBigTableikkeerenrelationeldatabasesomkendesfra f.eks.oracle,ms SqlogMySql.Dvs.dererikkeernogettraditioneltdatabase skema. Istedeterdataorganiserethierarkisk.Entiteteridatabasengrupperesi træstrukturerhvorhverentiteterennodeiettræ.entræstrukturbetegnessom enentitygroup,hvordenøversteentitetbetegnessomtræetsroot entity. ForskellenimellemBigTableogentraditionelrelationeldatabasekanudtrykkes igennemfølgendelilleeksempel: Ienrelationeldatabasemodelleresforholdetmellemenbogogetkapitelveden en til mangerelation,hvorimoddetibigtablemodeleresvedatenboger forældreentitetentiletkapitelienhierarkiskstruktur. Denmanglendeskemadefinitiongøratconstraintskunkanadministreresi applikationslaget.denneformforløstskemabetegnessoftscheme.etframework somf.eks.javapersistinceapi(jpa) somviharvalgtatbenytteivorescase kanhjælpemedtilathåndteredetteigennemdetsrelationsannoteringer. 3Enoversigtoverallekvoternekanlæsesher: AfClausMyglegaardVagnerogJacobvonEyben Side8af44
11 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 EntityGroup EntiteterbetegnessomværendeisammeEntityGrouphvisdetilhørersamme root entity.heltkonkretvildetsigeatderesnøgleerprefix etdetsamme. Eksemplerpånøglerkansesher: butik(1)/customer("003307f4-bc60-483c-b87d-ddc5738cdbc0") butik(1)/customer("42dba cbe-9ec3-b8707ba7de58") Kodeeksempel1:TonøglerforCustomerentiteterderbeggefigurererunderdensammeroot entityderhedder butik(1). Transaktionshåndtering BigTableindeholderikkeisigselvtransaktionsstyring,mendennesupporter byggetindidetpersistenslagderbenyttespågae somerenudvidelseaf BigTable.ViharvalgtatbetegnepersistenslagetGAEDatastore,mendereri skrivendestundikkemeldtnogetofficieltnavnudfragooglesside.detrygtesat navnetpådettedatastorebetegnesmegastore 4. TransaktionsstyringiGoogleDatastore,kankunforetagesindenforentiteteri sammeentitygroup. QueryLanguage ForespørgslerimodBigTabledatabasenskerigennemGooglesegetquerysprog GQL(GoogleQueryLanguage).GQLerisyntaksmegetligSQLsomkendesfra relationelledatabaser. BigTableharfrastarthaftfokuspåhastighedvedforespørgslerogharderfor committetsigtilatforespørgslerskalererlinærtiforholdtilresultatsættet(ross, 2009).DethargjortatderendnuikkeersupportforjoinsiBigTable,daGoogle ikkeharløstproblemstillingen,atundgåatlaveetkrydsproduktvedjoinafto ellerfleretabeller(ross, 2009) Udviklingogafviklingafwebapplikation GAEplatformenharsupportforkodekompileretmedJava5eller6. ForatkunneafvikleenwebapplikationpåGAEplatformenskalderbenytteset GAESoftwareDevelopmentKit(SDK)dergratiskandownloadesfraGoogle. DeterigennemdenneSDK,atapplikationeruploadestilGAEplatformen. GAESDK etgørdetogsåmuligtatafvikleenapplikationlokaltigennemen stubbetgaeplatform.unittestafklasser,samtdownloadingaflogfilerskerogså igennemdettesdk. MedGAESDK enfølgeretant 5 script,dergørdetnemtatkompilereoguploade applikationertilgaeplatformen.ivoresudviklingharvidogvalgtprimærtat 4IfølgedenneblogkandetværeMegaStorederbenyttes: 5Anteretxmlscriptingsprog,derividudstrækningbrugestilkompileringogautomatisktestaf kode AfClausMyglegaardVagnerogJacobvonEyben Side9af44
12 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 brugeetpluginudvikletafjetbrains 6,derpasserspecifikttilIntellijIDEA,somer denide(udviklingsmiljø)viharvalgtatbenytteunderudviklingenafvorescase. ForatafvikleenwebapplikationpåGAEplatformenskalapplikationen udover densædvanligeweb.xmlfil,ogsåindeholdeenspecielappengine web.xml. Denneappengine web.xmlindeholderspecifikkegaeparametre.deterf.eks. versionenafdensoftwarederuploades,miljøvariablebrugtiapplikationenog omapplikationenunderstøtterssl.indholdetafdenneappengine web.xmlfil fortolkesafgaeplaformennårapplikationenuploades KendtebegrænsningeriGAE ApplikationerpåGAEplatformenhostesiensandbox,forståetpådenmådeaten rækkespecifikkejavaapi erikkekanbenyttespågae.mådengaeharvalgtat implementeredettepåervedatarbejdemedetmodificeretjavaruntime Environment(JRE).DetteJREindeholderenwhitelist 7 afalledeklasserfrajava DevelopmentKit et(jdk)somkanbrugesunderafviklingenafetprogram. PådennemådeharGAEforhindretfølgendeoperationerderallevillebinde afviklingenafenwebapplikationtilenspecifikfysiskmaskineogdermed besværliggøredistribuering: Ingenadgangtilfilsystemet o Skriveoglæsetildiskbinderafviklingentildenfysiskemaskine Ingenoprettelseaftråde o Implementationenafhvorledestrådeafviklesbindersigkraftigttil enspecifikjvm,somigenknyttersigtildenmaskineapplikationen afviklespå. Ingendirektesocketadgang o Direktesocketadgangerento vejskommunikationimellemto netværksadresserogdetviligenbindeapplikationentilenspecifik maskineitidsrummethvordennesocketeråben. VedatforhindreadgangentildissenævntetingbevarerGooglekontrollenover hvordeønskeratafvikleapplikationen. DerernogleandrevæsentligebegrænsningerforapplikationenpåGAE.En forespørgseltilapplikationkanmaksimaltkørei30sekunderhvilketbetyderat hvismanharstoredatamængderellerlaverandentungprocesseringvildenne begrænsningværeenhindring. Ydermeremåetsvarfraapplikationenikkeoverstige10MBoghverenkelt datastoreentitysomgemmeskanikkefyldemereend1mb.1mbgrænsenkan hurtigtbliveoverstegethvismanvilgemmebilleder,pdffileroglign. 6FirmaetbagIDE enintellijidea 7http://code.google.com/appengine/docs/java/jrewhitelist.html AfClausMyglegaardVagnerogJacobvonEyben Side10af44
13 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Kvote Maksimum App.pr.udvikler 10 Tidpr.forespørgsel 30sekunder Filerpr.app httpsvarstørrelse 10MB Entitetstørrelse 1MB Kodestørrelsepr.app. 150MB Tabel2:TabelovernoglefastebegrænsningermedGAE GoogleAppEngineservices GAEtilbyderenrækkeservices,somensapplikationerfritkanbenytte,mensom ogsåermedtilatimødekommeenrækkeafdebegrænsningerderfindespågae platformen.vivilhergennemgådeforskelligeservices. Cronjobs Atmanikkekanoprettetrådegørdetumiddelbartumuligtatforetage asynkroneoperationer.foratimødekommedetteproblem,hargaeudstilletet proprietærtapitilnetopathåndterecronoperationer 8.IgennemdetteAPIer detmuligtatschedulereretjobtilatblivekørtpåfastlagtetidspunkter.deter specieltnyttigtnårf.eks.etopensourceapisomquartz 9 ikkeunderstøttes. TaskQueue IgennemdetteAPIerdetmuligtlæggeopgaverienkø,hvorfradesåvilblive udført.detteapieriskrivendestundstadigunderudviklingogbetegnesderfor ikkestabilt. URLFetching Detersomsagtikkemuligtatoprettedirektesocketstilandremaskinerpå forskelligeporte.mendetermuligtatbenyttejava.net.urlconnectionog relateredeklasser.deerimplementerettilatbenyttegae segenurlfetch 10 service,fornetopatforhindredendirektesocketforbindelse. DetteURLFetchAPIbenyttesogsåtilattilgåHTTPSadresser.DenGoogle specifikkeproxyderbenyttesunderhttp/httpsforbindelsergiverikke mulighedforatauthenticatedenhostderforbindestil.resultateter,atalle certifikateraccepteresinklusivself signedcertificater.dennemangelpå authenticationgørdetumuligtatforhindrehvadderiit terminologierbetegnes man in the middle 11 angreb.denneurlfetchservicegørdetkunmuligtat forbindetilport80og443,somerstandardporteforhttp/httpsforbindelser. Memcache MemcacheerencachederkanbrugespåGAEplatformen.Deterendistribueret 8http://code.google.com/appengine/docs/java/config/cron.html 9http:// scheduler.org/ 10http://code.google.com/appengine/docs/java/urlfetch/overview.html 11Enbetegnelsehvordereren3.partsomlyttermedpåendataudveksling: in the middle_attack AfClausMyglegaardVagnerogJacobvonEyben Side11af44
14 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 hukommelsesbaseretcachesomkanbrugesforandatastore etellerhelterstatte detafhængigtafapplikationen. MemcacheerenimplementationafenJavastandard 12 somgiveretinterfaceder svarertildatastrukturenforetjavamap.detvilsige,atmangennemennøgle kanhenteoggemmeværdierforalleklassersomerserializable. Mail MedGAEplatformenharmanmulighedforatsendeogmodtagee mails. InterfaceterJavaMail(javax.mail).DererikkebehovforatkonfigurereenSMTP server,dadetergivetgennemimplementationenafmailservicen. Nårenapplikationskalmodtageene mailskerdetgennemenforespørgsel initieretafplatformentilapplikation,somsåskalhaveimplementeretnoget kodetilattageimoddisse,somf.eks.enservlet. XMPP EnGAEapplikationkansendeogmodtagechatbeskedertilogfraenhver XMPP 13 kompatibelservice.dettekunneværegoogletalk.indkommende beskederbliverlavetomtilenhttppostmodenbestemturlsomapplikationen kanlaveenservlettilattageimod. Billeder Udviklermanenapplikationsomkræverbilledbehandling,erdettemuligtpå GAE.Derfindesenbilledeservicesomkanhjælpemedf.eks.atskalere,rotere ellerbeskæreetbillede. Mankanogsåsætteflerebilledersammenogkonverteremellemforskellige formater.servicenharenalgoritmesomkanværemedtilatforbedrekvaliteten afbilleder.harmanbehovformetainformationombilledet,såsomhøjdeog breddekandetteogsåladesiggøre. GoogleAccounts EnhverapplikationpåGAEkanbrugeGoogleAccountssomlogin.Viharivores casevalgtatgøredette.nårmanskalloggeindblivermansendtvideretilen loginsidesomikkedirekteerendelafensapplikation.detteskalmanvære opmærksompåmht.applikationsdesignet,dadennesidefølgergooglesstandard logindesign. Nårenbrugererloggetinderderadgangtilmailadressen.Ermanudviklerpåen applikationvilmanværemarkeretsomadministrator.denneadministrator informationerogsåtilgængeligforapplikationenefterbrugerenerloggetind. GoogleAccountsservicenerikkenødvendigatbruge,meneretalternativtilselv atskriveenbrugerhåndtering. 12JSR107(javax.cache) 13ExtensibleMessagingandPresenceProtocol AfClausMyglegaardVagnerogJacobvonEyben Side12af44
15 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Case Dererblevetudvikletenbutikmedbegrænsetfunktionalitetforståetpåden mådeatfokuserrettetmodateksercereapplikationensåledes,atvifårbelystde deleafgaedetkræverforatbesvareproblemformuleringensåfyldestgørende sommuligt. Casenertilgængeligpåfølgendeurl: Netbutikkenvilbeståaftobrugergrænseflader. Admininistrationsgrænseflade Enadministrationsgrænseflade,hvordetermuligtatopretteprodukterderkan sælgesibutikken. Dennegrænsefladevilkræveautorisationforatfåadgangtil. Dererlavetenfiktivordrebehandlerdermedjævnemellemrumvilsøgealle ikkebehandledeordreigennemogbehandledem.ipraksisvildetikkesige andetendatmarkererdemsombehandlet. Offentliggrænseflade Ensidehvorallekanvælgeiblandtdeprodukterderkankøbesibutikken. Dervilværemulighedforatfyldevarerien'indkøbskurv'. ForatgennemføreetkøbskalbrugerenloggeindviaenGoogleAccount.Første gangenbrugerkøbeributikkenskalvedkommendeindtastenogle brugerspecifikkeoplysninger dissevilblivegemttilfremtidigekøb. Selvebetalingenvilbliveudeladtdavibegrænserosfraatintegreremedsikker internetbetaling. Detvilogsåværemuligtatseenlisteoverhistoriskeordre. Følgendefigurviseretkøbs flowibutikken: Figur3:Diagramderviserhvorledesenordregennemføres. AfClausMyglegaardVagnerogJacobvonEyben Side13af44
16 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Valgafteknologier Ivoresvalgafteknologiertiludviklingafcasen,harvilagtvægtpåatbenytte teknologiervivederanerkendteiopensourcemiljøetogsamtidigvilvære seriøsekandidaternårder,ienvirksomhed,skalvælgesteknologiidag. Derudoverharvilagtvægtpåatdeterteknologiervierbekendtmedfravores hverdagsomprofessionellesoftwareudviklere JPA JavaPersistenceAPI(JPA)eretpersistensAPIudvikletafSun. Dennetypeframework ogsåbetegnetobject Relational Mapping(ORM)API gørdetmuligtatmappejavaobjektertilrelationelledatabaser. Normaltnårmanmapperjavaobjekterimodrelationelledatabaserkanman vælgeimellemenrækkeforskelligeimplementationerafjpa,mendagoogle DatastoresomnævntikkeerenrelationeldatabaseerdetkunDatanucleus 14 der endnuharenimplementationafjpaopimodgoogledatastore.datanucleuser implementeretvedatdenskalpostprocessererdenkompileredebytekodefor dejpaannoteredeklasser,indendekanafviklespågae. ForespørgsleriJPAskerigennemJPQL(JavaPersistenceQueryLanguage). DatanucleusimplementationenafJPAsørgerforatoversættedetteJPQLtilGQL somerforespørgselssprogetimodgoogledatastore. Etalternativtvalghavdeværetdetandetpersisteringsframeworkunderstøttet pågaejavadataobjects(jdo).jdotagerikkeudgangspunktienrelationel datastruktur,menerenmeregenerelabstraktionoverpersisteretdata. ViharvalgtatholdefastiJPA,davigernevilleprøveatudvikleenapplikationtil GAE,somviellersvillehavegjortdet,hvorvinormaltvillevælgeJPA Spring Springeretframeworkderharvundetfremisoftwareindustrienikølvandetpå detopgørderharværetmedde tunge EJB2containererogJ2EE.Springbliver afmangebetegnetsomen"lightweightcontainer.enletvægtscontainerder håndtererenrækkecrosscutting concernssåsomf.eks.transaktioner,loggingog authentication/autorization desammetingejb2containerevaretog nubare udenatstillekravomatkodenafviklesietspecifiktcontainermiljø. DerudovertilbyderSpringogsåbegrebetDependencyInjection.Kortfortalt,er dependendcyinjectionenformforinversionofcontrol,hvormådenhvorpåen afhængighedfraenklassetilenandenikkelængereopfyldesvedopslag,men istedet gives (injectes)indviaentenset ermetoderellersomparametretil konstruktørenforjavaklassen.hervedlavesderenløskobling,dadeninject ede klasseførstafgørespåruntimetidspunktet Wicket DerfindeenlangrækkeforskelligewebframeworkspåJavaplatformen.Enstor delafdemestbenyttedeopensourceframeworksderidagbenyttesiindustrien, 14DatanucleuseretJPA1.0kombatibeltframeworktilprocesseringafjavaklasser mappesnedtilbigtabletabeller AfClausMyglegaardVagnerogJacobvonEyben Side14af44
17 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 erhostethoswww.apache.org.viharvalgtatbenyttewicketdaviharerfaring meddettefratidligere. KortfortalterWicketetkomponentbaseretwebframeworkdergiverenren opdelingimellempræsentationslagetogdetlogiskelag. 3.2 Caseerfaringer Udviklingenafdensimplenetbutikviharstilletopsomcase,hargivetenrække erfaringersomviharvalgtatbeskriveienopdelingdersvaretildeaspektervi vilbelysevedgaeplatformen Prismodelogkvoter Prismodellerogkvotererberørtiafsnit2.2.1.Vierivorescaseikkekommet yderligereindpådetteemne. AfClausMyglegaardVagnerogJacobvonEyben Side15af44
18 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Administrationogovervågning GAEkommermedenadministrationskonsolsomstillerforskelligefunktionertil rådighedsomgøradministrationogovervågningnemmere. Administration Billede1:ScreenshotafDashboardfraGAEadministrationskonsollen Viharigennemudviklingenafvorescaseværettopersonersomhverisærhar kunnelæggenyeversionerafapplikationenoppågae.denneadministrationaf hvemsomerudviklerpåapplikationenereteksempelpåhvadmankanstyrefra konsollen.nårdererfrigivetennyversionvildetteogsåfremgåunder Versions skærmbilledethvormanogsåharmulighedforatskifteversionen. LigeledesbliverderogsåvedligeholdtenAdminLogsomviserhvilkenudvikler somhargjorthvad,somf.eks.athavelagtennyversionpå. ManharogsåmulighedforattilgåDatastore etoglaveforespørgsler,menogså opretteogredigeredatastoreentiteter. AfClausMyglegaardVagnerogJacobvonEyben Side16af44
19 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 AfClausMyglegaardVagnerogJacobvonEyben Side17af44 Overvågning GAEovervågningstarterpåforsidenafkonsollen.Herharmanmulighedforatfå diversegraferoverf.eks.forespørgslerpr.sekund,menogsåhvormangegange applikationenharreturneretenfejlpågrundafatenkvoteeroverskredet. MankansehvilkenURIsomindenfordesidste24timerhargenereretflestfejl ogderleveresetøjebliksbilledeafbelastningenpåapplikationen,samthvadder bliverbrugtafcputidfordeforskelligeuris. Dererogsåadgangtillogfiler,somkanpålæggesfiltre.Viharfleregangehaft behovforattilgådisselogfilergennemudviklingenafcasennårviharoplevet problemerpågae,somviikkegjordelokalt. Overvågningengiverselvfølgeligogsåetfuldstændigtoverblikoverforbrugi forholdtilkvoterneforapplikationen Backup DerfindesingenværktøjerellerhjælptilatforetagebackupafdatapåGAE platformen,såbackupermanselvansvarligfor.dadetkunerdenenkelte applikationderkantilgådetgoogledatastoredererallokerettilapplikationen, skalenegenudvikletbackupprocedureogsåkørepåplatformen.skaldette styresafencronmekaniskeskalbackupkunneinitieresafeturlkald Portering Vivilherkommeindpåhvilkemulighederdererforatportereenapplikationtil ogfragae. Porteringafdata Ligesomforbackupafdata,findesderingenværktøjerderkanhjælpemed dette. Deterderforoptilapplikationsudviklerneselvatsørgeforatskriveden nødvendigekodedergørdettemuligt.eksportenskalværemuligatforetage igennemetalmindeligthttprequest,forsomvikommernærmereindpåer detteenesteintegrationsmulighed. Nårdennesoftwareskriveserdetvigtigtatværeopmærksompåbegrænsningen forhvorlængeetrequestertilladtatkørepågae,samtbegrænsningenpå10mb forresultatetpåenforespørgsel(seafsnit2.2.4),dadetkanværeenhindringfor atskrivestørrebatchoperationertileksportafdata. Detmestsandsynligevilleværeatmanerinteresseretiateksporteretilen relationeldatabase.detvillederforværenaturligtatforsøgeateksporteredata direktetilsqlinsertstatements.dadataigoogledatastoreergemthierarkiskog ikkeharetschematilatsikredatakonsistens,såkanopgavenhurtigtvisesig ikkeatværetriviel.ligeledesskalbinærtdataenteneksporteresseparateller base64encode sforatværemuligtateksporterersomtekst. Vedeksporteringtilenrelationeldatabasevilledetværenaturligtfremoverat gørebrugafenrelationeldatabasesmulighederforatgenererid erautomatisk. IdkonverteringfraGoogle skeyformat,derrepræsentererenhierarkisk struktur,tilintegerbaseretid,erderforhellerikkehelttriviel.
20 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Ateksportererdirektetilsqlinsertstatementsermåskeikkedenoptimale løsning.eneksporttilf.eks.xmlellerjsonkanogsåværeenløsning,daman derigennemikkeharlagtsigfastpåetdestinationsformat.omvendtskalder skrivesenparserimodtagerenden,derkanforståudvekslingsformatet. Porteringafapplikationen Somudviklerbindermanuundgåeligtapplikationenoppåenrækkeproprietære API er,derskaltagesibetragtningvedmigreringafenapplikation.detværesig tilsigtetsomnårvif.eks.vælgeratgørebrugafgoogleaccountlogin,menogså utilsigtet,nårvi tvinges tilatbrugekeyfactoryogkeyobjektetsomnøglefor ensentiteter,ibestræbelsenpåatsikretransaktionsstyringpåtværsafalle entiteter(seafsnit3.2.7). HvortætbundetenapplikationerpåGoogleAPI erermegetindividuel,men voreserfaringfortælleratjolængereenapplikationhareksisteretpåengiven platform,jostørreersandsynlighedenforatdererdeleafapplikationender benytterproprietæreapi er. DetypiskeeksemplereratenapplikationbenytterdatabasespecifikkeSQL statements,ellercontainerspecifikkej2eefeatures. Vierderforoverbevistom,athvismanikkedesignermedenfremtidigmigrering itankernefrastart,vilapplikationenpåsigtblivetætbundettilplatformen, hvorforenporteringikkevilværetriviel. ViharkonkretkiggetpåhvormegetvorescaseharbenyttetproprietæreAPI er ogkanse,atviharbundetapplikationeniforbindelsemedfølgende: IdgenereringerbundettilKeyFactoryogKeyklasserne. GoogleAccountloginsomnøgletilkundedata,samttilbeskyttelseaf administrativesider(kræveradministrationsrettigheder) UnittestsætteretspecieltGAEmiljøop. VibenytterGoogleCron.Vedenmigreringvilviskulleimplementereen lignendefunktionalitetpådennyeplatform. VoresperfomancemålingerbenytterGoogle sdelegateapi Versionering IadministrationsværktøjetderstillestilrådighedpåGAEplatformenerdetnemt atstyrehvilkenversionafenapplikationderskalværetilgængeligpådomænet. Opgraderingafselvesoftware enerderforennemoperation.ennyversion skrivesindiappengine web.xmlognårapplikationeneruploadettilgae platformen,kandennyeversionvælgesfraadministrationskonsollen. Anderledesforholderdetsigforselvedatagrundlaget. Nårenapplikationstadigerunderudviklingogendnuikkeoffentliggjort,er datagrundlagetofteikkeetessentieltproblem.detersandsynligvisiordenat manfratidtilandensletteraltdataforigenatindlæsetestdata. Nårenapplikationertagetibrugerdatakerneniapplikationenogdatabliver pludseligtetcentraltbegrebvedreleaseafnyeversioner.detersandsynligtat ennyversionafapplikationenpåettidspunktbærernyedatastrukturermedsig. AfClausMyglegaardVagnerogJacobvonEyben Side18af44
21 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Dvs.mansomudviklereransvarligforatmigreredatagrundlagetoppåetniveau derunderstøtterdennyekode. IenrelationeldatabasevilleenopgraderingindbefatteenrækkeSQLupdateog alterstatements. AnderledeserdetpåGAE.HererderfordetførsteikkedirekteadgangtilGoogle Datastore,såaltopgraderingskalskeindefraselveapplikationskoden.Fordet andetsåerdatagemtigoogledatastore,derikkeindeholderetschemaderkan hjælpemedatsikredatakonsistens. Ligeledesskalenevt.rollbackhåndteres100%iapplikationslagetpåsammevis somenopgradering. Enløsningpådetteversioneringsproblemkanværeatimplementere applikationskodetilathåndtererdetteienstatiskinitialiserienklassevimed sikkerhedvedvilbliveinstansieret.detkunneværeietfilterallerequest passerer påsammevissomvihargjortmedvoresperformancemåling(se afsnit3.2.9) Persisteringafdata Vorescasebyggerpåfølgendesimpledatamodel: Figur4:Klassediagramovermodellen. CustomerkanhavenultilmangeOrdre. OrdrekendersinCustomerogkanhavenultilmangeprodukter. Productkenderikketilhvilkeordredetindgåi. IJPAudtrykkesrelationerimellementitetervha.JavaAnnotations. AfClausMyglegaardVagnerogJacobvonEyben Side19af44
22 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 NedenforervisthvorledesenJPAmappingforvoresmodel,overen relationeldatabasevilleseud,oghvorledesdenserudnårdatamodellener mappetimodgoogledatastore: AfClausMyglegaardVagnerogJacobvonEyben Side20af44
23 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 JPA public class Customer extends { private Long id; private List<Order> orders = new public Long getid() { return = FetchType.LAZY, mappedby = "customer") public List<Order> getorders() { return public class Order extends { private Long id; private Customer customer; private List<Product> products = new public Long getid() { return = FetchType.LAZY) public Customer getcustomer() { return = FetchType.LAZY) public List<Product> getproducts() { return products; Kodeeksempel2:ViserhvorledesrelationerneimellemCustomer,OrderogProductvilleværemappetimoden relationeldatabase. AfClausMyglegaardVagnerogJacobvonEyben Side21af44
24 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 JPA public class Customer extends { private Key key; private List<Order> orders = = GenerationType.IDENTITY) public Key getkey() { return = FetchType.EAGER, mappedby = "customer") public List<Order> getorders() { return public class Order extends { private Key key; private Customer customer; private List<Product> products = = GenerationType.IDENTITY) public Key getkey() { return = FetchType.EAGER) public Customer getcustomer() { return = FetchType.EAGER) public List<Key> getproductkeys() { return productkeys; Kodeeksempel3:ViserhvorledesrelationerneimellemCustomer,OrderogProductermappetimodGoogle Datastore. AfClausMyglegaardVagnerogJacobvonEyben Side22af44
25 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Generellebetragtninger Fordenrelationellemapningharviudeladtdenannotationderfortæller hvorledesid etgenereres,davalgetafannotationvilværeafgjortafden underliggenderelationelledatabase.samtidigharvivalgtatbrugegoogleskey klassesomidforvoresentiteter.årsagentildettekommerviindpåiafsnit3.2.7 omhandlendetransaktioner. Customer Orderrelationen MapningenimellemCustomerogOrderbetegnessomenownedone to many relation.dvs.orderkanikkeeksistererudenencustomer.dennetypemapning erfintunderstøttetafgoogledatastoreogmådenhvorpårelationenermappet adskillersigudelukkendepåmådenvifetch erdatapå.detterelaterersigtil transaktionsgrænsersomvikommerindpåsenere. Order Productrelationen MapningenimellemOrderogProductbetegnessomenunownedone to many relation.dvs.atbådeorderogproductkaneksistererudenatværetilknyttettil hinanden. MådenhvorpåOrderogProductrelationernemappes,afvigerenheldelpå GoogleDatastore,iforholdtilhvorledesdenvilleværemappetimoden relationeldatabase. JPAimplementeringerimodrelationelledatabaservilhjælpeapplikationslaget medatvedligeholderelationenimellemdissetoentiteter.f.eks.itilfældeafatet Productslettes,vilreferencenfraOrdreautomatiskblivefjernet. VedligeholdelsenafenrelationafdennetypepåGAEerderimod100%henlagt tilapplikationslaget. DetskyldesatDatanucleusimplementationenimodGoogleDatastoreikke supportererunownedrelationerafnogenart. GAEmapningenfraOrdertilProducterderfornødttilatbaserersigpånøglerne fraproductogikkeproductobjektetisigselv.detefterladerossamtidigtmed ansvaretforatfåfjernetnøglereferencertilevt.productentiteterderslettes. DereringenconstraintsidatalagetderforhindreOrderiatindeholdeennøgle tilenproductentitetderikkelængereeksisterer. EnafdeheltstorefordelevedatbrugeetORMframeworksomf.eks.JPA forsvindervedatunownedrelationerikkeerunderstøttet. AfClausMyglegaardVagnerogJacobvonEyben Side23af44
26 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 QueringimodGoogleDatastore SomnævnttidligeresåskalforespørgsleriJPAskrivesiJPQL.Googleoplyser selv,atdererenbegrænsningvedatjoinqueriesikkeerunderstøttetatgoogle Datastore(Ross, 2009).Viharunderudviklingenafvorescasefundetandre begrænsingerderrelaterersigtilgoogledatastoresomikkeernævnti dokumentationen. GoogleDatastoresupportererikke <> operatoren(forskelligfra).detfandtvi udaf,davivilleskriveenquerytilatfindeordrederendnuikkeerprocesseret. Vivilleskriveengenerelqueryderkunnefindeordrederikkevarienmængde aftilstande: Problem with query <SELECT FROM Order o WHERE o.state NOT IN (:states)>: App Engine datastore does not support operator <> Efterfølgendeforsøgteviatændredentilatfindeordreienspecifikmængdeaf tilstande,iforsøgetpåatundgå <> operatoren.detgavfølgenderesultat: Problem with query <SELECT FROM Order o WHERE o.state IN (:states) Collection parameters are only supported when filtering on primary key. SomsvaretfortællerunderstøtterGoogleDatastoreikkemængdeparametre medmindrevioperererpåprimærnøglen. Pga.følgendebegrænsningerharviivorescasevalgtatiterereigennemalle Ordreogiapplikationenafgøreihvilkentilstanddenneordrebefindersigi. Langtfraperformanceoptimalt Transaktionsstyring Foratsikredatakonsistensitilfældeaffejlsituationer,benytterstransaktionertil atstyrehvilkeoperationerderkrævesentenheltgennemførtellerheltrullet tilbage.oftestvilderværeetbehovforentransaktionnårmanopdatererflere entiteterisammeoperation. Viharogsåeksperimenteretmedtransaktioneriforbindelsemedvorescasefor atfåfastlagthvadderskaltilforatafvikletransaktionelleoperationerpågae. Foratkunneafvikleoperationerpåflereentiteterientransaktion,skal entiteternetilhøresammeentitygroup.hvismanladergaeautomatisktildele nøglertilentiteternårdepersisteres,vilentiteterautomatiskblivegrupperetpå baggrundafhvilkerelationerdehartilhinanden. IvorescasevildetbetydeathverCustomervilværeenroot entitymed underliggendeordre.detskyldes,atingenandreentiteterejercustomer. LigeledesvilhverenkeltProductværeenroot entity,daingenejerrelationentil Product.OrdrerefereregodtnokenlisteafProduct s,mendeterienunowned relation. AfClausMyglegaardVagnerogJacobvonEyben Side24af44
27 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Eteksempelfravorescase:Hvismanforsøgeratlave5entitiesaftypenProduct isammetransaktionogselvladegaetildeleid ertilhverenkeltentity,vilder opståenfejlfordimanikkekanopererepåforskelligeentitygrupperisamme transaktion.dennesituationerudtryktgennemfølgendetestmetodetagetfra vorescase(indenviændredemådenhvorpåvitildelerid ertilentiteter): public void testthatmultipleproductscannotbecreatedinsametransaction() { shopservice.createmultipleproductsintransaction(5); Fra public void createmultipleproductsintransaction(int numberofproducts) { for (int i = 1; i <= numberofproducts; i++) { createrandomproduct(i); Kodeeksempel4:MetodekaldpåshopServicesomlaver5nyeproduktergiverfejlhvisafvikletientransaktion. TestenforventeratderbliverkastetenException. Fejlbeskedensomkommertilbagebeskriverproblemet: can'toperateon multipleentitygroupsinasingletransaction. Tilsvarendeharvilavetentestsomopretterflereprodukter,mendennegang ikkeientransaktion. Fra public void testthatmultipleproductscanbecreatedwhennotrunningintransaction(){ shopservice.createmultipleproductsintransaction(5); Fra = Propagation.NEVER) public void createmultipleproductsnotransaction(int numberofproducts) { for (int i = 1; i <= numberofproducts; i++) { createrandomproduct(i); Kodeeksempel5:MetodekaldpåshopServicesomlaver5produkterikkeafvikletientransaktion. AfClausMyglegaardVagnerogJacobvonEyben Side25af44
28 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 ÉnsamletEntityGroup Enløsningpåovenståendeproblemstillinger,atsikre,atalleentitetertilhører sammeentitygroup.detkræver,atviselvtildelernøglertilvoresentiteternår deoprettes. Deterdenneløsningviivorescaseharvalgtatfølge. DertilharvilavetenKeyGeneratorsomeristandtilatgenererernøglertildet derellersvilleblivetilrootentitiesivoresapplikation: Fra KeyGenerator.java: public class KeyGenerator { private static final String GLOBAL_PARENT = "butik"; public static Key generateproductkey() { KeyFactory.Builder keybuilder = gerootkeybuilder(); keybuilder.addchild(product.class.getsimplename(), UUID.randomUUID().toString()); return keybuilder.getkey(); private static KeyFactory.Builder gerootkeybuilder() { return new KeyFactory.Builder(GLOBAL_PARENT, 1); Kodeeksempel6:ViserhvorledesviselvgenererernøglentilProductentitetenforatsikreatdenlanderi EntityGroup enprefiks et/butik(1). HvadhardettesåafbetydningforapplikationerpåGAE?Detvilværeforskelligt fraapplikationtilapplikationommankanlevemedalternativeløsningersom entenatopretteentitiesihversintransaktionellermåskeinogletilfældehelt droppeatbrugeentransaktion,mendetvilværepåbekostningafatmanselv skal ryddeop idataitilfældeafenfejlhvilketutvivlsomtgivermerekodesom skalskrivesogigenstørrerisikoforfejl. EagerFetchafentiteter MangewebapplikationerderidagbenyttersigafORMframeworkskombinerer dettemedetpatternderbetegnesopenentitymanagerinview 15.Deteret patterndergørdetmuligt,atmarkererelationermedfetchtype.lazy,og dermedkunhenterelationernefrapersistenslagetnårdennerelationerkrævet. Følgendefigurviserenentitetslivscyklusderunderstøtterbrugaf OpenEntityManagerInView.Detvigtigeer,atdenførstbliverdetachedidet EntityManagerenlukkesogikkesåsnartentransaktioncommittes. 15EtpatternhvorEntityManager enåbnesiview et(typiskietservletfilter),hvilketgørdet muligtatlazyload erelationerpåethvilketsomhelsttidspunktietwebrequest.dervilblot blivelavetennyforbindelsetilpersistenslaget. AfClausMyglegaardVagnerogJacobvonEyben Side26af44
29 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Figur5:Visereniteterslivscyklusidatanucleus2.x,hvilketmuliggøreOpenEntityManagerInView. Kilde: Somdetsesunderafsnit3.2.6ompersistering,såharvivalgtateagerfetch ealle voresrelationer.dvs.atrelateredeobjektervilblivehentetfrapersistenslagetså snartenentitethentesop.ipraksisbetyderdetathelerelationsgrafenhentes hvergangvihenterenpersisteretentitet. Detskyldesatdatanucleusversion1,dererbundletmedGAESDK ethar afgrænsetenentitetslivscyklusindenforentransaktion.sefølgendefigur. Figur6:ViserentiteterslivscyklusunderDatanucleus1.x.Dennelivscyklusumuliggøre OpenEntityManagerInView. Kilde: Forstoredatamængdererdetteikkeenløsningderkangodtages. AlternativtkanderbenyttesDataTransferObject s(dto)derfuldtinitialiseres indendettereturnerestilbrugergrænsefladen.disseobjekterkanmodeleres specifikttiletbrugsmønsterogdermedkunindeholdederelationerderskal brugesindenfordetenkelterequestogikkedenfuldedomænemodel. BrugafDTO ervilkunnegivefuldkontroloverhvilkerelationerderhentes hvornår.omvendtskydesderetekstralagind,dermanueltskalsynkroniseres meddomænemodellenefterhåndensomdenudviklersig. Etlagderdesværrealeneeksistererpga.tekniskebegrænsninger. AfClausMyglegaardVagnerogJacobvonEyben Side27af44
30 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Adgangtilfilsystemet Googleharpåforhånddokumenteret,atderikkevilværeadgangtilfilsystemet. Selvomviikkedirekteharforsøgtatgørebrugafdette,vistedetsigatWicket somudgangspunktvilserialiserebrugerenssessiontildisk.viharderformåtte protected ISessionStore newsessionstore() { //default second level session store uses java.io.file return new HttpSessionStore(this); Kodeeksempel7:ViserhvorledesdetvarnødvendigtkonfigurereWickettilatbrugeetsessionstorefremfordefault filestore. Detharikkeværetmuligtatfindeudafhvormegethukommelsemanhar tilgængeligtforenapplikation,såhvaddettereeltharafbetydningersværtat svarepå Fejlsøgning Underudviklingenafvorescaseharvi,somvedudviklingenafalleandretyper applikationer,haftbehovforatfejlsøgeapplikationen.medgaesdk etfølgeren såkaldtdevappserversomerenserverderemulererproduktionsmiljøet.deter entilrettetjetty 16 serverhvordererdeployetlokaleimplementationerafgae services.detvilsige,atderlokalteretdatastoresomgemmerpådiskenogen UrlFetchservicesombrugerenHttpClient 17 implementation.enbegrænsningi detlokalemiljøeratdenikkeoverholdergaewhitelistingafklasser.dethar væretsværtatemulerelokalt(schwarz & Reyelts, 2009). DaviinitieltkonfigureredeapplikationenmedSpring(seafsnit3.1.2)villevi gernebrugespringskomponentskannertilatkunneforetagedependency injectiongennem@autowire 18 annoteringen.detvarikkemuligtdasprings internekodegjordebrugafklassennamingexceptionsomikkeerwhitelistet. Dettefandtviførstudaf,davilagdeapplikationenoppåGAEogvarså efterfølgendenødtilatkonfigurerespringpåenalternativmåde. MedDevAppServerenharviudenproblemerkunnedebuggevoresapplikation lokaltgennemvoreside.ligeledeshvadangårprofilingerdetteikkeanderledes medgaeendmedandrejavawebapplikationer.mankunnebenytteværktøjet JConsolesomkommermedJavadistributionenogforbindetilJVM enfor DevAppServeren. 16JettyerenServletwebcontainer( 17HttpClientkanleverestandardhttpfunktionalitet( 3.x/) 18Med@AutowireslippermanforatsættesinebeansopiSpringsxmlkonfiguration.Spring skannerefterklasserogsørgerselvforatwiredetsammen. AfClausMyglegaardVagnerogJacobvonEyben Side28af44
31 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Billede2:EksempelpåbrugafJConsoletilovervågning/profilingafenlokalGAEapplikation. HvadangårfejlsøgningpåGAEplatformenerdettenogetanderledes.Dukan ikkelaveremotedebuggnigmodgae,dadeteretdistribueretmiljømedflere JVM er.detvilsige,atmaniteorienkankørepåforskelligejvm erforhver forespørgselmanlavertilapplikationen,hvilketgøratmanikkevedhvilkenjvm manskalforbindetil.ydermeretilladergaeikkesocketforbindelser. Manermereoverladttilsigselvhvadangårfejlsøgningiproduktionsmiljøet indenforrammerneafplatformen.doggivergaeigennemnogleapi er, mulighedforatkodenogetmanuelprofilingmodgaeservices. AfClausMyglegaardVagnerogJacobvonEyben Side29af44
32 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 ViharivorescaseforsøgtatetablereprofilingvedbrugafApiProxyAPI et Googlestillertiltilrådighed.DetteAPIkanviderestilleGAEAPIkaldtilen registreretdelegate.viharlavetendelegatesommålerhvorlangtidet metodekaldforengivengaeservicetager. public class ProfilingDelegate implements Delegate { public byte[] makesynccall(environment env, String pkg, String method, byte[] request) { long start = now(); byte[] result = parent.makesynccall(env, pkg, method, request); long duration = now() - start; logger.info(pkg + "." + method + ": " + duration); profilingservice.addinvocation(pkg + "." + method, duration); return result; Kodeeksempel8:ProfilingDelegatesommålerGAEAPIkald. ForatregistreredennedelegateharvilavetetServletFiltertilformålet. public class ProfileDelegateFilter implements Filter { static { ProfilingDelegate profilingdelegate = new ProfilingDelegate(ApiProxy.getDelegate()); ApiProxy.setDelegate(profilingDelegate); Kodeeksempel9:FiltersomregistrereProfilingDelegategennemApiProxyklassen. AfClausMyglegaardVagnerogJacobvonEyben Side30af44
33 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 MeddennedelegatekanviindsamleinformationgennemProfilingServiceog præsenteredetpåwicketsidenprofilingpage. Billede3:ScreenshotfraProfilingPagehvorGAEAPIkaldmålingernefremgår.Tiderneeri nanosekender. DettegiverkuninformationomGAEAPIkaldogvilmanhaveflere informationeromhvadapplikationenlaver,måmankodedetselvevt.gennemet frameworksomkanafviklespågae. Viharanalyseretnogleflowsivorescaseogharkiggetpåtallenehvilketikkehar givetanledningtilnogetusædvanligt.dogharvikonstateret,atapplikationen interntgørbrugafmemcacheapi etgennemkaldtilmemcache.getog memcache.put,dadetikkeerkaldvidirekteselvforetager.mankunneoverveje omdegentagendekaldtiluser.createlogouturlernødvendigt,menvisnakker omsmåogeftervoresvurderingubetydeligeoptimeringer,nårmankiggerpå forbrugttid. AfClausMyglegaardVagnerogJacobvonEyben Side31af44
34 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Unittest Vihariforrigeafsnitbeskrevethvordanmankanafviklesinapplikationlokalt gennemdevappserveren,somstilleretlokaltmiljøtilrådighed.medunittesting ervinødtilselvatsættemiljøetop.detteharvigjortvedatlaveen TestEnvironmentklassesomimplementereinterfacetApiProxy.Environmentfra GAESDK en. DenneimplementationafmiljøetskalsættesopgennemklassenApiProxy,der fungerersomenproxytilgaeapi erne.detteergjortientestklassesomandre = {"/applicationcontext.xml") public class LocalDatastoreTestCase extends AbstractJUnit4SpringContextTests public void setup() throws Exception { ApiProxy.setEnvironmentForCurrentThread(new TestEnvironment()); ApiProxy.setDelegate(new ApiProxyLocalImpl(new File(".")) {); Kodeeksempel10:LocalDatastoreTestCasesomandretestklasserkanarvefra. Ligeledesbliverdersatenlokalimplementation,afApiProxy en,somgemmer datapådisken Sockethåndtering Detersomtidligerenævntiafsnit2.2.4,ikkemuligtatoprettedirektesocket forbindelser.vierikkeivorescase,kommetnærmereindpådette HTTP/HTTPS DetermuligtatopretteHTTPogHTTPSforbindelserigennemURLFetchService API et.manerdogunderlagtdebegrænsningerviharbeskrevetiafsnit IvorescaseharvikunsvagtberørtdetteAPIvedatlaveensidehvorvi forespørgerefterforsidenpågoogle,ogviserantalletafbytesderblevhentet. Detskerigennemfølgendeservice: public int fetchcontent(string host, int port) throws IOException { HTTPResponse response = urlfetchservice.fetch(new URL("http", host, port, "/")); if (response.getresponsecode() == 200) { return response.getcontent().length; else { return -1; Kodeeksempel11:EksempelpåbrugafURLFetch. AfClausMyglegaardVagnerogJacobvonEyben Side32af44
35 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret FTP DeterikkemuligtatforetageFTPforbindelser. Derkansomnævntiafsnit2.2.4,ikkelavesdirektesocketforbindelser. DerudoverkanderkunforbindesviaURLFetchServicetilstandardhttpog HTTPSporte(80/443).Detgørdetumuligtatforbindetilenftpserverdersom standardbenytterport21.selvomderblevsatenftpserveroppåport80eller 443,erdetikkemuligtattilgådenne,daGooglesURLFetchServicekun understøtterhttp protokollen Webservices Viharvalgtatskelneimellematudstilleenwebserviceandrekantilgåogat forespørgeeneksisterendewebservice. Udstillewebservices DerfindesenstandardpåJavaplatformenforudstillingafwebserviceskaldet JAX WS.DennestandarderdesværreikkesupporteretpåGAE. HvisviikkebenytterJAX WSvillevinormaltbenytteenopensourceløsning. DetvilværenærliggendeatbenytteSpringWebservice s,nårviiforvejen benytterspringapi et. Ivorescaseharviforsøgtatudstilleenwebservicevedbrugafdetteframework. Desværrebenytterdetteframeworksomdefaultpakkenjavax.xml.soaptil processeringafsoapkald.dennepakkefigurererikkepågoogleswhitelisteover tilladteklasser. DetermuligtatomkonfigureremådenSoapkaldbliverhåndteretsåderistedet benyttesensoapmessagefactoryderikkebrugerdenføromtaltejavax.soap pakke.alternativetvifandt,benytterdesværrefilsystemettilencache. Vilykkedesikkemed,atfåenwebserviceiluftenpåplatformen,menkanseat dereroprettetetissue(issue 1270)iGAEissuetrackingsystemetpåatfåJAX WSstandardensupportetpådenneplatform. Forespørgewebservices Viharikkebyggetenwebserviceklientivorescase. Udfravoreserfaringermedatudstilleenwebservicekanvikonstatereratvalg afklientframeworkskalskenøje,forikkeatrammeenimplementationder benytterenikkewhitelistetpakke,såsomjavax.xml.soapellerjava.net.socket klasser. EnmuligløsningkunneværeatkiggeiretningafAXISderharen SimpleHttpSender 19 implementationderalenebenytterjava.net.urlogikkeen socket. 19https://issues.apache.org/jira/secure/attachment/11827/SimpleHTTPSender.java AfClausMyglegaardVagnerogJacobvonEyben Side33af44
36 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret AlternativertilGoogleAppEngine VivilidetteafsnitkiggepånoglealternativertilGAEsomplatformforafvikling afenjavawebapplikation.derfindesenrækkeløsningersomvilkunne kandideretilatværeattraktiv,mendeterikkeendelafdenneopgaveat sammenligneallealternativermedgae.istedetvilvivælgeetparafdemvi findermestrelevante. Alternativernekanopdelesitohovedkategorier: alternativecloudplatforme egenhosting AlternativecloudplatformevillæggesigtættereopafGAEogvilværemere oplagtealternativeriforholdtilegenhosting.vihardogegenhostingmeddavi serdetsomdendiametralemodsætningiforholdtilatvælgegaesomplatform forensapplikationogfinderderforsammenligningenrelevant. Kriterierneforhvilkealternativecloudplatformederfokuserespåbygger selvfølgeligpåunderstøttelsenafjava,menellerserdetetudplukafhvad markedetpånuværendetidspunkttilbyderaflignendeplatforme. Herenlisteoveralternative cloud platformesomvikiggernærmerepå: AmazonsElasticComputerCloud(EC2) Stax AptanaCloudConnect 4.1 AmazonElasticComputerCloud Iaugust2006introduceredefirmaetAmazon.comtjenestenAmazonElastic ComputeCloud(EC2).EC2erenwebservicesomstillervirtuellecomputeretil rådighedefterbehov.somgaeforsøgerec2athjælpeudvikleremedatfå webapplikationertilskalerenemmerevedatstilleetmiljøtilrådighedhvor forudsætningerneertilstede. Amazon.comleverergennemEC2enservicesomgiveradgangtiludnyttelsenaf deresegenitinfrastruktursomgooglegørdetmedgae.medgaeleverer Googleenhelplatformhvormanbareskalkommemedapplikationenselv.Dette betegnessomplatformasaservice(paas)hvorec2mereerinfrastructureasa Service(IasS)damansomudgangspunktselvskalinstallerealtsoftwarenpå computerenmanfårstillettilrådighed. DetteerdenstørsteforskelmellemGAEogEC2ogdefølgendepointervilsom oftestfaldetilbagepådette.ec2giverstørrekontroloverplatformen,daman selvskalsættedenop,hvorimodgaelevererplatformenoggiverdermed mindrekontrol.senereskalvikiggepåalternativerderbyggerpåec2,menhvor manharprøvetatudfyldehulletoglevereenmerekompletplatform. MedEC2kandufritinstallerepådevirtuellemaskinerogdubetalerefter forbrug.prismodellenforec2byggerpåbetalingpr.timemanbrugerenvirtuel maskine.dubetalerforoppetidenogforlagringsplads.detvilsige,atmanfra AfClausMyglegaardVagnerogJacobvonEyben Side34af44
37 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 detøjeblikmanstarterenvirtuelmaskinevilskullebetalefordentiddener startetogligeledeshvismanønskeratgemmenogetdatamellemopstartskal manogsåbetalefordet.gaelevererfrastart1gblagerpladsgratis. PåEC2skalmansomsagtinstallereoperativsystemet,applikationsserveren, databasenoghvadmanellersskalbrugetilsinapplikation.detvilogsåsige,at manselvskalvedligeholdedetmedopdateringerosv. DogharAmazon.comgjortdetletatkommeigangdadereretudvalgaf prædefineredeinstallationermankanvælgeimellem.detvilsigeatman gennemetkommandolinieværktøjkanvælgeetpassendeami(amazonmachine Image)somf.eks.kunneindeholdeoperativsystem,applikationsserverog database.ligeledesharmanmulighedforatlaveegneami er. MedGAEslippermanforattænkepåvedligeholdafplatformenogkan udelukkendekoncentreresigomapplikationen.omvendterplatformensom sådanudeafenshænder,såskullebehovetopståforf.eks.etwindows operativsystemerdetteikkemuligtmedgae,mendeterdetmedec2. EC2indeholderfeaturessåapplikationerautomatiskkanskalere.Dettebetyder atmanipeaksituationerautomatiskkanfåopstartetflerevirtuellemaskiner. Dogskalmanværeopmærksompå,atønskermanf.eks.atkøreapplikationeni etclusterskalmanselvsørgeforatfådetsatdetop. Denneautoskaleringsmulighedernogetmankøbersigtilsommangørdetved mangeafdeandreservicesec2byderpå. SimpleDBerendatabaseservicemankanbenyttesigaffraenEC2maskine.Det erenikkerelationeldatabaseogeramazon.comssvarpågooglesbigtable.det erendistribueretdatabasesomkananvendeshvismankanklaresigmeden ikkerelationeldatabaseogikkeselvønskeratbrugetidenmedatfåenanden databasetilatskalere. AfClausMyglegaardVagnerogJacobvonEyben Side35af44
38 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Billede4:SammenligningafEC2ogGAEservices. (tagetfrahttp://blogs.zdnet.com/hinchcliffe/?p=166) BilledetovenforviserensammenligningafservicessomEC2ogGAEstillertil rådighed.hermedenopsamlingogenmereskematiskoversigtoverfordeleog ulemperiforholdtilgae. AfClausMyglegaardVagnerogJacobvonEyben Side36af44
39 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Fordele Ulemper Højgradaffleksibilitet.Frit valgafoperativsystem, applikationsserver,database osv. Vedligeholdelseafplatformen såsominstalleringafsikkerheds patchesm.m.skalmanselvstå for. Godmulighedforatflytte applikationen hjem til egenhostinghviskrævet. Kanikkebrugesiengratis udgave.alleserviceskoster noget. Mulighedforatbenytteen Ingendirektesupporterende EC2 relationeldatabase. værktøjertilf.eks.deploymentaf Ingenproprietærkode.Alle applikationen. Javastandarderkanbruges. Ingenadministrations Ingen white list afklasser applikationtilbl.a.atovervåge Mulighedforstartetrådeog logfiler. lavesocketforbindelser Ingenautomatiskversioneringaf applikationen. Behovfor systemadministrationskompetencer Tabel3:FordeleogulempervedEC2iforholdtilGAE. VælgermanEC2somplatformidenreneformudennogetsombyggerovenpå somviskalsepåinæsteafsnit,skalmanværeopmærksompåatmanstadighar behovforkompetencertilatopsætteetservermiljø,hvormanmedgaeikke behøverdissekompetencerivirksomheden. 4.2 Stax Stax leveretafstaxnetworks erbaseretpåec2oglevererenmerekomplet PaaS.StaxforsøgeratløsenogleafdeulempervedEC2somerlistetiforrige afsnit. Staxerstadigibetaogharikkeenprismodelpåplads,mendadetbyggerpåEC2 kommerdetsandsynligvistilatlæggesigopafec2prismodellenhvorman betalerpr.aktivtime.dogmådetblivenogetdyrereendec2dadetilbyder servicessomgørdetendnunemmereatskaleresinapplikation. Nårmanharoprettetenkontokanmanvælgeetudgangspunktforsin applikation.staxnetworksharlavetnogleprædefineredeec2opsætningermed TomcatsomwebserverogmedmulighedforfåenMySQLdatabase.Duhar tilmedmulighedforatfåenapplikationsskabelonudfranoglepopulærejava webframeworkssåsomapachewicketellerapachestruts. Mednoglefåklikermanaltsåoppeatkøremedenapplikationsommankan tilgåpådentildelteurl.dererudvikletetstaxsdksomstillernogle kommandoertilrådighedsåmankandownloadeapplikationenogligeledes uploadeennyversion.dererversioneringpåapplikationen,såmankanse tidligereversioner. AfClausMyglegaardVagnerogJacobvonEyben Side37af44
40 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Ligeledeskanmangennemadministrationskonsollensætteoptil5servere sammenietcluster.detteheltudenathavekendskabtilhvordanmannormalt vilskullegøredettemedtomcatogmysql. DaStaxibundoggrunderenEC2cloudbetyderdetogsåatandreAmazon servicessomf.eks.dereslagerservicesimplestorageservice(s3)ogsåhervil væreoplagtatbruge,dadataikkeskalflyttesmegetrundtpånettet,dadeeri sammeserverpark. Nårmankansætteetclusteropmednoglefåklikmådetogsågiveenmindre gradaffleksibilitet,hvilketdetogsågørmedstax.f.eks.ingensshadgangsom duharmedec2ogaptana,somvikiggerpåinæsteafsnit,dogkanmankomme udenomnogleafgaebegrænsningernehvismangernevilbetaleogikkeharet stortbehovformangecomputereogligeledesikkeharbehovforf.eks.ide support. 4.3 AptanaCloudConnect AptanaCloudConnectbyderpåmereendbareJavasomservice.PHP,Rubyog Pythonerogsåsupporteret.AptanaudmærkersigmedstærkepluginstilEclipse somerstatterwebadministrationenvedgae.tomcaterwebserverenog databasenkanentenværemysqlellerpostgresql. Aptanaerenbetalingsserviceogmanbetalerenfastprisommånedenbaseret påserverkonfigurationenogaltsåikkeforbrug. MedAptanaerderikketaleomendecideretcloudafcomputere.Mankørerpå énvirtuelmaskine,somdoghar8cpu er.stagingmiljøerertilrådighed.secure FTP,SSHogSubversioneraltsammennogetmanfårmeddetsammeman starterogdetmesteafadminstrationenforegårgennemeclipsehvormanbl.a. kanskruepåram,selogfileroguploadeapplikationen. Fordele Ulemper Forskellige applikationsskabelonersom giveretgodtafsætforenny applikation. Kanikkebrugesiengratis udgave.alleserviceskoster noget.dogerdetgratisibeta perioden. Godmulighedforatflytte IngenIDEsupport. applikationen hjem tilegen hostinghviskrævet. Kunmuligtatkøremedoptil5 servereietcluster. Stax Mulighedforatbenytteen relationeldatabase. Ingenproprietæreservicessom f.eks.detatensapplikationkan Ingenproprietærkode,men mankanhvadmankani Tomcatwebserveren modetage ssomhttppost. Ingen white list afklasser Mulighedforstartetrådeog lavesocketforbindelser. Tabel4:FordeleogulempervedStaxiforholdtilGAE. AfClausMyglegaardVagnerogJacobvonEyben Side38af44
41 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 Fordele Ulemper MulighedforSFTP,SSHog Subversion StærkEclipseintegration Godmulighedforatflytte applikationen hjem til egenhostinghviskrævet. Mulighedforatbenytteen relationeldatabase. Ingenproprietærkode, menmankanhvadman kanitomcatwebserveren Ingen white list afklasser Mulighedforstartetråde oglavesocketforbindelser. Apata Cloud Connect Manbetalerikkeforforbrug menfordetathaveenserver. StærkEclipseintegrationkan hindrefrihedentilatvælge IDE. Kunafviklingpåénvirtuel server Ingenproprietæreservices somf.eks.detatens applikationkanmodetage ssomhttppost. Tabel5:FordeleogulempervedAptanaCloudConnectiforholdtilGAE. 4.4 Egenhosting Vedegenhostingstårmanselvforatleverehelestakken.Detteindebærer lokaler,indkøboginstallationafhardwareogsoftware.mankandoglejesigindi ethostingcenterhosudbyderemodenmånedligydelse. Dettegiverenstorfleksibilitetmenerogsåmegettidskrævendehvismanselv skalståfordethele.dertilkommerdenoftestoreløbendeudgifttildriftafeget hostingmiljø.deteraltfrastrømtilpersonale.manbetalerikkeforforbrugmen fordriftogindkøbthardware. Enfordeler,atdataerlokaltellerpåetkendtstedogaltsåikkepåetukendtsted somvedgae.dettekanværenemmereatforklareoverforkunderhvismanhar medfølsomdataatgøre. Skaleringermerekrævende.Dettebådehvadangårplanlægning,kompetenceog ikkemindstudgifter.oplevermanpeakperioderforsinapplikationhvorman skalserviceremangesamtidigebrugerekanhardwarensomunderstøtterdette væredyrathaveståendeideperioderhvorapplikationenikkepeaker. Fordele Ulemper Dataerpåetkendtsted hvorbackupernemt. Hvismanbruger hostingcenteribyenkan manlaveenservicelevel Agreement(SLA)med leverandøren,hvorman denvejigennemkanfå driftsgarantier. Egen hosting Løbendedriftsomkostninger somikkekunbaseresigpå forbrug. Langsomreaktionstidnårder erbehovforatskalereop. Kanværedyrtatleveoptil peakperioder. Tabel6:FordeleogulempervedegenhostingiforholdtilGAE. AfClausMyglegaardVagnerogJacobvonEyben Side39af44
42 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Opsummering Hersesetskemaoveralleaspekteroghvorledesdeforskelligeplatformeopfylderdisse. GoogleAppEngine AmazonEC2 Stax Aptana Egenhosting PrismodelogKvoter Gratisigang. Betalingforudvidetforbrug. Betalingforforbrug Betalingforforbrug Gratisibeta Månedligafgift Opstartogdriftsudgifter Administrationogovervågning Supportviakonsol Ingenhjælpemidler Supportviakonsol SupportviaEclipseplugin Ingenhjælpemidler Portering Egetansvar Egetansvarmenfærre APIbindinger EgetansvarmenfærreAPI bindinger Egetansvarmenfærre APIbindinger Egetansvarmenfærre APIbindinger Backup Egetansvar Egetansvar SnapshotsafMySQLfra administration One click backupsom kandownloades. Egetansvar Persistering Transaktioner HierarkiskDB,delvisORM support Ja,menkræveromtankepga. EntityGroups Fritvalg(evt.SimpleDB) MySQL MySQLellerPostgreSQL Fritvalg Ja Ja Ja Ja AdgangtilFilsystemet Nej Ja Ja,menikkeanbefalet Ja Ja Fejlsøgning Begrænset Ja Begrænset Ja Ja Unittest Ja,isandboxmiljø Ja Ja Ja Ja Versionering Data:Migreringerskalkodes modgaedatastore Applikation:Support. Ingenhjælpemidler Data:MigreringermedSQL Applikation:Support Data:Migreringermed SQL Applikation:Support Ingenhjælpemidler Sockets Nej Ja Ja Ja Ja HTTP/HTTPS Ja(begrænsettilport80/443) Ja Ja Ja Ja FTP Nej Ja Nej Ja Ja Webservices Nej Ja Ja Ja Ja Tabel7:Opsummeringafaspekternepådeforskelligeplatforme. AfClausMyglegaardVagnerogJacobvonEyben Side40af44
43 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Konklusion Voresformålmeddetteprojektharværetatundersøgeomvikunnebruge GoogleAppEngine(GAE)somplatformforJavawebapplikationer.Viville undersøgeomvikunneudvikleenapplikation,somviellersvillehavegjortdet, ogafvikledenpågoogleappengineoghvisviikkekunnedet,hvilke begrænsningerdervaroghvorledesviskullegøretingeneanderledes. Davikomigangmedudviklingenafvorescasekunnevihurtigtkonkludereatvi ikkekanudvikleapplikationer,somviellersvilhavegjortdet,hvisdeskal afviklespågae.deternaturligt,atmanpåflereområderskaltænkeanderledes nårmanafviklersineapplikationerietdistribueretogskalerbartmiljøsomgae. Persisteringafdataskerikkemodenrelationeldatabase,somvitypiskhar arbejdetmed,menmodenhierarkiskdatabase,hvorderikkeeretdatabase skematilatsikredatakonsistens.dennedatakonsistensernogetmanskalkode iapplikationslaget. VivalgteatbrugeframeworketJavaPersistenceAPI(JPA)tilatpersisteredata. DeteretframeworksomerdesignetmodrelationelledatabaserogdaGAEikke hardette,virkerdetikkesometoplagtvalg.etmerenaturligtvalghavdenok væretatbrugejavadataobjects(jdo),somfrastartenikkeerdesignetmod relationelledatabaser,menermereuafhængigafdenunderliggende persistering. Ydermereerdertransaktionsaspektet.Nårmanarbejdermedendistribueret database,hvordataliggermangesteder,vildetværemereomstændigtatafvikle operationeritransaktioner,dadataskalskrivestilflerenoder.supportfor transaktionerpågaekræverbrugafentitygroupshvilketerenanderledes mådeatudviklepåiforholdtilhvadviellersharværetvanttil. Vivilkonkludere,atdetikkeermeningen,atmanskalkunnetageenapplikation, udviklettilatkørepåenenkeltservermodenrelationeldatabase,ogafvikleden pågaehvordensåsamtidigtkanskaleresomgaegivermulighedfor.det sættersitpræg,atmanafviklerietdistribueretmiljøogderforskalmanogså overvejeomdeterdetapplikationenharbrugfor. GAEermedsindistribueredearkitekturspecieltvelegnettilapplikationstyper medspidsbelastningsperioder.eteksempelkunneværeetbilletbookingsystem. Desværreerderenrækkebegrænsningersommanikkekankøbesigudafsom kanværemedtilatdiskvalificereplatformen. Deterikkemuligtatgemmeentiteterderfyldermereend1MB.Ligeledesmåen forespørgselikketagemereend30sekunderogsvaretmåikkefyldemereend 10MB.Detfremgårhellerikkehvadderertilrådighedafhukommelse,så planlægningafdatastrukturerogalgoritmerkanværebegrænsetafdette. ApplikationermedtungdataprocesseringvilderforikkeegnesiggodttilGAE. DetergratisatkommeigangmedGAE,hvilketerenvæsentligforskeliforhold tildealternativeplatforme.ydermerestillergaeenrækkeservicestilrådighed somf.eks.mail,xmppoggoogleaccountloginnogetsomdeandreplatforme AfClausMyglegaardVagnerogJacobvonEyben Side41af44
44 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret2009 ikkeharpassendesvarpå. GAEharomvendtenwhitelistingafklasserforatbeskytteafviklingsmiljøet. Detteharvistsigatsættebegrænsningerforvalgafframeworksder understøttespåplatformenf.eks.iforholdtilbrugafwebservices. GoogleAppEnginevilgodtkunnebrugestilatafprøveprototyper,menmed hensyntilporteringerman,somveddeandreplatforme,overladttilsigselv. HarmanibredtomfangbrugtGAEserviceskandetværesværereatportere applikationenvækhvisbehovetopstår. VisynesatGoogleAppEnginehargjortdetlettere,atfåafvikletsin webapplikationvedatfjerneopgaverfraudviklerne,somikkedirekteharmed udviklingafapplikationskodeatgøre. Deterfortsatenplatformunderudviklingogmedtidenvilderogsåkomme merelitteraturpåområdet,somviharfundetsomenmangelvare. Viharfåetnoglegodeerfaringermeddetatudvikleenapplikationtil skyen, hvilketvimenerbliverenstørredelaffremtidenforsoftwareudvikling. AfClausMyglegaardVagnerogJacobvonEyben Side42af44
45 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Litteraturliste FayChang,J.D.(2006).BigTable:Adistributedstoragesystemforstructured data. Reese,G.(2009).CloudApplicationArchitectures.O'Reilly. Ross,M.(2009).MappingrelationaldatamodelpatternstotheAppEngine Datastore.QCon,(pp.1 41).SanFrancisco. Schwarz,D.,&Reyelts,T.(2009).AppEngine:NowServingJava.GoogleI/O(pp ).SanFrancisco:Google. AfClausMyglegaardVagnerogJacobvonEyben Side43af44
46 GoogleAppEnginesomplatform Vejleder:ArneJohnGlenstrup IT Universitet,Efteråret Process Projekteterudførtaftopersoneriefteråret2009.Projekteterudarbejdet sideløbendemeddedeltagendesfuldtidsarbejde. Fremgangsmåde Frastartenafprojektetlavedevienplanforhvorledesprojektetskulle gennemføres.viopdelteprojektperiodeni2faser: Enempirifase,hvorvivilleindsamlekonkreteerfaringermedGoogleApp Engineplatformen. Rapportskrivningogindsamlingafoplysningeromdealternative platforme. Dvs.efterførstefasesomvarfastsattilatvareenmåned,skullecasenvære færdigudviklet. Heltkonkretvistedenneplansigikkeatbliveførtudilivet. VihavdebehovforatlæseomGoogleAppEngineplatformenførvikunnestarte påimplementeringenafcasen,hvorfordetvarnaturligtforosatskrivede teoretiskeafsnitomgoogleappenginetidligereendplanlagt.ligeledesstartede vitidligtmedatbeskrivedealternativeplatforme.detskyldesaleneatdenne opgavevarmegetafgrænsetogletatarbejdepå. Hvadharvilært Atvihararbejdetpåprojektetsideløbendemedetfuldtidsarbejde,harværet medtilatfastsættenoglerammerderikkeharværetoptimaleforprocessen. Viharikkekunnemødessåoftesomviellersville.Detharmedførtatdeleaf projekteterskrevetenkeltvisogvihartilsidstiforløbetmåttebrugemegettid påatfåindarbejdetensammenhængirapporten. Vikomforsentigangmedcasen,ogdenmanglendekonkreteerfaringgjorde ligeledesatselvekernenirapportenblevudskudt.detgavetunødvendigt pressetprojektforløb. Davibeggeharentekniskbaggrundharselverapportskrivningenværetden størsteudfordring.vimenerselvvierkommetstyrketudafdetteforløbogmed procesmæssigeerfaringervikandragefordelaf,nårvinæstegangskalskrive voresspeciale. AfClausMyglegaardVagnerogJacobvonEyben Side44af44
Tredjepart webservices
Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output
F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank
F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank 03-10-2018 Rune Ibsen Softwareudvikling Seniorkonsulent Mentoring 10 konsulenter F# Programmeringssprog som oversættes til.net Functional-first,
OIOSAML.NET og Umbraco. ved Thomas Ravnholt ravnholt @ silverbullet.dk
OIOSAML.NET og Umbraco ved Thomas Ravnholt ravnholt @ silverbullet.dk Silverbullet, stiftet 2003 Silverbullet A/S IT- rådgivning, projektledelse og implementering Officiel SKI-leverandør Kontorer i Århus
Databaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1
IBM Network Station Manager esuite 1.5 / NSM Integration IBM Network Computer Division tdc - 02/08/99 lotusnsm.prz Page 1 New esuite Settings in NSM The Lotus esuite Workplace administration option is
Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
A Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Det er muligt at chekce følgende opg. i CodeJudge: og
Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.
XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.
Denne guide er oprindeligt udgivet på Eksperten.dk XML parsning i Java Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM. Den forudsætter kendskab til Java og XML.
Hvordan vælger jeg dokumentprofilen?
Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel
Digitaliseringsstyrelsen
NemLog-in 29-05-2018 INTERNAL USE Indholdsfortegnelse 1 NEMLOG-IN-LØSNINGER GØRES SIKRERE... 3 1.1 TJENESTEUDBYDERE SKAL FORBEREDE DERES LØSNINGER... 3 1.2 HVIS LØSNINGEN IKKE FORBEREDES... 3 2 VEJLEDNING
4 sekunder. 20 sekunder. 1-3 timer. 14% hurtigere. 5-6% bagud. 30/70 split. Vejen til succes med Hybrid Cloud v/cso, Poul Bærentsen, Atea
4 sekunder 1-3 timer 20 sekunder 14% hurtigere 5-6% bagud 30/70 split Vejen til succes med Hybrid Cloud v/cso, Poul Bærentsen, Atea Emnerne jeg vil tale om Brændende platforme versus brændende ambitioner
Fra idé til virkelig med Azure Mobile Services
Fra idé til virkelig med Azure Mobile Services Niels Ladegaard Beck Holion [email protected] @nielslbeck Windows Developers in Denmark Azure App Service Mobile App Introduktion til Azure Mobile Services Platform
RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007
RMI med BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 Hvad er RMI? Når man arbejder med Distribuerede Systemer, som igen vil sige at man ønsker at flere end én komputer
University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11
DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void
1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5
INDHOLD 1 Domæne 2 1.1 Design valg.................................... 2 1.1.1 User.................................... 2 2 Klassediagran 5 3 Serbio 7 3.1 Kommunikation..................................
Software Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
SigmaT.
Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt
SWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere
Integrationsmanual Anvendelse af webservice til kursusoversigt i Campus Brugervejledning til udviklere Moderniseringsstyrelsen Webservice manual til udviklere 2016 1 1. Indholdsfortegnelse Nyt kapitel
Webservice kald. System-til-system integration. Ny Easy. ATP 1. februar 2017
Webservice kald System-til-system integration Ny Easy ATP 1. februar 2017 Side 1 of 9 Dokumenthistorik Revisionshistorik Dato for denne revision: 01.02.2017 Dato for næste revision ukendt Revisions Revisions
EDH-dokumenter. - på eksterne hjemmesider der ikke hostes af C&B Systemer
EDH-dokumenter - på eksterne hjemmesider der ikke hostes af C&B Systemer Opbygning EDH-dokumenter For at præsentere EDH dokumenter på en hjemmeside, skal der konstrueres et system til hjemmesiden, der
Integrated Total Facility Management for Real Estate, Infrastructure & Facility Management
Integrated Total Facility Management for Real Estate, Infrastructure & Facility Management Udfordringen Top down Lederskab visioner Buttom up Fakta om Informi GIS 90 medarbejdere Full-size IT hus; salg/rådgivning/
DANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
1.1 Formål Webservicen gør det muligt for eksterne parter, at fremsøge informationer om elevers fravær.
EfterUddannelse.dk FraværService - systemdokumentation BRUGERDOKUMENTATION: WEB-SERVICE Af: Logica Indhold 1. Indledning... 1 1.1 Formål... 1 1.2 Webservice version... 1 1.3 Historik... 1 2. Absence Webservice...
FairSSL Fair priser fair support
Microsoft IIS 6 Certifikat administration Følgende vejledning beskriver hvordan man installere et certifikat på en IIS 6 For support og hjælp til anvendelsen af denne vejledning kan du kontakte FairSSL
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal
Virkefeltsregler i Java
Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter
Singleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
Computer netværk og TCP/IP protokoller. dcomnet 1
Computer netværk og TCP/IP protokoller dcomnet 1 Maskinarkitektur.. fokus på intern organisation af en enkelt computer: dcomnet 2 Computer netværk.. kommunikation mellem maskiner forbindet i et netværk:
Ugeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Tree klassen fra sidste forelæsning
Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years
RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
Database programmerings tips
Denne guide er oprindeligt udgivet på Eksperten.dk Database programmerings tips Denne artikel vil introducere nogle problem stillinger med flere samtidige brugere, som man skal tænke på, når man udvikler
Test af Cloud-baserede løsninger DSTB Ole Chr. Hansen Managing Consultant
Test af Cloud-baserede løsninger DSTB - 2016 Ole Chr. Hansen Managing Consultant Præsentation Ole Chr. Hansen Managing Consultant Fellow SogetiLABS Global Innovation Team Blog - http://ochansen.blogspot.com
Security as a Service hvorfor, hvornår og hvordan. Gorm Mandsberg, [email protected] Aarhus, 13.06.2013
Security as a Service hvorfor, hvornår og hvordan Gorm Mandsberg, [email protected] Aarhus, 13.06.2013 SecaaS hvorfor, hvornår og hvordan hvad Hvorfor.. Hvornår.. Hvordan.. Disclamer: Dubex er MSSP og leverer
Udvikling af DOTNET applikationer til MicroStation i C#
Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt
Model Drevet Design i Praksis
Model Drevet Design i Praksis Dansk IT - På Vej Hjem møde d. 8/9-2009 Jeppe Cramon - TigerTeam ApS Lidt om mig 15 års erfaring som software udvikler Partner i TigerTeam Første erfaring med model drevet
Microservices. Hvad er det og hvordan kommer du i gang?
Microservices Hvad er det og hvordan kommer du i gang? Introduktion til Microservices Softwareudvikling Historie Softwarearkitektur Mentoring 10 konsulenter Bezos befaling All teams will henceforth expose
SKI årsmøde 2017 Outsourcing i praksis Cloud cases. Gorm Priem, 2. marts 2017
SKI årsmøde 2017 Outsourcing i praksis Cloud cases Gorm Priem, 2. marts 2017 Agenda Kort om ProActive Intro til cases it outsourcing med fokus på skyen Greve Kommune Hjemmeværnet Erfaringer Gartner 2016
HVORDAN VI DOWNLOADEDE INTERNETTET. Man skal crawle før man kan gå
HVORDAN VI DOWNLOADEDE INTERNETTET Man skal crawle før man kan gå DAGSORDEN Hvem jeg er Behovet for en crawler Arkitektur Nutch og Hadoop MongoDB Udfordringer Tak for i dag JACOB AVLUND Partner i Siblingsoft
D INTEGRATIONSDESIGN FOR DATAAFTAGERE
DIGST ORKESTRERINGSKOMPONENT D0180 - INTEGRATIONSDESIGN FOR DATAAFTAGERE Version: 1.3 Status: Endelig Godkender: Forfatter: Copyright 2019 Netcompany. Alle rettigheder forbeholdes. Dokumenthistorik Version
Servlets, Tomcat & BlueJ
Servlets, Tomcat & BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 05.october 2007 Hvad er Servlets: For at forstå det, må vi først få styr på to begreber, nemlig statiske og dynamiske hjemmesider
Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer
Opfølgning på Opgave 2 og Use Cases originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University of Denmark Opgaven fortsat Efter
Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)
Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net) Kim Harding Christensen EOS A/S Margrethepladsen 3 8000 Århus TLF: 8732 8787
Grænseflade til afhentning og indberetning af prøvekarakterer i dansk og matematik på Optagelse.dk
Grænseflade til afhentning og indberetning af prøvekarakterer i dansk og matematik på Optagelse.dk Dato 16-09-2015 Version Status 1.0 Gældende Ansvarlig Tobias Thisted Side 2 af 11 Ændringshistorik Version
DOtAB. Teknisk rapport
DOtAB Teknisk rapport Indholdsfortegnelse Introduktion... 1 Systemarkitektur... 1 Teknologier... 1 Platforme for mobile enheder... 1 Kommunikations interfacet... 2 Udviklingsmiljø... 2 IDOtAB (service
Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations
Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University
DSB s egen rejse med ny DSB App. Rubathas Thirumathyam Principal Architect Mobile
DSB s egen rejse med ny DSB App Rubathas Thirumathyam Principal Architect Mobile Marts 2018 AGENDA 1. Ny App? Ny Silo? 2. Kunden => Kunderne i centrum 1 Ny app? Ny silo? 3 Mødetitel Velkommen til Danske
PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;
PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;
Design by Contract. Design and Programming by Contract. Oversigt. Prædikater
Design by Contract Design and Programming by Contract Anne Haxthausen [email protected] Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere
Webserverprogrammering
Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html
PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU
PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION
Dag 10 Flertrådet programmering
Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,
Zapier-integration mellem MailChimp og webcrm hos Azalea IT
Case: Zapier-integration mellem MailChimp og webcrm hos Azalea IT Zapier er en integrationsplatform, hvor man kan forbinde over 1500 apps uden at skrive en eneste bid kode. Du kan se, hvilke apps du kan
Eksempel på en database: studenter, kurser, eksamener
Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser
Konference om Cloud Computing 18. maj 2011. Proof of Concept for transition til Cloud Lars Ravndrup Thomsen, Solutions Architect, KMD
Konference om Cloud Computing 18. maj 2011 Proof of Concept for transition til Cloud Lars Ravndrup Thomsen, Solutions Architect, KMD POC, hvad er det? En søgning på internettet viser, at de fleste sites
En Kort Introduktion til Oracle
En Kort Introduktion til Oracle Henrik Bulskov 12. februar 2001 [email protected] 1 Start SQL*Plus... 1 1.1 TELNET... 1 1.2 WINDOWS SQL PLUS... 2 2 Kør et SQL-script... 3 3 Hjælp i SQL*Plus... 3 4 Editering
FLIS PORTAL GENNEMGANG OG STIKPRØVER (SEPTEMBER 2015)
FLIS PORTAL GENNEMGANG OG STIKPRØVER (SEPTEMBER 2015) INDHOLD 1. FORMÅL OG SCOPE... 1 1.1. TEKNOLOGIER OG RAMMEVÆRKER... 1 2. ARKITEKTUR... 2 2.1. KOMBIT.FLIS.PORTAL... 3 2.2. SCRIPTS... 3 2.3. SHAREPOINT
SAX Simple API for XML.
SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller
Objektorienteret Programmering
Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:
FMK-online's brug af SmartFraming
Side 1 af 9 FMK-online's brug af SmartFraming Version 1.1 2011-11-01 Side 2 af 9 Indholdsfortegnelse Indledning...3 Initialisering og login...3 Kontekst Properties...4 user.id.authorizationid...4 userorganization.id.number...4
Denne installationsvejledning beskriver hvordan man installerer EFI webservices til kommunikation mellem Navision Stat og Skat.
Side 1 af 9 Navision Stat 7.1 ØSY/TJO/CPS/ CRA Dato 31.08.2016 Installationsvejledning til EFI integration Overblik Introduktion Denne installationsvejledning beskriver hvordan man installerer EFI webservices
