510 likes | 671 Views
Java versus .NET. The Heavyweight Championship Showdown Johannes Brodwall - Systek AS. Bakgrunn. Mange spør seg om det er på tide å bytte teknologi Fra Java til .NET Teknologiene er omfattende – mer enn programmeringsspråk Jeg har erfaring fra både Java og .NET prosjekter
E N D
Java versus .NET The Heavyweight Championship Showdown Johannes Brodwall - Systek AS
Bakgrunn • Mange spør seg om det er på tide å bytte teknologi • Fra Java til .NET • Teknologiene er omfattende – mer enn programmeringsspråk • Jeg har erfaring fra både Java og .NET prosjekter • Følgende er mine erfaringer (subjektive, personlige, men virkelige)
Innhold • Teknologisk sammenligning • Feature sammenligning • Service-level faktorer • Ikke-tekniske faktorer • Oppsummering – hva skal vi velge?
I det blå hjørnet: Utfordreren .NET™ • Arvtageren til tungvektere som COM, MTS, ASP! • Fra laboratoriene til den mektigste software organisasjonen i verden • Har vekket enorm interesse • Har utfordreren lært fra sine forgjengeres mangler? • Objektorientert modell • Kraftige biblioteker • Designet for enterpriseapplikasjoner
I det røde hjørnet: Regjerende mester Java • Årevis med etablert robusthet • Tusenvis med vellykkede prosjekter • Hundrevis med industristandarder • Bred industristøtte fra mange aktører • Det mest populære valget i akademiske miljøer • Objektorientert modell • Kraftige biblioteker • Bygget for enterpriseapplikasjoner
Tekniske temaer • Benchmarking • Programmeringsspråk • Arkitektur • Desktop • Mobil • Server • Service-level aspekter • Integrasjon • Portabilitet • Sikkerhet 1. Runde
Status • Java og Windows har hoppet bukk over hverandre gjennom hele 90-tallet • Eks: • Java RMI – DCOM - .NET Remoting • ASP – JSP • MTS – EJB • .NET er Microsoft’s neste hopp – og det er et langt ett! • Java ligger nå litt etter, men mye av forspranget blir tatt igjen ved Java 1.5 (Tiger) – 2004Q2
Benchmarks • Finnes mange benchmarks der ute • Mest kjente er Java Pet Store versus .NET Pet Store • Benchmarks er FUD! • De fleste benchmarks: • Tester kun et fåtall faktorer, og • Kan forbedres vilkårlig med innsats • Forårsaker lange debatter som riktigheten av målingene
Språkmessige forskjeller • Mest aktuelt å sammenligne C# og Java • C# har i tillegg til Java: • Struct og enum-typer • Events, delegators, properties • Operator overloading (fjernet med vilje fra Java) • Attributter (åpner for mye god magi) • Autoboxing • Størst savn fra Java: Anonymous inner classes
Språkforskjeller: Properties • Tilsvarer Java’s getter og setter konvensjon • Men er bygget inn i språket public class MyClass { public string Name { get { return (string)properties[”Name”]; } set { properties[”Name”] = value; } } private Hashtable properties = new Hashtable(); } MyClass obj; obj.Name += ”, Esq.”;
Språkforskjeller: Events • Tilsvarer Java’s observer konvensjon • Men er bygget inn i språket public delegate MyEventHandler(object sender, EventArgs e); public class MyClass { public event MyEventHandler MyEvent; public void FireEvent() { if ( MyEvent != null ) MyEvent(this, new EventArgs()); } public static void Main() { MyClass myObj = new MyClass(); myObj.MyEvent += new MyEventHandler(MyEventHandlerImpl); myObj.FireEvent(); } private static void MyEventHandlerImpl(object sender, EventArgs e) { Console.WriteLine(”In event handler”); } }
Språkforskjeller: Events • Tilsvarer Java’s observer konvensjon • Men er bygget inn i språket public class MyClass extends Observable { public void fireEvent() { notifyObservers(); } public static void Main() { MyClass myObj = new MyClass(); myObj.addObserver(new Observer() { public void update(Observable sender, Object arg) { MyEventHandlerImpl(sender, arg); } }); myObj.fireEvent(); } private static void MyEventHandlerImpl(object sender, object e) { System.out.printLn(”In event handler”); } }
Språkforskjeller: Attributter • Tilsvarer deployment descriptor info • Men er bygget inn i språket • Dekorerer reflection-information med ”metadata” • Forutsetter at et ”mellomlag” behandler attributter • Vi brukte dette til å implementere autorisasjon i web services [Transaction(TransactionOption.Required)] public class Account : ServicedComponent { [AutoComplete] static void Main() {} }
Språkforskjeller – vurdering • Mye nytt i C# er bra, spesielt • Autoboxing • Events, Properties • Attributter • C# er mer kompleks – det var derfor mange forlot C++. • Det viktigste kommer i Java 1.5 (Tiger) – men antageligvis ikke events eller operator overloading • Både neste versjon av C# og Java 1.5 kommer til å ha generics • Motstanderne sirkler rundt hverandre, og begge får inn noen slag, men det er bare oppvarming
Rammeverkene • Introduksjon til n-lags arkitektur • De forskjellige lagene i Java • De forskjellige lagene i .NET • Sammenligning, lag for lag.
Rike klienter Server Web- server Applikasjons server WAP Web Browser N-lags arkitektur Database Rik klient
Enterprise Arkitektur Client Presentation Logic Integration Resource Interaksjon mellom bruker og fysisk system. Web-browser, windows-klient, mobiltelefon Forbereder data for visning i klient. Web-server. Slåes ofte sammen med klient-lag Forretningslogikk. Plassering av logiske regler og transaksjoner Håndtere kommunikasjon mot andre systemer. Inkluderer kommunikasjon mot databaser, mainframes, meldingskøer etc. Database, meldingskø, mainframe Typisk utenfor systemets ansvar
WAP telefon • Java 2 Micro Edition • MIDP Java på én slide! Client Presentation Logic Integration Resource Database JDBC Web browser Servlets/JSP • Enterprise Java Beans: • Stateless session beans • Stateful session beans • Entity beans Web Services client Other systems JMS Message Queue Swing/AWT JCA Mainframe etc Java Web Start
WAP telefon .NET Compact Framework .NET på én slide! Client Presentation Logic Integration Resource Internet explorer ASP.NET Web Forms Database ADO.NET ASP.NET Web Services Web Services Mobile Internet Toolkit Other systems Web Services client COM+ Enterprise Components Message Queue MSMQ Windows Forms Autodeployment
Desktop klienter • .NET har native ”look and feel” • VS.NET gir en grei visuell designer • Javas API’er er overlegne • Eks: JTree versus TreeView • Savner noen klasser i .NET
Mobile klienter • Browser-basert: • Java: Gir ingen ekstra støtte • .NET: Mobile Internet Toolkit = hetrogene klienter • Rike klienter: • Java: MIDP (J2ME) • tilgjengelig på mange telefoner • Ikke veldig kraftig • .NET Compact Framework: • Mye mindre utbredt • Mye kraftigere
ASP.NET versus Servlets • Rammeverk for presentasjon av web sider • ASP.NET: Visuelt design • Introduserer ”event-drevet” web-programmering • Basert på ”taglibs” • Bruker runtime tremodell av HTML dokument ASP.NET starter der JSP slutter
Server-basert • Transaksjoner: Session Beans versus COM+ Components • Begge platformene: • Skalerer • Gir støtte for sikkerhet • Gir transaksjonsstøtte • Java har demonstrert skalerbarhet i en årrekke • .NET krever mindre kode for å gjøre det samme
Integrasjon • Data-aksess: • Java Entity-beans har ikke så bra track-record • ADO.NET har en enklere modell som fungerer bra • Legacy integrasjon: JCA åpner • Meldingsutveksling: MSMQ og JMS • Web-services: .NET har så god støtte at det er det letteste å bygge infrastruktur med!
Alternativer til J2EE og .NET • N-lags for tungt for mange, passer ikke for alle • Java: Open-source rammeverk som Turbine, Prevayler, Hibernate, Struts, XMLC og Naked Objects • Å utvikle sin egen plattform • Amazon – Java basert (obedos) • Google – Linux-basert supercluster • OO-script-språk: Python, Ruby • LAMP
Service-level temaer • Integrasjon • Portabilitet • Sikkerhet • Sytepause
Integrasjon • .NET integrerer veldig bra med native windows C++/C og COM kode (”IJW”-teknologi) • Slår knockout på JNI • .NET har veldig bra Web Services støtte • Java har initiativer for å støtte integrasjon med mainframes, CORBA etc (JCA) • Fungerer bra med verktøy • Migrering fra C/C++ eller COM til .NET
Portabilitet • .NET støtter flere programmeringsspråk • Kun én type språk støttet bra • F# kan endre dette • Java støtter flere plattformer • Blant annet embeddede plattformer • Unntak: • Mono, Rotor • Andre språk for JVM (Jython) • Men: Bør ikke satse prosjektet på disse
Sikkerhet • Java har hatt en sikkerhetsmodell siden 1.1 • Microsoft har hatt dårlig rykte på sikkerhet • Begge tar nå sikkerhet alvorlig: • Microsoft: “Secure Windows Initiative” • Eks. Oracle: “Can’t break it, can’t break in” • Begge støtter: • SSL, RSA, HTTPS, Kodesikkerhet, Rollebasert sikkerhet, etc. etc.
Syting! • .NET kommer ikke med bibliotek for komprimering! • Jeg har fortsatt ikke funnet et godt taglib for Java-utvikling • Hvorfor krever alle Java-IDE’er 1 GB RAM?!? • EJBQL!?!?!? • .NET har ikke anonymous inner classes! • Whassup with that?!?
Oppsummering: Teknisk del • Begge platformene tilbyr det man trenger for enterprise utvikling • Små tekniske forskjeller • .NET et lite forsprang, ettersom det er nyest • Java er mer modent • Viktige forskjeller inkluderer • Portabilitet • Tekniske spørsmål?
Ikke-tekniske aspekter 2. Runde • Cost of ownership • Utviklingskostnader • Runtimekostnader • Opplæringskostnader • Filosofisk betraktning: • Åpen eller lukket verden? • Modenhet
Opplæringskostnader • Å bytte platform er alltid dyrt • Å lære teknologien er rimelig greit • Men å lære å bruke den riktig er tidkrevende • Selv med gode utviklere tar det måneder • Noen som har gått opp stien kan hjelpe • Deltagerne må være motivert til å bytte • Menneskelige faktorer er viktige!
Produktivitet • J2EE er en mer kompleks arkitektur enn .NET • Flere features og muligheter • Men: Kan være tung å kode mot • Skal du bruke J2EE: ha en strategi for kodegenerering • Øker produktivitet • Fremhever konsistens • Forebygger feil
Java’s filosofi • Ikke formelt “standardisert”, • Utviklet gjennom et industrisamarbeid (JCP) • JCP standarder, ”uavhengige” parter leverer verktøy • Andre leverandører har mye innflytelse • Java kontrolleres av IBM, BEA og Oracle mer enn Sun • J2ME satsningen styres av Nokia, Motorola, Samsung, Ericsson, og så videre
Microsofts filosofi • Utviklet ene og alene av Microsoft • Overgitt til EMEA • Produserer standarder + ferdige verktøy • .NET vil alltid være dominert av Microsoft. • Jeg liker å kalle denne filosofien Steintavler-til-Moses-standardisering
Filosofi og oss • Er Microsoft eller Javas innstilling er mest åpen? • Hva betyr det for oss? • Java: Må forholde oss til flere leverandører • Java: Verktøy kan komme sent, eller aldri • Microsoft: Kommer Nokia til å levere .NET på sine mobiler? (Neppe) • Microsoft: Mangel på konkurranse svekker tilbudet • Java: Stimulerer til Open-Source utvikling
Open-source Java • Java har stimulert til mye mer Open-Source utvikling og forskning enn .NET (så langt) • Hvorfor er open-source interessant • Pris? (ikke så viktig) • Vendor lock-in • Redusert byråkrati ved innkjøp • Kvalitet • Eksempelkode • Er dette viktig for dere?
Din eksisterende plattform • Selv med Web Services er integrasjon veldig dyrt • Det viktigste spørsmålet: • Hva bruker kunder? • Hva bruker leverandører? • Hva bruker partnere? • Hva bruker din bransje? • Hva benyttes i eksisterende systemer? • Hva forstår utviklingsorganisasjonen?
Utbredelse & Modenhet • Diskutabelt hvem som er mest skalerbar • Men: J2EE har mange installasjoner som har gått over lang tid! • Trygghetsfølelse • Body-of-knowledge • Modne best practices • Erfaren arbeidskraft
Oppsummering • Java har bredest spektrum av leverandører • Kommersielle Java-løsninger er dyrest • Teknologibytte er alltid dyrt • Java har en åpen prosess • Microsoft er ”kongen på haugen sin” • Java har mange modne open-source initiativer • Java drar nytte av sin lengre fartstid
Konklusjon: Når bør man bruke .NET • Dersom man er i “Windows-verden” • Win32, COM etc erfaring • Dersom partnere benytter .NET • Dersom man er opptatt av fancy brukergrensesnitt • Dersom man trenger kraftige bærbare devices • Dersom man føler J2EE er for kompleks
Når bør man bruke Java? • Dersom man allerede er i Java-verden • Opptatt av standardisering og av open-source • Partnere, leverandører eller kunder benytter Java • Eksistrende systemer benytter Java • Man har veldig dyktige Java-utviklerer • Mobile massemarkedapplikasjoner
Fremtiden • Både Java og .NET har strålende framtid • Neste generasjon .NET (Yukon) presenteres på PDC 2003 i oktober • J2SE 1.5 (Tiger) forventes 2004Q2 • Henter inn forspranget til C# • Konkurransen mellom Java og .NETer bra for oss!
Oppsummering • Java og .NET vil forbli de 2 største plattformene • De tekniske forskjellene er trivielle • Andre faktorer bør avgjøre valget • Å bytte mellom plattformene er dyrt • .NET gir god integrasjon med Windows-teknologi • Java tilbyr en mer åpen verden • bredere bransjesamarbeid • stimulering til Open-Source utvikling