La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Da Java a.NET: andata e... ritorno? Da Java a.NET: andata e... ritorno? Lorenzo Barbieri ObjectWay S.p.A. Lorenzo Barbieri.

Presentazioni simili


Presentazione sul tema: "Da Java a.NET: andata e... ritorno? Da Java a.NET: andata e... ritorno? Lorenzo Barbieri ObjectWay S.p.A. Lorenzo Barbieri."— Transcript della presentazione:

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

2 SponsorSponsor

3 Me.About()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 ServerSono 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.itCollaboro con UGIdotNET e Windowserver.it Ho scritto articoli per ioProgrammo, Dev, Network News.Ho scritto articoli per ioProgrammo, Dev, Network News. Ho scritto le guide su www.cramsession.com per vari esami di certificazione Microsoft.Ho scritto le guide su www.cramsession.com per vari esami di certificazione Microsoft.www.cramsession.com Sono specializzato sul Microsoft Solutions Framework, su cui ho scritto alcuni articoli e mantengo una lista di tutte le risorse disponibili.Sono specializzato sul Microsoft Solutions Framework, su cui ho scritto alcuni articoli e mantengo una lista di tutte le risorse disponibili. Sono un Senior Trainer/Consultant in ObjectWay SpA, specializzato in architetture Microsoft.NET, Windows, SQL Server, Visual Studio Team System, Virtual PC/Virtual ServerSono 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.itCollaboro con UGIdotNET e Windowserver.it Ho scritto articoli per ioProgrammo, Dev, Network News.Ho scritto articoli per ioProgrammo, Dev, Network News. Ho scritto le guide su www.cramsession.com per vari esami di certificazione Microsoft.Ho scritto le guide su www.cramsession.com per vari esami di certificazione Microsoft.www.cramsession.com Sono specializzato sul Microsoft Solutions Framework, su cui ho scritto alcuni articoli e mantengo una lista di tutte le risorse disponibili.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:In questa sessione parleremo di: –Tecnologie e Prodotti appartenenti al Lato Oscuro In questa sessione parleremo di: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: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-*NON parleremo di Web Service, WSE, WCF/Indigo, WS-* –Pierre, domani 14:30 - 15:45 In questa sessione parleremo di: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-*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 luovo o la gallinaNon voglio annoiarvi con i soliti paragoni architetturali, o se è nato prima luovo 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.pptJava 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 http://se.math.spbu.ru/Seminars/Chappell/ Chappell.ppt http://se.math.spbu.ru/Seminars/Chappell/ Chappell.ppt Non voglio annoiarvi con i soliti paragoni architetturali, o se è nato prima luovo o la gallinaNon voglio annoiarvi con i soliti paragoni architetturali, o se è nato prima luovo 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.pptJava 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 http://se.math.spbu.ru/Seminars/Chappell/ Chappell.ppt http://se.math.spbu.ru/Seminars/Chappell/ Chappell.ppt

7 Tecnologie corrispondenti http://www.c-sharpcorner.com/Code/2003/March/J2EEtoDotNet.asphttp://www.c-sharpcorner.com/Code/2003/March/J2EEtoDotNet.asphttp://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...Naturalmente il fatto che le tecnologie coprano le stesse aree, non vuol dire che siano la stessa cosa... http://www.c-sharpcorner.com/Code/2003/March/J2EEtoDotNet.asphttp://www.c-sharpcorner.com/Code/2003/March/J2EEtoDotNet.asphttp://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...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 CJava, J# e C# sono tutti linguaggi appartenenti alla famiglia del C J# è la versione per piattaforma.NET del linguaggio JavaJ# è la versione per piattaforma.NET del linguaggio Java –Supporta 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 simileC# e Java hanno una sintassi molto simile Java, J# e C# sono tutti linguaggi appartenenti alla famiglia del CJava, J# e C# sono tutti linguaggi appartenenti alla famiglia del C J# è la versione per piattaforma.NET del linguaggio JavaJ# è la versione per piattaforma.NET del linguaggio Java –Supporta 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 simileC# e Java hanno una sintassi molto simile

9 Similitudini tra Java e C# Sintassi simil-CSintassi simil-C Ereditarietà singolaEreditarietà singola Gestione automatica delle risorse (Garbage Collection)Gestione automatica delle risorse (Garbage Collection) Stringhe immutabiliStringhe immutabili ReflectionReflection SerializzazioneSerializzazione –anche se i meccanismi sono diversi Etc...Etc... Sintassi simil-CSintassi simil-C Ereditarietà singolaEreditarietà singola Gestione automatica delle risorse (Garbage Collection)Gestione automatica delle risorse (Garbage Collection) Stringhe immutabiliStringhe immutabili ReflectionReflection SerializzazioneSerializzazione –anche se i meccanismi sono diversi Etc...Etc...

10 Differenze tra Java e C# Classi Nested - In Java ci sono due tipi di classi nested: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 modifiersAccess modifiers –In 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 Classi Nested - In Java ci sono due tipi di classi nested: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 modifiersAccess modifiers –In 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

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

12 Novità di Java 5.0 già presenti in C# Boxing/Unboxing dei tipi valueBoxing/Unboxing dei tipi value EnumEnum ForeachForeach Attributi (solo come Metadati)Attributi (solo come Metadati) Java 5.0 introduce i Generics che in C# appariranno nella 2.0Java 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.htmlAltre: http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html Boxing/Unboxing dei tipi valueBoxing/Unboxing dei tipi value EnumEnum ForeachForeach Attributi (solo come Metadati)Attributi (solo come Metadati) Java 5.0 introduce i Generics che in C# appariranno nella 2.0Java 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.htmlAltre: http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html 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):Confronto fra Java 1.4 e C# 1.0 (erano entrambi in Beta quando è stata scritta): –http://www.25hoursaday.com/CsharpVsJava.html http://www.25hoursaday.com/CsharpVsJava.html Un altro confronto:Un altro confronto: –http://www.javacamp.org/javavscsharp/ http://www.javacamp.org/javavscsharp/ Confronto fra Java 5.0 e C#:Confronto fra Java 5.0 e C#: –http://www.harding.edu/USER/fmccown/WWW/java1_ 5_csharp_comparison.html http://www.harding.edu/USER/fmccown/WWW/java1_ 5_csharp_comparison.htmlhttp://www.harding.edu/USER/fmccown/WWW/java1_ 5_csharp_comparison.html Confronto fra Java 1.4 e C# 1.0 (erano entrambi in Beta quando è stata scritta):Confronto fra Java 1.4 e C# 1.0 (erano entrambi in Beta quando è stata scritta): –http://www.25hoursaday.com/CsharpVsJava.html http://www.25hoursaday.com/CsharpVsJava.html Un altro confronto:Un altro confronto: –http://www.javacamp.org/javavscsharp/ http://www.javacamp.org/javavscsharp/ Confronto fra Java 5.0 e C#:Confronto fra Java 5.0 e C#: –http://www.harding.edu/USER/fmccown/WWW/java1_ 5_csharp_comparison.html http://www.harding.edu/USER/fmccown/WWW/java1_ 5_csharp_comparison.htmlhttp://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: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 BetaIntegrato in Visual Studio 2005 attualmente in Beta Entrambi supportano la conversione per progetti VJ++ o singoli file/cartelleEntrambi supportano la conversione per progetti VJ++ o singoli file/cartelle La migrazione può essere fatta manualmente o tramite tool: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 BetaIntegrato in Visual Studio 2005 attualmente in Beta Entrambi supportano la conversione per progetti VJ++ o singoli file/cartelleEntrambi 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 attributiNUnit – la 1.x era basata sulle interfacce, la 2.x è stata completamente riscritta basandosi sugli attributi NHibernate, NAnt, CruiseControl.NET, NEtc...NHibernate, NAnt, CruiseControl.NET, NEtc... La migrazione manuale permette un refactoring/riscrittura per adattarsi meglio allambiente.NETLa migrazione manuale permette un refactoring/riscrittura per adattarsi meglio allambiente.NET NUnit – la 1.x era basata sulle interfacce, la 2.x è stata completamente riscritta basandosi sugli attributiNUnit – la 1.x era basata sulle interfacce, la 2.x è stata completamente riscritta basandosi sugli attributi NHibernate, NAnt, CruiseControl.NET, NEtc...NHibernate, NAnt, CruiseControl.NET, NEtc... La migrazione manuale permette un refactoring/riscrittura per adattarsi meglio allambiente.NETLa migrazione manuale permette un refactoring/riscrittura per adattarsi meglio allambiente.NET

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

17 Java Language Conversion Assistant 2.0 Permette di convertire: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)Supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni (ad esempio le collection di Java 1.2) Permette di convertire: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)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/E attualmente in Beta: http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/ http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/ Supporta anche:Supporta anche: –J2EE e J2SE 1.3 Compresi EJB, JAAS, JCE, JMS, JNDI, e RMICompresi EJB, JAAS, JCE, JMS, JNDI, e RMI –Migliorata la conversione della parte grafica, includendo anche la conversione parziale di progetti Swing E attualmente in Beta: http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/E attualmente in Beta: http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/ http://msdn.microsoft.com/vstudio/downloads/tools/jlca/30Beta/ Supporta anche:Supporta anche: –J2EE e J2SE 1.3 Compresi EJB, JAAS, JCE, JMS, JNDI, e RMICompresi 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%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...Ad esempio i getter/setter -> proprietà, a volte vengono convertiti, a volte no... Il codice viene convertito AS IS, ma non è possibile convertire il 100%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...Ad esempio i getter/setter -> proprietà, a volte vengono convertiti, a volte no...

20 JLCA – problemi di conversione Altri problemi subdoli:Altri problemi subdoli: –Exception Broadening Due eccezioni Java sono mappate su una sola in.NET -> due catch con la stessa eccezioneDue 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!);String s = new String(Prova!); if (b.hashCode() == 1234567)if (b.hashCode() == 1234567) –o anche: Class c = Class.forName("java.lang.String");Class c = Class.forName("java.lang.String"); Altri problemi subdoli:Altri problemi subdoli: –Exception Broadening Due eccezioni Java sono mappate su una sola in.NET -> due catch con la stessa eccezioneDue 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!);String s = new String(Prova!); if (b.hashCode() == 1234567)if (b.hashCode() == 1234567) –o anche: Class c = Class.forName("java.lang.String");Class c = Class.forName("java.lang.String");

21 JLCA – problemi filosofici La conversione verso.NET è un processo irreversibileLa conversione verso.NET è un processo irreversibile Ad esempio: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!La Security Java è diversa dalla Security.NET! Morale: le applicazioni convertite non potranno più interoperare con il mondo Java... Attenzione!!!Morale: le applicazioni convertite non potranno più interoperare con il mondo Java... Attenzione!!! La conversione verso.NET è un processo irreversibileLa conversione verso.NET è un processo irreversibile Ad esempio: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!La Security Java è diversa dalla Security.NET! Morale: le applicazioni convertite non potranno più interoperare con il mondo Java... Attenzione!!!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 funziona tutto subito si... (RARO!!!) Se le modifiche sono poche si...Se le modifiche sono poche si... Se le cose da portare sono statiche si...Se le cose da portare sono statiche si... Il processo di post conversione può essere lungo e noiosoIl processo di post conversione può essere lungo e noioso –Non si vuole doverlo rifare ogni volta... –Non si vuole doverlo rifare ogni volta... Se funziona tutto subito si... (RARO!!!)Se funziona tutto subito si... (RARO!!!) Se le modifiche sono poche si...Se le modifiche sono poche si... Se le cose da portare sono statiche si...Se le cose da portare sono statiche si... Il processo di post conversione può essere lungo e noiosoIl processo di post conversione può essere lungo e noioso –Non si vuole doverlo rifare ogni volta... –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/Ho preso una libreria molto usata in ambiente Java: http://www.andykhan.com/jexcelapi/ 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 ;-)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 ;-) Ho preso una libreria molto usata in ambiente Java: http://www.andykhan.com/jexcelapi/Ho preso una libreria molto usata in ambiente Java: http://www.andykhan.com/jexcelapi/ 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 ;-)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 compilazioneDopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazione Dopo venti minuti avevo 450 errori di compilazioneDopo venti minuti avevo 450 errori di compilazione Dome mezzora avevo 800 errori di compilazione...Dome mezzora avevo 800 errori di compilazione... Dopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazioneDopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazione Dopo venti minuti avevo 450 errori di compilazioneDopo venti minuti avevo 450 errori di compilazione Dome mezzora avevo 800 errori di compilazione...Dome mezzora avevo 800 errori di compilazione...

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

27 Risultato... (3/3) E se esce unaltra versione della libreria???E se esce unaltra versione della libreria??? Il codice non è scritto secondo le Best Practice del codice.NETIl 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!!!Ma... Il tool è molto utile per capire le differenze tra i due linguaggi non in teoria (come i link precedenti) ma nella pratica!!! E se esce unaltra versione della libreria???E se esce unaltra versione della libreria??? Il codice non è scritto secondo le Best Practice del codice.NETIl 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!!!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:Per usare direttamente senza conversioni le librerie Java abbiamo due strade: –J# –IKVM.NET (http://www.ikvm.net/) http://www.ikvm.net/ In entrambi i casi le librerie non vengono convertite, ma usate direttamenteIn entrambi i casi le librerie non vengono convertite, ma usate direttamente Per usare direttamente senza conversioni le librerie Java abbiamo due strade:Per usare direttamente senza conversioni le librerie Java abbiamo due strade: –J# –IKVM.NET (http://www.ikvm.net/) http://www.ikvm.net/ In entrambi i casi le librerie non vengono convertite, ma usate direttamenteIn entrambi i casi le librerie non vengono convertite, ma usate direttamente

29 J#J# J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle versioni successive.J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle versioni successive. Due modi per importare librerie: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 JbImpSi può usare il tool JbImp J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle versioni successive.J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle versioni successive. Due modi per importare librerie: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 JbImpSi 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...Nessuno usa J# per scrivere il proprio codice... Ma il codice J# può essere richiamato da codice C#, VB.NET esattamente come qualsiasi Assembly.NETMa il codice J# può essere richiamato da codice C#, VB.NET esattamente come qualsiasi Assembly.NET Richiede qualche attenzione:Richiede qualche attenzione: –Referenziare lassembly con i tipi J# (VSJLIB) –Verificare la firma dei tipi e usare i tipi corrispondenti Nessuno usa J# per scrivere il proprio codice...Nessuno usa J# per scrivere il proprio codice... Ma il codice J# può essere richiamato da codice C#, VB.NET esattamente come qualsiasi Assembly.NETMa il codice J# può essere richiamato da codice C#, VB.NET esattamente come qualsiasi Assembly.NET Richiede qualche attenzione:Richiede qualche attenzione: –Referenziare lassembly con i tipi J# (VSJLIB) –Verificare la firma dei tipi e usare i tipi corrispondenti

32 DEMO J#: Utilizzare JExcel da C#

33 IKVM.NETIKVM.NET E unimplementazione della JVM in.NETE unimplementazione della JVM in.NET Permette di utilizzare codice Java direttamente senza una JVM installataPermette di utilizzare codice Java direttamente senza una JVM installata Permette di convertire file.class,.jar, etc... In DLL.NETPermette di convertire file.class,.jar, etc... In DLL.NET Ha librerie più complete di J#, almeno in alcune parti.Ha librerie più complete di J#, almeno in alcune parti. E unimplementazione della JVM in.NETE unimplementazione della JVM in.NET Permette di utilizzare codice Java direttamente senza una JVM installataPermette di utilizzare codice Java direttamente senza una JVM installata Permette di convertire file.class,.jar, etc... In DLL.NETPermette di convertire file.class,.jar, etc... In DLL.NET Ha librerie più complete di J#, almeno in alcune parti.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 ILIKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode Java in IL Dispone di unimplementazione delle principali librerie Java in un Assebly.NETDispone di unimplementazione delle principali librerie Java in un Assebly.NET –Basata sul progetto GNU ClassPath Non supporta la parte grafica (non è prioritaria per lautore)Non supporta la parte grafica (non è prioritaria per lautore) Ha un supporto iniziale per i Generics di JavaHa un supporto iniziale per i Generics di Java IKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode Java in ILIKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode Java in IL Dispone di unimplementazione delle principali librerie Java in un Assebly.NETDispone di unimplementazione delle principali librerie Java in un Assebly.NET –Basata sul progetto GNU ClassPath Non supporta la parte grafica (non è prioritaria per lautore)Non supporta la parte grafica (non è prioritaria per lautore) Ha un supporto iniziale per i Generics di JavaHa un supporto iniziale per i Generics di Java

37 Ok... Questo JExcel ci ha stufato... Anche in questo caso...Anche in questo caso... Come per tutti i prodotti della serie JQualcheCosa...Come per tutti i prodotti della serie JQualcheCosa... Esiste anche NExcel!!!Esiste anche NExcel!!! http://nexcel.sourceforge.net/http://nexcel.sourceforge.net/http://nexcel.sourceforge.net/ Per il momento supporta solo la lettura di file Excel...Per il momento supporta solo la lettura di file Excel... Anche in questo caso...Anche in questo caso... Come per tutti i prodotti della serie JQualcheCosa...Come per tutti i prodotti della serie JQualcheCosa... Esiste anche NExcel!!!Esiste anche NExcel!!! http://nexcel.sourceforge.net/http://nexcel.sourceforge.net/http://nexcel.sourceforge.net/ Per il momento supporta solo la lettura di file Excel...Per il momento supporta solo la lettura di file Excel...

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

39 Interoperabilità tra Java e.NET Presentation to Presentation Presentation to Business Business to Business Business to Data XML Web Services XXX Runtime Bridges XXX MessagingXX Shared Databases XX Integration Brokers XX Non ce ne occupiamo!

40 Alla base dellinteroperabilità: Ci sono i dati, o meglio... i tipi di dati!Ci sono i dati, o meglio... i tipi di dati! Esistono tipi di dati differenti tra le due piattaformeEsistono tipi di dati differenti tra le due piattaforme –Dataset, ResultSet, etc... Esistono tipi di dati simili ma con comportamento diverso: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 dellinteroperabilità!La compatibilità tra tipi di dati diversi è il problema principale dellinteroperabilità! Ci sono i dati, o meglio... i tipi di dati!Ci sono i dati, o meglio... i tipi di dati! Esistono tipi di dati differenti tra le due piattaformeEsistono tipi di dati differenti tra le due piattaforme –Dataset, ResultSet, etc... Esistono tipi di dati simili ma con comportamento diverso: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 dellinteroperabilità!La compatibilità tra tipi di dati diversi è il problema principale dellinteroperabilità!

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

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

43 Runtime Bridges

44 A seconda del prodotto si hanno funzionalità diverse: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 linteroperabilità con server Corba –Alcuni prodotti sono bidirezionali" A seconda del prodotto si hanno funzionalità diverse: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 linteroperabilità con server Corba –Alcuni prodotti sono bidirezionali"

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

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

47 MessagingMessaging Soluzioni per linteroperabilità:Soluzioni per linteroperabilità: –MSMQ-MQSeries Bridge (presente in Host Integration Server) –MQSeries per.NET (in un SupportPac di IBM) Soluzioni per linteroperabilità:Soluzioni per linteroperabilità: –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 DataBaseEntrambi i mondi possono accedere a svariati tipi di DataBase Si usano le tecniche conosciute e già usate:Si usano le tecniche conosciute e già usate: –ADO.NET –JDBC/JDO/etc... Entrambi i mondi possono accedere a svariati tipi di DataBaseEntrambi i mondi possono accedere a svariati tipi di DataBase Si usano le tecniche conosciute e già usate: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.Microsoft BizTalk permette di far comunicare piattaforme diverse, e permette anche di trasformare, adattare e gestire vari aspetti della comunicazione. Esistono altri prodotti simili.Esistono altri prodotti simili. Tutti questi prodotti possono usare Web Services o protocolli nativi per la comunicazione tra le piattaforme.Tutti questi prodotti possono usare Web Services o protocolli nativi per la comunicazione tra le piattaforme. Microsoft BizTalk permette di far comunicare piattaforme diverse, e permette anche di trasformare, adattare e gestire vari aspetti della comunicazione.Microsoft BizTalk permette di far comunicare piattaforme diverse, e permette anche di trasformare, adattare e gestire vari aspetti della comunicazione. Esistono altri prodotti simili.Esistono altri prodotti simili. Tutti questi prodotti possono usare Web Services o protocolli nativi per la comunicazione tra le piattaforme.Tutti questi prodotti possono usare Web Services o protocolli nativi per la comunicazione tra le piattaforme.

50 ...e il Ritorno??? Parliamo solo di interoperabilità...Parliamo solo di interoperabilità... –chi migrerebbe mai da.NET a Java ;-) Abbiamo visto che alcune delle tecnologie proposte permettono anche linteroperabilità inversaAbbiamo visto che alcune delle tecnologie proposte permettono anche linteroperabilità inversa Unaltra possibilità è JNIUnaltra possibilità è JNI Parliamo solo di interoperabilità...Parliamo solo di interoperabilità... –chi migrerebbe mai da.NET a Java ;-) Abbiamo visto che alcune delle tecnologie proposte permettono anche linteroperabilità inversaAbbiamo visto che alcune delle tecnologie proposte permettono anche linteroperabilità inversa Unaltra possibilità è JNIUnaltra possibilità è JNI

51 Cosè JNI Java Native InterfaceJava Native Interface –Permette a Java di richiamare metodi nativi –Permette a codice nativo di richiamare codice allinterno di una JVM –http://java.sun.com/j2se/1.5.0/docs/guide/jni/ http://java.sun.com/j2se/1.5.0/docs/guide/jni/ In entrambi i casi possiamo usare del codice C++ per fare da ponte fra Java e.NETIn entrambi i casi possiamo usare del codice C++ per fare da ponte fra Java e.NET Java Native InterfaceJava Native Interface –Permette a Java di richiamare metodi nativi –Permette a codice nativo di richiamare codice allinterno di una JVM –http://java.sun.com/j2se/1.5.0/docs/guide/jni/ http://java.sun.com/j2se/1.5.0/docs/guide/jni/ In entrambi i casi possiamo usare del codice C++ per fare da ponte fra Java e.NETIn entrambi i casi possiamo usare del codice C++ per fare da ponte fra Java e.NET

52 Hosting di controlli.NET E possibile inserire controlli.NET in appliacazioni Java utilizzando JNI e linteroperabilità COM/.NETE possibile inserire controlli.NET in appliacazioni Java utilizzando JNI e linteroperabilità COM/.NET –Bisogna passare da C++ –Non è una tecnica semplice da usare Trovate un esempio qui:Trovate un esempio qui: –http://www.devx.com/interop/Article/19845/0/page/1 http://www.devx.com/interop/Article/19845/0/page/1 E possibile inserire controlli.NET in appliacazioni Java utilizzando JNI e linteroperabilità COM/.NETE possibile inserire controlli.NET in appliacazioni Java utilizzando JNI e linteroperabilità COM/.NET –Bisogna passare da C++ –Non è una tecnica semplice da usare Trovate un esempio qui:Trovate un esempio qui: –http://www.devx.com/interop/Article/19845/0/page/1 http://www.devx.com/interop/Article/19845/0/page/1

53 LibriLibri Application Interoperability: Microsoft.NET and J2EEApplication Interoperability: Microsoft.NET and J2EE Lo trovate in libreria o su: http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=enLo trovate in libreria o su: http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=en http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=en http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=en Application Interoperability: Microsoft.NET and J2EEApplication Interoperability: Microsoft.NET and J2EE Lo trovate in libreria o su: http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=enLo trovate in libreria o su: http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=en http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=en http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8 E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=en

54 LibriLibri Microsoft.NET and J2EE Interoperability Toolkit di Simon GuestMicrosoft.NET and J2EE Interoperability Toolkit di Simon Guest

55 LinksLinks http://www.ugidotnet.org http://forum.ugidotnet.org http://mobile.ugidotnet.org http://www.ugidotnet.org http://forum.ugidotnet.org http://mobile.ugidotnet.org


Scaricare ppt "Da Java a.NET: andata e... ritorno? Da Java a.NET: andata e... ritorno? Lorenzo Barbieri ObjectWay S.p.A. Lorenzo Barbieri."

Presentazioni simili


Annunci Google