1 / 55

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

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

tess
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Da Java a .NET: andata e... ritorno? Lorenzo Barbieri ObjectWay S.p.A. lorenzo.barbieri@objectway.it

  2. Sponsor

  3. 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 Server • Collaboro con UGIdotNET e Windowserver.it • Ho 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.

  4. Di cosa parleremo in questa sessione? • In questa sessione parleremo di: • Tecnologie e Prodotti appartenenti al Lato Oscuro “Ambasciator pena non porta...”

  5. Di cosa parleremo in questa sessione? • In questa sessione parleremo di: • Architetture Java e .NET • Java, J# e C#??? • Migrazione da Java a .NET • Riutilizzo in .NET di librerie Java • Interoperabilità tra Java e .NET avanzata • NON parleremo di Web Service, WSE, WCF/Indigo, WS-* • Pierre, domani 14:30 - 15:45

  6. Architetture Java e .NET • Non voglio annoiarvi con i soliti paragoni architetturali, o se è nato prima l’uovo o la gallina • Java 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

  7. Tecnologie corrispondenti • http://www.c-sharpcorner.com/Code/2003/March/J2EEtoDotNet.asp • Naturalmente il fatto che le tecnologie coprano le stesse aree, non vuol dire che siano “la stessa cosa”...

  8. Java, J# e C# • Java, J# e C# sono tutti linguaggi appartenenti alla famiglia del C • J# è la versione per piattaforma .NET del linguaggio Java • Supporta sia le librerie .NET, sia (in parte) quelle Java (1.1.4 più qualcos’altro...) • Utile perchè permette il porting da J++ • C# e Java hanno una sintassi molto simile

  9. Similitudini tra Java e C# • Sintassi simil-C • Ereditarietà singola • Gestione automatica delle risorse (Garbage Collection) • Stringhe immutabili • Reflection • Serializzazione • anche se i meccanismi sono diversi • Etc...

  10. 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 modifiers • In Java protected è equivalente ad internal in C# • C# ha protected e internalprotected in più. • In Java il default è protected (internal in C#), in C# è private

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

  12. Novità di Java 5.0già presenti in C# • Boxing/Unboxing dei tipi value • Enum • Foreach • Attributi (solo come Metadati) • Java 5.0 introduce i Generics che in C# appariranno nella 2.0 • Non hanno la stessa implementazione, quelli di Java sono “retrocompatibili” • Altre: http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

  13. 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.html • Un 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

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

  15. Esempi di migrazione manuale: • NUnit – la 1.x era basata sulle interfacce, la 2.x è stata completamente riscritta basandosi sugli attributi • NHibernate, NAnt, CruiseControl.NET, NEtc... • La migrazione manuale permette un refactoring/riscrittura per adattarsi meglio all’ambiente .NET

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

  17. Java Language Conversion Assistant 2.0 • Permette di convertire: • Classi Java -> Classi C# • Applet -> Windows Forms Controls • JavaBean -> Classi C# • AWT Frame -> Windows Forms • WFC Forms -> Windows Forms • JSP/Servlet -> ASP.NET • Supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni (ad esempio le collection di Java 1.2)

  18. Java Language Conversion Assistant 3.0 • E’ attualmente in Beta: http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/ • Supporta anche: • J2EE e J2SE 1.3 • Compresi EJB, JAAS, JCE, JMS, JNDI, e RMI • Migliorata la conversione della parte grafica, includendo anche la conversione parziale di progetti Swing

  19. JLCA – problemi di conversione • Il codice viene convertito AS IS, ma non è possibile convertire il 100% • Esistono una serie di UPGRADE_WARNING e UPGRADE_ISSUE che vengono marcati nel codice • Alcuni costrutti non vengono convertiti (ad esempio gli Enum “old Java style”...) • Alcuni costrutti vengono convertiti male • Ad esempio i getter/setter -> proprietà, a volte vengono convertiti, a volte no...

  20. JLCA – problemi di conversione • Altri problemi “subdoli”: • Exception Broadening • Due eccezioni Java sono mappate su una sola in .NET -> due catch con la stessa eccezione • Algoritmi interni diversi, attenti ad esempio a codice di questo tipo • String s = new String(“Prova!”); • if (b.hashCode() == 1234567) • o anche: • Class c = Class.forName("java.lang.String");

  21. JLCA – problemi “filosofici” • La conversione verso .NET è un processo “irreversibile” • Ad esempio: • Gli EJB sono convertiti in Enterprise Services (COM+) • RMI è convertito in .NET Remoting • La Serializzazione usata è quella di .NET • La Security Java è diversa dalla Security .NET! • Morale: le applicazioni convertite non potranno più “interoperare” con il mondo Java... Attenzione!!!

  22. 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 noioso • Non si vuole doverlo rifare ogni volta... 

  23. JLCA – un esempio: JExcel • Ho 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 ;-)

  24. DEMO JLCA 3.0: Conversione di JExcel

  25. Risultato... (1/3) • Dopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazione • Dopo venti minuti avevo 450 errori di compilazione • Dome mezz’ora avevo 800 errori di compilazione... 

  26. Risultato... (2/3) • Il codice faceva schifo... • Mezze property mezzi get/set • Un problema quando la classe aveva la property e l’interfaccia da implementare il get/set o viceversa... • Enum alla Java da riscrivere completamente nell’implementazione • Refactoring selvaggio da applicare, senza avere unit test che garantissero l’esattezza delle modifiche • Nested Classes da rivedere completamente • Visibilità delle classi e dei metodi da rivedere...

  27. Risultato... (3/3) • E se esce un’altra 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!!!

  28. Riutilizzo in .NET di librerie Java • Per 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”

  29. 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

  30. DEMO J#:Utilizzare JExcel da codice J#

  31. 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 .NET • Richiede qualche attenzione: • Referenziare l’assembly con i tipi J# (VSJLIB) • Verificare la firma dei tipi e usare i tipi corrispondenti

  32. DEMO J#:Utilizzare JExcel da C#

  33. IKVM.NET • E’ un’implementazione della JVM in .NET • Permette di utilizzare codice Java direttamente senza una JVM installata • Permette di convertire file .class, .jar, etc... In DLL .NET • Ha librerie più “complete” di J#, almeno in alcune parti.

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

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

  36. Come funziona IKVM.NET • IKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode Java in IL • Dispone di un’implementazione delle principali librerie Java in un Assebly .NET • Basata sul progetto GNU ClassPath • Non supporta la parte grafica (non è prioritaria per l’autore) • Ha un supporto iniziale per i Generics di Java

  37. 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...

  38. WS WS MQ MQ WIRE WIRE Interoperabilità tra Java e .NET Presentation Business Logic Data Integration& Persistence J2EE .NET

  39. Interoperabilità tra Java e .NET Non ce ne occupiamo!

  40. Alla base dell’interoperabilità: • Ci sono i dati, o meglio... i tipi di dati! • Esistono tipi di dati differenti tra le due piattaforme • Dataset, ResultSet, etc... • Esistono tipi di dati “simili” ma con comportamento diverso: • In Java Date, Boolean e altri tipi di dato sono tipi reference, in .NET sono tipi value -> non gestiscono i nulll • La compatibilità tra tipi di dati diversi è il problema principale dell’interoperabilità!

  41. Serializzazione • Se le due piattaforme non si parlano... come fanno ad interoperare??? • Binary Serialization • Di default è incompatibile tra le due piattaforme • Si può passare dalla Serializzazione di J# (http://msdn2.microsoft.com/en-us/library/ms177590(en-US,VS.80).aspx) • XML Serialization • Come per i Web Services, anche in questo caso bisogna focalizzarsi su un approccio XSD-First!

  42. Runtime Bridges • Esistono vari tool per l’interoperabilità tra i runtime: • Borland Janeva (http://www.borland.com) • JNBridge Pro SE/EE (http://www.jnbridge.com) • Intrinsyc J-Integra (http://www.intrinsyc.com) • Remoting.Corba (http://remoting-corba.sourceforge.net) • IIOP.NET (http://iiop-net.sourceforge.net)

  43. Runtime Bridges

  44. Runtime Bridges • A seconda del prodotto si hanno funzionalità diverse: • Alcuni supportano solo scenari di invocazione di metodi remoti • Altri supportano scenari più complessi, in contensti transazionali End-To-End • Janeva, IIOP .NET e Remoting.Corba supportano anche l’interoperabilità con server Corba • Alcuni prodotti sono “bidirezionali"

  45. Runtime Bridges • Alcuni articoli: • Janeva: http://www.devx.com/interop/Article/19916/0/page/1 • JNBridge: http://www.devx.com/interop/Article/19945/0/page/1

  46. Messaging • Entrambe le piattaforme dispongono di una soluzione per il Messaging asincrono: • MSMQ per .NET • JMS per Java • E’ una specifica, ogni vendor ha un’implementazione diversa • MQ Series di IBM è quella più diffusa • Altre soluzioni di terze parti (Sonic, Novell, Tibco)

  47. Messaging • Soluzioni per l’interoperabilità: • MSMQ-MQSeries Bridge (presente in Host Integration Server) • MQSeries per .NET (in un SupportPac di IBM)

  48. Shared Database • Entrambi i mondi possono accedere a svariati tipi di DataBase • Si usano le tecniche conosciute e già usate: • ADO.NET • JDBC/JDO/etc...

  49. Integration Brokers • Microsoft BizTalk permette di far comunicare piattaforme diverse, e permette anche di trasformare, adattare e gestire vari aspetti della comunicazione. • Esistono altri prodotti simili. • Tutti questi prodotti possono usare Web Services o protocolli nativi per la comunicazione tra le piattaforme.

  50. ...e il Ritorno??? • Parliamo solo di interoperabilità... • chi migrerebbe mai da .NET a Java ;-) • Abbiamo visto che alcune delle tecnologie proposte permettono anche l’interoperabilità inversa • Un’altra possibilità è JNI

More Related