Da Java a .NET: andata e... ritorno?

  • View
    40

  • Download
    0

Embed Size (px)

DESCRIPTION

Da Java a .NET: andata e... ritorno? . Lorenzo Barbieri ObjectWay S.p.A. lorenzo.barbieri@objectway.it. Sponsor. Me.About(). - PowerPoint PPT Presentation

Text of Da Java a .NET: andata e... ritorno?

  • Da Java a .NET: andata e... ritorno? Lorenzo BarbieriObjectWay S.p.A.lorenzo.barbieri@objectway.it

  • Sponsor

  • Me.About()

    Sono un Senior Trainer/Consultant in ObjectWay SpA, specializzato in architetture Microsoft .NET, Windows, SQL Server, Visual Studio Team System, Virtual PC/Virtual ServerCollaboro con UGIdotNET e Windowserver.itHo scritto articoli per ioProgrammo, Dev, Network News.Ho scritto le guide su www.cramsession.com per vari esami di certificazione Microsoft.Sono specializzato sul Microsoft Solutions Framework, su cui ho scritto alcuni articoli e mantengo una lista di tutte le risorse disponibili.

  • Di cosa parleremo in questa sessione?In questa sessione parleremo di:Tecnologie e Prodotti appartenenti al Lato Oscuro

    Ambasciator pena non porta...

  • Di cosa parleremo in questa sessione?In questa sessione parleremo di:Architetture Java e .NETJava, J# e C#???Migrazione da Java a .NETRiutilizzo in .NET di librerie JavaInteroperabilit tra Java e .NET avanzata

    NON parleremo di Web Service, WSE, WCF/Indigo, WS-*Pierre, domani 14:30 - 15:45

  • Architetture Java e .NETNon voglio annoiarvi con i soliti paragoni architetturali, o se nato prima luovo o la gallinaJava e .NET hanno architetture molto simili, con una storia molto simile, come mostrato ad esempio da David Chappell qualche anno fa: http://se.math.spbu.ru/Seminars/Chappell/Chappell.ppt

  • Tecnologie corrispondenti

    http://www.c-sharpcorner.com/Code/2003/March/J2EEtoDotNet.aspNaturalmente il fatto che le tecnologie coprano le stesse aree, non vuol dire che siano la stessa cosa...

  • Java, J# e C#Java, J# e C# sono tutti linguaggi appartenenti alla famiglia del CJ# la versione per piattaforma .NET del linguaggio JavaSupporta sia le librerie .NET, sia (in parte) quelle Java (1.1.4 pi qualcosaltro...)Utile perch permette il porting da J++

    C# e Java hanno una sintassi molto simile

  • Similitudini tra Java e C#Sintassi simil-CEreditariet singolaGestione automatica delle risorse (Garbage Collection)Stringhe immutabiliReflectionSerializzazioneanche se i meccanismi sono diversiEtc...

  • Differenze tra Java e C#Classi Nested - In Java ci sono due tipi di classi nested:Inner classes (non esistono in C#)Static nested classes (equivalenti alle nested classes di C#)Access modifiersIn Java protected equivalente ad internal in C#C# ha protected e internal protected in pi.In Java il default protected (internal in C#), in C# private

  • Differenze tra Java e C#Java non ha il concetto di StructIn Java le eccezioni vanno dichiarate e trappate esplicitamente (Checked Exceptions) e fanno parte della firma del metodoCostanti (final in Java, const o readonly a seconda dei casi in C#)Le sequenze di inizializzazione dei costuttori, finalizzatori, etc... non sono identiche.

  • Novit di Java 5.0gi presenti in C#Boxing/Unboxing dei tipi valueEnumForeachAttributi (solo come Metadati)

    Java 5.0 introduce i Generics che in C# appariranno nella 2.0Non hanno la stessa implementazione, quelli di Java sono retrocompatibili

    Altre: http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

  • Per una documentazione esaustiva:Confronto fra Java 1.4 e C# 1.0 (erano entrambi in Beta quando stata scritta):http://www.25hoursaday.com/CsharpVsJava.htmlUn altro confronto:http://www.javacamp.org/javavscsharp/

    Confronto fra Java 5.0 e C#:http://www.harding.edu/USER/fmccown/WWW/java1_5_csharp_comparison.html

  • Migrazione da Java a C#La migrazione pu essere fatta manualmente o tramite tool:Java Language Conversion Assistant 2.0Java Language Conversion Assistant 3.0Integrato in Visual Studio 2005 attualmente in BetaEntrambi supportano la conversione per progetti VJ++ o singoli file/cartelle

  • Esempi di migrazione manuale:NUnit la 1.x era basata sulle interfacce, la 2.x stata completamente riscritta basandosi sugli attributiNHibernate, NAnt, CruiseControl.NET, NEtc...

    La migrazione manuale permette un refactoring/riscrittura per adattarsi meglio allambiente .NET

  • Java Language Conversion Assistant 2.0http://msdn.microsoft.com/vstudio/downloads/tools/jlca/

  • Java Language Conversion Assistant 2.0Permette di convertire:Classi Java-> Classi C#Applet-> Windows Forms ControlsJavaBean-> Classi C#AWT Frame-> Windows FormsWFC Forms-> Windows FormsJSP/Servlet-> ASP.NETSupporta il linguaggio Java fino alla 1.1.4 con alcune estensioni (ad esempio le collection di Java 1.2)

  • Java Language Conversion Assistant 3.0E attualmente in Beta: http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/

    Supporta anche:J2EE e J2SE 1.3Compresi EJB, JAAS, JCE, JMS, JNDI, e RMIMigliorata la conversione della parte grafica, includendo anche la conversione parziale di progetti Swing

  • JLCA problemi di conversioneIl codice viene convertito AS IS, ma non possibile convertire il 100%Esistono una serie di UPGRADE_WARNING e UPGRADE_ISSUE che vengono marcati nel codiceAlcuni costrutti non vengono convertiti (ad esempio gli Enum old Java style...)Alcuni costrutti vengono convertiti maleAd esempio i getter/setter -> propriet, a volte vengono convertiti, a volte no...

  • JLCA problemi di conversioneAltri problemi subdoli:Exception BroadeningDue eccezioni Java sono mappate su una sola in .NET -> due catch con la stessa eccezioneAlgoritmi interni diversi, attenti ad esempio a codice di questo tipoString s = new String(Prova!);if (b.hashCode() == 1234567) o anche:Class c = Class.forName("java.lang.String");

  • JLCA problemi filosoficiLa conversione verso .NET un processo irreversibileAd esempio:Gli EJB sono convertiti in Enterprise Services (COM+)RMI convertito in .NET RemotingLa Serializzazione usata quella di .NETLa Security Java diversa dalla Security .NET!

    Morale: le applicazioni convertite non potranno pi interoperare con il mondo Java... Attenzione!!!

  • JLCA ne vale la pena???Se funziona tutto subito si... (RARO!!!)Se le modifiche sono poche si...Se le cose da portare sono statiche si...

    Il processo di post conversione pu essere lungo e noiosoNon si vuole doverlo rifare ogni volta...

  • JLCA un esempio: JExcelHo preso una libreria molto usata in ambiente Java: http://www.andykhan.com/jexcelapi/Questa libreria permette di leggere, scrivere e modificare fogli Excel senza usare i PIA, COM Interop, o la libreria di Raf che usa ADO.NET ;-)

  • DEMO JLCA 3.0: Conversione di JExcel

  • Risultato... (1/3)Dopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazioneDopo venti minuti avevo 450 errori di compilazioneDome mezzora avevo 800 errori di compilazione...

  • Risultato... (2/3)Il codice faceva schifo...Mezze property mezzi get/setUn problema quando la classe aveva la property e linterfaccia da implementare il get/set o viceversa...Enum alla Java da riscrivere completamente nellimplementazioneRefactoring selvaggio da applicare, senza avere unit test che garantissero lesattezza delle modificheNested Classes da rivedere completamenteVisibilit delle classi e dei metodi da rivedere...

  • Risultato... (3/3)E se esce unaltra versione della libreria???Il codice non scritto secondo le Best Practice del codice .NET

    Ma... Il tool molto utile per capire le differenze tra i due linguaggi non in teoria (come i link precedenti) ma nella pratica!!!

  • Riutilizzo in .NET di librerie JavaPer usare direttamente senza conversioni le librerie Java abbiamo due strade:J#IKVM.NET (http://www.ikvm.net/)

    In entrambi i casi le librerie non vengono convertite, ma usate direttamente

  • J#J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle versioni successive.Due modi per importare librerie:Se si ha il codice (importando i file .java direttamente nel progetto)Se si hanno solo i .class, .zip, .jar, etc...Si pu usare il tool JbImp

  • DEMO J#:Utilizzare JExcel da codice J#

  • A cosa mi serve usarlo da J#?Nessuno usa J# per scrivere il proprio codice...Ma il codice J# pu essere richiamato da codice C#, VB.NET esattamente come qualsiasi Assembly .NETRichiede qualche attenzione:Referenziare lassembly con i tipi J# (VSJLIB)Verificare la firma dei tipi e usare i tipi corrispondenti

  • DEMO J#:Utilizzare JExcel da C#

  • IKVM.NETE unimplementazione della JVM in .NETPermette di utilizzare codice Java direttamente senza una JVM installataPermette di convertire file .class, .jar, etc... In DLL .NET

    Ha librerie pi complete di J#, almeno in alcune parti.

  • DEMO IKVM.NET:Utilizzo di JExcel da riga di comando

  • DEMO IKVM.NET:Conversione JExcel in DLL .NET e suo utilizzo da C#

  • Come funziona IKVM.NETIKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode Java in ILDispone di unimplementazione delle principali librerie Java in un Assebly .NETBasata sul progetto GNU ClassPathNon supporta la parte grafica (non prioritaria per lautore)Ha un supporto iniziale per i Generics di Java

  • Ok... Questo JExcel ci ha stufato...Anche in questo caso...Come per tutti i prodotti della serie JQualcheCosa...Esiste anche NExcel!!!http://nexcel.sourceforge.net/

    Per il momento supporta solo la lettura di file Excel...

  • Interoperabilit tra Java e .NET J2EE.NETPresentationBusiness Logic Data Integration & Persistence

  • Interoperabilit tra Java e .NETNon ce ne occupiamo!

    Presentation to PresentationPresentation to BusinessBusiness to BusinessBusiness to DataXML Web ServicesXXXRuntime BridgesXXXMessagingXXShared DatabasesXXIntegration BrokersXX

  • Alla base dellinteroperabilit:Ci sono i dati, o meglio.