55
Da Java a .NET: andata e... Da Java a .NET: andata e... ritorno? ritorno? Lorenzo Barbieri Lorenzo Barbieri ObjectWay S.p.A. ObjectWay S.p.A. [email protected] [email protected]

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

Embed Size (px)

Citation preview

Page 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

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

Lorenzo BarbieriLorenzo BarbieriObjectWay S.p.A.ObjectWay S.p.A.

[email protected]@objectway.it

Page 2: 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

SponsorSponsor

Page 3: 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

Me.About()Me.About()Me.About()Me.About()

• Sono un Senior Trainer/Consultant in Sono un Senior Trainer/Consultant in ObjectWay SpAObjectWay SpA, , specializzato in architetture Microsoft .NET, Windows, SQL Server, specializzato in architetture Microsoft .NET, Windows, SQL Server, Visual Studio Team System, Virtual PC/Virtual ServerVisual 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 Ho scritto le guide su www.cramsession.com per vari esami di

certificazione Microsoft.certificazione Microsoft.• Sono specializzato sul Microsoft Solutions Framework, su cui ho Sono specializzato sul Microsoft Solutions Framework, su cui ho

scritto alcuni articoli e mantengo una lista di tutte le risorse scritto alcuni articoli e mantengo una lista di tutte le risorse disponibili.disponibili.

• Sono un Senior Trainer/Consultant in Sono un Senior Trainer/Consultant in ObjectWay SpAObjectWay SpA, , specializzato in architetture Microsoft .NET, Windows, SQL Server, specializzato in architetture Microsoft .NET, Windows, SQL Server, Visual Studio Team System, Virtual PC/Virtual ServerVisual 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 Ho scritto le guide su www.cramsession.com per vari esami di

certificazione Microsoft.certificazione Microsoft.• Sono specializzato sul Microsoft Solutions Framework, su cui ho Sono specializzato sul Microsoft Solutions Framework, su cui ho

scritto alcuni articoli e mantengo una lista di tutte le risorse scritto alcuni articoli e mantengo una lista di tutte le risorse disponibili.disponibili.

Page 4: 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

Di cosa parleremo in questa Di cosa parleremo in questa sessione?sessione?

Di cosa parleremo in questa Di cosa parleremo in questa sessione?sessione?

• In questa sessione parleremo di:In questa sessione parleremo di:– Tecnologie e Prodotti appartenenti al Lato Tecnologie e Prodotti appartenenti al Lato

OscuroOscuro

• In questa sessione parleremo di:In questa sessione parleremo di:– Tecnologie e Prodotti appartenenti al Lato Tecnologie e Prodotti appartenenti al Lato

OscuroOscuro

“Ambasciator pena non porta...”

Page 5: 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

Di cosa parleremo in questa Di cosa parleremo in questa sessione?sessione?

Di cosa parleremo in questa Di cosa parleremo in questa sessione?sessione?

• In questa sessione parleremo di:In questa sessione parleremo di:– Architetture Java e .NETArchitetture Java e .NET– Java, J# e C#???Java, J# e C#???– Migrazione da Java a .NETMigrazione da Java a .NET– Riutilizzo in .NET di librerie JavaRiutilizzo in .NET di librerie Java– Interoperabilità tra Java e .NET avanzataInteroperabilità tra Java e .NET avanzata

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

• In questa sessione parleremo di:In questa sessione parleremo di:– Architetture Java e .NETArchitetture Java e .NET– Java, J# e C#???Java, J# e C#???– Migrazione da Java a .NETMigrazione da Java a .NET– Riutilizzo in .NET di librerie JavaRiutilizzo in .NET di librerie Java– Interoperabilità tra Java e .NET avanzataInteroperabilità tra Java e .NET avanzata

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

Page 6: 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

Architetture Java e .NETArchitetture Java e .NETArchitetture Java e .NETArchitetture Java e .NET

• Non voglio annoiarvi con i soliti paragoni Non voglio annoiarvi con i soliti paragoni architetturali, o se è nato prima l’uovo o la architetturali, o se è nato prima l’uovo o la gallinagallina

• Java e .NET hanno architetture molto Java e .NET hanno architetture molto simili, con una storia molto simile, come simili, con una storia molto simile, come mostrato ad esempio da David Chappell mostrato ad esempio da David Chappell qualche anno fa: qualche anno fa: httphttp://se.math.spbu.ru/Seminars/Chappell/Cha://se.math.spbu.ru/Seminars/Chappell/Chappell.pptppell.ppt

• Non voglio annoiarvi con i soliti paragoni Non voglio annoiarvi con i soliti paragoni architetturali, o se è nato prima l’uovo o la architetturali, o se è nato prima l’uovo o la gallinagallina

• Java e .NET hanno architetture molto Java e .NET hanno architetture molto simili, con una storia molto simile, come simili, con una storia molto simile, come mostrato ad esempio da David Chappell mostrato ad esempio da David Chappell qualche anno fa: qualche anno fa: httphttp://se.math.spbu.ru/Seminars/Chappell/Cha://se.math.spbu.ru/Seminars/Chappell/Chappell.pptppell.ppt

Page 7: 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

Tecnologie corrispondentiTecnologie corrispondentiTecnologie corrispondentiTecnologie corrispondenti

• http://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 Naturalmente il fatto che le tecnologie coprano le stesse aree, non

vuol dire che siano “la stessa cosa”...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.asp• Naturalmente il fatto che le tecnologie coprano le stesse aree, non Naturalmente il fatto che le tecnologie coprano le stesse aree, non

vuol dire che siano “la stessa cosa”...vuol dire che siano “la stessa cosa”...

Page 8: 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

Java, J# e C#Java, J# e C#Java, J# e C#Java, J# e C#

• Java, J# e C# sono tutti linguaggi Java, J# e C# sono tutti linguaggi appartenenti alla famiglia del Cappartenenti alla famiglia del C

• J# è la versione per piattaforma .NET del J# è la versione per piattaforma .NET del linguaggio Javalinguaggio Java– Supporta sia le librerie .NET, sia (in parte) Supporta sia le librerie .NET, sia (in parte)

quelle Java (1.1.4 più qualcos’altro...)quelle Java (1.1.4 più qualcos’altro...)– Utile perchè permette il porting da J++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 Java, J# e C# sono tutti linguaggi appartenenti alla famiglia del Cappartenenti alla famiglia del C

• J# è la versione per piattaforma .NET del J# è la versione per piattaforma .NET del linguaggio Javalinguaggio Java– Supporta sia le librerie .NET, sia (in parte) Supporta sia le librerie .NET, sia (in parte)

quelle Java (1.1.4 più qualcos’altro...)quelle Java (1.1.4 più qualcos’altro...)– Utile perchè permette il porting da J++Utile perchè permette il porting da J++

• C# e Java hanno una sintassi molto simileC# e Java hanno una sintassi molto simile

Page 9: 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

Similitudini tra Java e C#Similitudini tra Java e C#Similitudini tra Java e C#Similitudini tra Java e C#

• Sintassi simil-CSintassi simil-C• Ereditarietà singolaEreditarietà singola• Gestione automatica delle risorse (Garbage Gestione automatica delle risorse (Garbage

Collection)Collection)• Stringhe immutabiliStringhe immutabili• ReflectionReflection• SerializzazioneSerializzazione

– anche se i meccanismi sono diversianche se i meccanismi sono diversi

• Etc...Etc...

• Sintassi simil-CSintassi simil-C• Ereditarietà singolaEreditarietà singola• Gestione automatica delle risorse (Garbage Gestione automatica delle risorse (Garbage

Collection)Collection)• Stringhe immutabiliStringhe immutabili• ReflectionReflection• SerializzazioneSerializzazione

– anche se i meccanismi sono diversianche se i meccanismi sono diversi

• Etc...Etc...

Page 10: 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

Differenze tra Java e C#Differenze tra Java e C#Differenze tra Java e C#Differenze tra Java e C#

• Classi Nested - In Java ci sono due tipi di classi Classi Nested - In Java ci sono due tipi di classi nested:nested:– Inner classes (non esistono in C#)Inner classes (non esistono in C#)– Static nested classes (equivalenti alle nested classes Static nested classes (equivalenti alle nested classes

di C#)di C#)

• Access modifiersAccess modifiers– In Java In Java protectedprotected è equivalente ad è equivalente ad internalinternal in C# in C#– C# ha C# ha protectedprotected e e internalinternal protectedprotected in più. in più.– In Java il default è In Java il default è protected protected (internal in C#), in C# è (internal in C#), in C# è

privateprivate

• Classi Nested - In Java ci sono due tipi di classi Classi Nested - In Java ci sono due tipi di classi nested:nested:– Inner classes (non esistono in C#)Inner classes (non esistono in C#)– Static nested classes (equivalenti alle nested classes Static nested classes (equivalenti alle nested classes

di C#)di C#)

• Access modifiersAccess modifiers– In Java In Java protectedprotected è equivalente ad è equivalente ad internalinternal in C# in C#– C# ha C# ha protectedprotected e e internalinternal protectedprotected in più. in più.– In Java il default è In Java il default è protected protected (internal in C#), in C# è (internal in C#), in C# è

privateprivate

Page 11: 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

Differenze tra Java e C#Differenze tra Java e C#Differenze tra Java e C#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 In Java le eccezioni vanno dichiarate e trappate

esplicitamente (Checked Exceptions) e fanno esplicitamente (Checked Exceptions) e fanno parte della firma del metodoparte della firma del metodo

• Costanti (final in Java, const o readonly a Costanti (final in Java, const o readonly a seconda dei casi in C#)seconda dei casi in C#)

• Le sequenze di inizializzazione dei costuttori, Le sequenze di inizializzazione dei costuttori, finalizzatori, etc... non sono identiche.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 In Java le eccezioni vanno dichiarate e trappate

esplicitamente (Checked Exceptions) e fanno esplicitamente (Checked Exceptions) e fanno parte della firma del metodoparte della firma del metodo

• Costanti (final in Java, const o readonly a Costanti (final in Java, const o readonly a seconda dei casi in C#)seconda dei casi in C#)

• Le sequenze di inizializzazione dei costuttori, Le sequenze di inizializzazione dei costuttori, finalizzatori, etc... non sono identiche.finalizzatori, etc... non sono identiche.

Page 12: 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

Novità di Java 5.0Novità di Java 5.0già presenti in C#già presenti in C#Novità di Java 5.0Novità di Java 5.0già presenti in C#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# Java 5.0 introduce i Generics che in C# appariranno nella 2.0appariranno nella 2.0– Non hanno la stessa implementazione, quelli di Java Non hanno la stessa implementazione, quelli di Java

sono “retrocompatibili”sono “retrocompatibili”

• Altre: Altre: httphttp://java.sun.com/j2se/1.5.0/docs/relnotes/features.html://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# Java 5.0 introduce i Generics che in C# appariranno nella 2.0appariranno nella 2.0– Non hanno la stessa implementazione, quelli di Java Non hanno la stessa implementazione, quelli di Java

sono “retrocompatibili”sono “retrocompatibili”

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

Page 13: 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

Per una documentazione Per una documentazione esaustiva:esaustiva:

Per una documentazione Per una documentazione esaustiva:esaustiva:

• Confronto fra Java 1.4 e C# 1.0 (erano entrambi Confronto fra Java 1.4 e C# 1.0 (erano entrambi in Beta quando è stata scritta):in Beta quando è stata scritta):– http://www.25hoursaday.com/CsharpVsJava.htmlhttp://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_http://www.harding.edu/USER/fmccown/WWW/java1_

5_csharp_comparison.html5_csharp_comparison.html

• Confronto fra Java 1.4 e C# 1.0 (erano entrambi Confronto fra Java 1.4 e C# 1.0 (erano entrambi in Beta quando è stata scritta):in Beta quando è stata scritta):– http://www.25hoursaday.com/CsharpVsJava.htmlhttp://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_http://www.harding.edu/USER/fmccown/WWW/java1_

5_csharp_comparison.html5_csharp_comparison.html

Page 14: 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

Migrazione da Java a C#Migrazione da Java a C#Migrazione da Java a C#Migrazione da Java a C#

• La migrazione può essere fatta La migrazione può essere fatta manualmente o tramite tool:manualmente o tramite tool:– Java Language Conversion Assistant 2.0Java Language Conversion Assistant 2.0– Java Language Conversion Assistant 3.0Java 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 Entrambi supportano la conversione per progetti VJ++ o singoli file/cartelleprogetti VJ++ o singoli file/cartelle

• La migrazione può essere fatta La migrazione può essere fatta manualmente o tramite tool:manualmente o tramite tool:– Java Language Conversion Assistant 2.0Java Language Conversion Assistant 2.0– Java Language Conversion Assistant 3.0Java 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 Entrambi supportano la conversione per progetti VJ++ o singoli file/cartelleprogetti VJ++ o singoli file/cartelle

Page 15: 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

Esempi di migrazione manuale:Esempi di migrazione manuale:Esempi di migrazione manuale:Esempi di migrazione manuale:

• NUnit – la 1.x era basata sulle interfacce, NUnit – la 1.x era basata sulle interfacce, la 2.x è stata completamente riscritta la 2.x è stata completamente riscritta basandosi sugli attributibasandosi sugli attributi

• NHibernate, NAnt, CruiseControl.NET, NHibernate, NAnt, CruiseControl.NET, NEtc...NEtc...

• La migrazione manuale permette un La migrazione manuale permette un refactoring/riscrittura per adattarsi meglio refactoring/riscrittura per adattarsi meglio all’ambiente .NETall’ambiente .NET

• NUnit – la 1.x era basata sulle interfacce, NUnit – la 1.x era basata sulle interfacce, la 2.x è stata completamente riscritta la 2.x è stata completamente riscritta basandosi sugli attributibasandosi sugli attributi

• NHibernate, NAnt, CruiseControl.NET, NHibernate, NAnt, CruiseControl.NET, NEtc...NEtc...

• La migrazione manuale permette un La migrazione manuale permette un refactoring/riscrittura per adattarsi meglio refactoring/riscrittura per adattarsi meglio all’ambiente .NETall’ambiente .NET

Page 16: 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

Java Language Conversion Java Language Conversion Assistant 2.0Assistant 2.0

Java Language Conversion Java Language Conversion Assistant 2.0Assistant 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/

Page 17: 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

Java Language Conversion Java Language Conversion Assistant 2.0Assistant 2.0

Java Language Conversion Java Language Conversion Assistant 2.0Assistant 2.0

• Permette di convertire:Permette di convertire:– Classi JavaClassi Java -> Classi C#-> Classi C#– AppletApplet -> Windows Forms Controls-> Windows Forms Controls– JavaBeanJavaBean -> Classi C#-> Classi C#– AWT FrameAWT Frame -> Windows Forms-> Windows Forms– WFC FormsWFC Forms -> Windows Forms-> Windows Forms– JSP/ServletJSP/Servlet -> ASP.NET-> ASP.NET

• Supporta il linguaggio Java fino alla 1.1.4 con Supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni (ad esempio le collection di alcune estensioni (ad esempio le collection di Java 1.2)Java 1.2)

• Permette di convertire:Permette di convertire:– Classi JavaClassi Java -> Classi C#-> Classi C#– AppletApplet -> Windows Forms Controls-> Windows Forms Controls– JavaBeanJavaBean -> Classi C#-> Classi C#– AWT FrameAWT Frame -> Windows Forms-> Windows Forms– WFC FormsWFC Forms -> Windows Forms-> Windows Forms– JSP/ServletJSP/Servlet -> ASP.NET-> ASP.NET

• Supporta il linguaggio Java fino alla 1.1.4 con Supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni (ad esempio le collection di alcune estensioni (ad esempio le collection di Java 1.2)Java 1.2)

Page 18: 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

Java Language Conversion Java Language Conversion Assistant 3.0Assistant 3.0

Java Language Conversion Java Language Conversion Assistant 3.0Assistant 3.0

• E’ attualmente in Beta: 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.3J2EE 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, Migliorata la conversione della parte grafica, includendo anche la conversione parziale di includendo anche la conversione parziale di progetti Swingprogetti Swing

• E’ attualmente in Beta: 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.3J2EE 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, Migliorata la conversione della parte grafica, includendo anche la conversione parziale di includendo anche la conversione parziale di progetti Swingprogetti Swing

Page 19: 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

JLCA – problemi di conversioneJLCA – problemi di conversioneJLCA – problemi di conversioneJLCA – problemi di conversione

• Il codice viene convertito AS IS, ma non è Il codice viene convertito AS IS, ma non è possibile convertire il 100%possibile convertire il 100%– Esistono una serie di UPGRADE_WARNING Esistono una serie di UPGRADE_WARNING

e UPGRADE_ISSUE che vengono marcati nel e UPGRADE_ISSUE che vengono marcati nel codicecodice

– Alcuni costrutti non vengono convertiti (ad Alcuni costrutti non vengono convertiti (ad esempio gli Enum “old Java style”...)esempio gli Enum “old Java style”...)

– Alcuni costrutti vengono convertiti maleAlcuni costrutti vengono convertiti male• Ad esempio i getter/setter -> proprietà, a volte Ad esempio i getter/setter -> proprietà, a volte

vengono convertiti, a volte no...vengono convertiti, a volte no...

• Il codice viene convertito AS IS, ma non è Il codice viene convertito AS IS, ma non è possibile convertire il 100%possibile convertire il 100%– Esistono una serie di UPGRADE_WARNING Esistono una serie di UPGRADE_WARNING

e UPGRADE_ISSUE che vengono marcati nel e UPGRADE_ISSUE che vengono marcati nel codicecodice

– Alcuni costrutti non vengono convertiti (ad Alcuni costrutti non vengono convertiti (ad esempio gli Enum “old Java style”...)esempio gli Enum “old Java style”...)

– Alcuni costrutti vengono convertiti maleAlcuni costrutti vengono convertiti male• Ad esempio i getter/setter -> proprietà, a volte Ad esempio i getter/setter -> proprietà, a volte

vengono convertiti, a volte no...vengono convertiti, a volte no...

Page 20: 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

JLCA – problemi di conversioneJLCA – problemi di conversioneJLCA – problemi di conversioneJLCA – problemi di conversione

• Altri problemi “subdoli”:Altri problemi “subdoli”:– Exception BroadeningException Broadening

• Due eccezioni Java sono mappate su una sola Due eccezioni Java sono mappate su una sola in .NET -> due catch con la stessa eccezionein .NET -> due catch con la stessa eccezione

– Algoritmi interni diversi, attenti ad esempio a Algoritmi interni diversi, attenti ad esempio a codice di questo tipocodice di questo tipo• String s = new String(“Prova!”);String s = new String(“Prova!”);• if (b.hashCode() == 1234567) if (b.hashCode() == 1234567)

– o anche:o anche:• Class c = Class.forName("java.lang.String");Class c = Class.forName("java.lang.String");

• Altri problemi “subdoli”:Altri problemi “subdoli”:– Exception BroadeningException Broadening

• Due eccezioni Java sono mappate su una sola Due eccezioni Java sono mappate su una sola in .NET -> due catch con la stessa eccezionein .NET -> due catch con la stessa eccezione

– Algoritmi interni diversi, attenti ad esempio a Algoritmi interni diversi, attenti ad esempio a codice di questo tipocodice di questo tipo• String s = new String(“Prova!”);String s = new String(“Prova!”);• if (b.hashCode() == 1234567) if (b.hashCode() == 1234567)

– o anche:o anche:• Class c = Class.forName("java.lang.String");Class c = Class.forName("java.lang.String");

Page 21: 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

JLCA – problemi “filosofici”JLCA – problemi “filosofici”JLCA – problemi “filosofici”JLCA – problemi “filosofici”

• La conversione verso .NET è un processo La conversione verso .NET è un processo “irreversibile”“irreversibile”

• Ad esempio:Ad esempio:– Gli EJB sono convertiti in Enterprise Services (COM+)Gli EJB sono convertiti in Enterprise Services (COM+)– RMI è convertito in .NET RemotingRMI è convertito in .NET Remoting– La Serializzazione usata è quella di .NETLa 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 Morale: le applicazioni convertite non potranno più “interoperare” con il mondo Java... più “interoperare” con il mondo Java... Attenzione!!!Attenzione!!!

• La conversione verso .NET è un processo La conversione verso .NET è un processo “irreversibile”“irreversibile”

• Ad esempio:Ad esempio:– Gli EJB sono convertiti in Enterprise Services (COM+)Gli EJB sono convertiti in Enterprise Services (COM+)– RMI è convertito in .NET RemotingRMI è convertito in .NET Remoting– La Serializzazione usata è quella di .NETLa 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 Morale: le applicazioni convertite non potranno più “interoperare” con il mondo Java... più “interoperare” con il mondo Java... Attenzione!!!Attenzione!!!

Page 22: 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

JLCA – ne vale la pena???JLCA – ne vale la pena???JLCA – ne vale la pena???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 Il processo di post conversione può essere lungo e noiosolungo 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 Il processo di post conversione può essere lungo e noiosolungo e noioso– Non si vuole doverlo rifare ogni volta... Non si vuole doverlo rifare ogni volta...

Page 23: 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

JLCA – un esempio: JExcelJLCA – un esempio: JExcelJLCA – un esempio: JExcelJLCA – un esempio: JExcel

• Ho preso una libreria molto usata in Ho preso una libreria molto usata in ambiente Java: ambiente Java: http://www.andykhan.com/jexcelapi/http://www.andykhan.com/jexcelapi/

• Questa libreria permette di leggere, Questa libreria permette di leggere, scrivere e modificare fogli Excel senza scrivere e modificare fogli Excel senza usare i PIA, COM Interop, o la libreria di usare i PIA, COM Interop, o la libreria di Raf che usa ADO.NET ;-)Raf che usa ADO.NET ;-)

• Ho preso una libreria molto usata in Ho preso una libreria molto usata in ambiente Java: ambiente Java: http://www.andykhan.com/jexcelapi/http://www.andykhan.com/jexcelapi/

• Questa libreria permette di leggere, Questa libreria permette di leggere, scrivere e modificare fogli Excel senza scrivere e modificare fogli Excel senza usare i PIA, COM Interop, o la libreria di usare i PIA, COM Interop, o la libreria di Raf che usa ADO.NET ;-)Raf che usa ADO.NET ;-)

Page 24: 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

DEMO JLCA 3.0: DEMO JLCA 3.0: Conversione di JExcelConversione di JExcel

DEMO JLCA 3.0: DEMO JLCA 3.0: Conversione di JExcelConversione di JExcel

Page 25: 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

Risultato... (1/3)Risultato... (1/3)Risultato... (1/3)Risultato... (1/3)

• Dopo dieci minuti avevo 800 upgrade Dopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazionewarning/issue e 500 errori di compilazione

• Dopo venti minuti avevo 450 errori di Dopo venti minuti avevo 450 errori di compilazionecompilazione

• Dome mezz’ora avevo 800 errori di Dome mezz’ora avevo 800 errori di compilazione... compilazione...

• Dopo dieci minuti avevo 800 upgrade Dopo dieci minuti avevo 800 upgrade warning/issue e 500 errori di compilazionewarning/issue e 500 errori di compilazione

• Dopo venti minuti avevo 450 errori di Dopo venti minuti avevo 450 errori di compilazionecompilazione

• Dome mezz’ora avevo 800 errori di Dome mezz’ora avevo 800 errori di compilazione... compilazione...

Page 26: 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

Risultato... (2/3)Risultato... (2/3)Risultato... (2/3)Risultato... (2/3)

• Il codice faceva schifo...Il codice faceva schifo...– Mezze property mezzi get/setMezze property mezzi get/set

• Un problema quando la classe aveva la property e Un problema quando la classe aveva la property e l’interfaccia da implementare il get/set o viceversa...l’interfaccia da implementare il get/set o viceversa...

– Enum alla Java da riscrivere completamente Enum alla Java da riscrivere completamente nell’implementazionenell’implementazione

– Refactoring selvaggio da applicare, senza avere unit Refactoring selvaggio da applicare, senza avere unit test che garantissero l’esattezza delle modifichetest che garantissero l’esattezza delle modifiche

– Nested Classes da rivedere completamenteNested Classes da rivedere completamente– Visibilità delle classi e dei metodi da rivedere...Visibilità delle classi e dei metodi da rivedere...

• Il codice faceva schifo...Il codice faceva schifo...– Mezze property mezzi get/setMezze property mezzi get/set

• Un problema quando la classe aveva la property e Un problema quando la classe aveva la property e l’interfaccia da implementare il get/set o viceversa...l’interfaccia da implementare il get/set o viceversa...

– Enum alla Java da riscrivere completamente Enum alla Java da riscrivere completamente nell’implementazionenell’implementazione

– Refactoring selvaggio da applicare, senza avere unit Refactoring selvaggio da applicare, senza avere unit test che garantissero l’esattezza delle modifichetest che garantissero l’esattezza delle modifiche

– Nested Classes da rivedere completamenteNested Classes da rivedere completamente– Visibilità delle classi e dei metodi da rivedere...Visibilità delle classi e dei metodi da rivedere...

Page 27: 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

Risultato... (3/3)Risultato... (3/3)Risultato... (3/3)Risultato... (3/3)

• E se esce un’altra versione della E se esce un’altra versione della libreria???libreria???

• Il codice non è scritto secondo le Best Il codice non è scritto secondo le Best Practice del codice .NETPractice del codice .NET

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

• E se esce un’altra versione della E se esce un’altra versione della libreria???libreria???

• Il codice non è scritto secondo le Best Il codice non è scritto secondo le Best Practice del codice .NETPractice del codice .NET

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

Page 28: 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

Riutilizzo in .NET di librerie JavaRiutilizzo in .NET di librerie JavaRiutilizzo in .NET di librerie JavaRiutilizzo in .NET di librerie Java

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

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

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

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

Page 29: 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

J#J#J#J#

• J# supporta il linguaggio Java fino alla J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle 1.1.4 con alcune estensioni relative alle versioni successive.versioni successive.

• Due modi per importare librerie:Due modi per importare librerie:– Se si ha il codice (importando i file .java Se si ha il codice (importando i file .java

direttamente nel progetto)direttamente nel progetto)– Se si hanno solo i .class, .zip, .jar, etc...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 J# supporta il linguaggio Java fino alla 1.1.4 con alcune estensioni relative alle 1.1.4 con alcune estensioni relative alle versioni successive.versioni successive.

• Due modi per importare librerie:Due modi per importare librerie:– Se si ha il codice (importando i file .java Se si ha il codice (importando i file .java

direttamente nel progetto)direttamente nel progetto)– Se si hanno solo i .class, .zip, .jar, etc...Se si hanno solo i .class, .zip, .jar, etc...

• Si può usare il tool JbImpSi può usare il tool JbImp

Page 30: 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

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

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

Page 31: 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

A cosa mi serve usarlo da J#?A cosa mi serve usarlo da J#?A cosa mi serve usarlo da J#?A cosa mi serve usarlo da J#?

• Nessuno usa J# per scrivere il proprio Nessuno usa J# per scrivere il proprio codice...codice...

• Ma il codice J# può essere richiamato da Ma il codice J# può essere richiamato da codice C#, VB.NET esattamente come codice C#, VB.NET esattamente come qualsiasi Assembly .NETqualsiasi Assembly .NET

• Richiede qualche attenzione:Richiede qualche attenzione:– Referenziare l’assembly con i tipi J# (VSJLIB)Referenziare l’assembly con i tipi J# (VSJLIB)– Verificare la firma dei tipi e usare i tipi Verificare la firma dei tipi e usare i tipi

corrispondenticorrispondenti

• Nessuno usa J# per scrivere il proprio Nessuno usa J# per scrivere il proprio codice...codice...

• Ma il codice J# può essere richiamato da Ma il codice J# può essere richiamato da codice C#, VB.NET esattamente come codice C#, VB.NET esattamente come qualsiasi Assembly .NETqualsiasi Assembly .NET

• Richiede qualche attenzione:Richiede qualche attenzione:– Referenziare l’assembly con i tipi J# (VSJLIB)Referenziare l’assembly con i tipi J# (VSJLIB)– Verificare la firma dei tipi e usare i tipi Verificare la firma dei tipi e usare i tipi

corrispondenticorrispondenti

Page 32: 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

DEMO J#:DEMO J#:Utilizzare JExcel da C#Utilizzare JExcel da C#

DEMO J#:DEMO J#:Utilizzare JExcel da C#Utilizzare JExcel da C#

Page 33: 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

IKVM.NETIKVM.NETIKVM.NETIKVM.NET

• E’ un’implementazione della JVM in .NETE’ un’implementazione della JVM in .NET

• Permette di utilizzare codice Java Permette di utilizzare codice Java direttamente senza una JVM installatadirettamente senza una JVM installata

• Permette di convertire file .class, .jar, etc... Permette di convertire file .class, .jar, etc... In DLL .NETIn DLL .NET

• Ha librerie più “complete” di J#, almeno in Ha librerie più “complete” di J#, almeno in alcune parti.alcune parti.

• E’ un’implementazione della JVM in .NETE’ un’implementazione della JVM in .NET

• Permette di utilizzare codice Java Permette di utilizzare codice Java direttamente senza una JVM installatadirettamente senza una JVM installata

• Permette di convertire file .class, .jar, etc... Permette di convertire file .class, .jar, etc... In DLL .NETIn DLL .NET

• Ha librerie più “complete” di J#, almeno in Ha librerie più “complete” di J#, almeno in alcune parti.alcune parti.

Page 34: 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

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

comandocomando

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

comandocomando

Page 35: 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

DEMO IKVM.NET:DEMO IKVM.NET:Conversione JExcel in Conversione JExcel in

DLL .NET e suo utilizzo da C#DLL .NET e suo utilizzo da C#

DEMO IKVM.NET:DEMO IKVM.NET:Conversione JExcel in Conversione JExcel in

DLL .NET e suo utilizzo da C#DLL .NET e suo utilizzo da C#

Page 36: 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

Come funziona IKVM.NETCome funziona IKVM.NETCome funziona IKVM.NETCome funziona IKVM.NET

• IKVM.NET emula una JVM, permette di IKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode leggere bytecode Java, converte bytecode Java in ILJava in IL

• Dispone di un’implementazione delle Dispone di un’implementazione delle principali librerie Java in un Assebly .NETprincipali librerie Java in un Assebly .NET– Basata sul progetto GNU ClassPathBasata sul progetto GNU ClassPath

• Non supporta la parte grafica (non è prioritaria per Non supporta la parte grafica (non è prioritaria per l’autore)l’autore)

• Ha un supporto iniziale per i Generics di JavaHa un supporto iniziale per i Generics di Java

• IKVM.NET emula una JVM, permette di IKVM.NET emula una JVM, permette di leggere bytecode Java, converte bytecode leggere bytecode Java, converte bytecode Java in ILJava in IL

• Dispone di un’implementazione delle Dispone di un’implementazione delle principali librerie Java in un Assebly .NETprincipali librerie Java in un Assebly .NET– Basata sul progetto GNU ClassPathBasata sul progetto GNU ClassPath

• Non supporta la parte grafica (non è prioritaria per Non supporta la parte grafica (non è prioritaria per l’autore)l’autore)

• Ha un supporto iniziale per i Generics di JavaHa un supporto iniziale per i Generics di Java

Page 37: 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

Ok... Questo JExcel ci ha Ok... Questo JExcel ci ha stufato...stufato...

Ok... Questo JExcel ci ha Ok... Questo JExcel ci ha stufato...stufato...

• Anche in questo caso...Anche in questo caso...

• Come per tutti i prodotti della serie Come per tutti i prodotti della serie JQualcheCosa...JQualcheCosa...

• Esiste anche NExcel!!!Esiste anche NExcel!!!

• http://nexcel.sourceforge.net/http://nexcel.sourceforge.net/

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

• Anche in questo caso...Anche in questo caso...

• Come per tutti i prodotti della serie Come per tutti i prodotti della serie JQualcheCosa...JQualcheCosa...

• Esiste anche NExcel!!!Esiste anche NExcel!!!

• http://nexcel.sourceforge.net/http://nexcel.sourceforge.net/

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

Page 38: 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

Interoperabilità tra Java e .NET Interoperabilità tra Java e .NET Interoperabilità tra Java e .NET Interoperabilità tra Java e .NET J2

EE

.NE

TPresentation Business Logic

Data Integration& Persistence

WS

MQ

WIRE

WS

MQ

WIRE

Page 39: 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

Interoperabilità tra Java e .NETInteroperabilità tra Java e .NETInteroperabilità tra Java e .NETInteroperabilità tra Java e .NETPresentation to Presentation to PresentationPresentation

Presentation to Presentation to BusinessBusiness

Business to Business to BusinessBusiness Business to DataBusiness to Data

XML Web XML Web ServicesServices XX XX XX

Runtime BridgesRuntime Bridges XX XX XX

MessagingMessaging XX XX

Shared DatabasesShared Databases XX XX

Integration Integration BrokersBrokers XX XX

Non ce ne occupiamo!Non ce ne occupiamo!

Page 40: 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

Alla base dell’interoperabilità:Alla base dell’interoperabilità:Alla base dell’interoperabilità:Alla base dell’interoperabilità:

• 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 Esistono tipi di dati differenti tra le due

piattaformepiattaforme– Dataset, ResultSet, etc...Dataset, ResultSet, etc...

• Esistono tipi di dati “simili” ma con Esistono tipi di dati “simili” ma con comportamento diverso:comportamento diverso:– In Java Date, Boolean e altri tipi di dato sono tipi In Java Date, Boolean e altri tipi di dato sono tipi

reference, in .NET sono tipi value -> non gestiscono i reference, in .NET sono tipi value -> non gestiscono i nulllnulll

• La compatibilità tra tipi di dati diversi è il La compatibilità tra tipi di dati diversi è il problema principale dell’interoperabilità!problema principale dell’interoperabilità!

• 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 Esistono tipi di dati differenti tra le due

piattaformepiattaforme– Dataset, ResultSet, etc...Dataset, ResultSet, etc...

• Esistono tipi di dati “simili” ma con Esistono tipi di dati “simili” ma con comportamento diverso:comportamento diverso:– In Java Date, Boolean e altri tipi di dato sono tipi In Java Date, Boolean e altri tipi di dato sono tipi

reference, in .NET sono tipi value -> non gestiscono i reference, in .NET sono tipi value -> non gestiscono i nulllnulll

• La compatibilità tra tipi di dati diversi è il La compatibilità tra tipi di dati diversi è il problema principale dell’interoperabilità!problema principale dell’interoperabilità!

Page 41: 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

SerializzazioneSerializzazioneSerializzazioneSerializzazione

• Se le due piattaforme non si parlano... Se le due piattaforme non si parlano... come fanno ad interoperare???come fanno ad interoperare???– Binary SerializationBinary Serialization

• Di default è incompatibile tra le due piattaformeDi default è incompatibile tra le due piattaforme• Si può passare dalla Serializzazione di J# Si può passare dalla Serializzazione di J#

((http://msdn2.microsoft.com/en-us/library/ms177590(en-US,VS.80).aspxhttp://msdn2.microsoft.com/en-us/library/ms177590(en-US,VS.80).aspx))

– XML SerializationXML Serialization• Come per i Web Services, anche in questo caso Come per i Web Services, anche in questo caso

bisogna focalizzarsi su un approccio XSD-First!bisogna focalizzarsi su un approccio XSD-First!

• Se le due piattaforme non si parlano... Se le due piattaforme non si parlano... come fanno ad interoperare???come fanno ad interoperare???– Binary SerializationBinary Serialization

• Di default è incompatibile tra le due piattaformeDi default è incompatibile tra le due piattaforme• Si può passare dalla Serializzazione di J# Si può passare dalla Serializzazione di J#

((http://msdn2.microsoft.com/en-us/library/ms177590(en-US,VS.80).aspxhttp://msdn2.microsoft.com/en-us/library/ms177590(en-US,VS.80).aspx))

– XML SerializationXML Serialization• Come per i Web Services, anche in questo caso Come per i Web Services, anche in questo caso

bisogna focalizzarsi su un approccio XSD-First!bisogna focalizzarsi su un approccio XSD-First!

Page 42: 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

Runtime BridgesRuntime BridgesRuntime BridgesRuntime Bridges

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

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

Page 43: 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

Runtime BridgesRuntime BridgesRuntime BridgesRuntime Bridges

Page 44: 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

Runtime BridgesRuntime BridgesRuntime BridgesRuntime Bridges

• A seconda del prodotto si hanno A seconda del prodotto si hanno funzionalità diverse:funzionalità diverse:– Alcuni supportano solo scenari di invocazione Alcuni supportano solo scenari di invocazione

di metodi remotidi metodi remoti– Altri supportano scenari più complessi, in Altri supportano scenari più complessi, in

contensti transazionali End-To-Endcontensti transazionali End-To-End– Janeva, IIOP .NET e Remoting.Corba Janeva, IIOP .NET e Remoting.Corba

supportano anche l’interoperabilità con server supportano anche l’interoperabilità con server CorbaCorba

– Alcuni prodotti sono “bidirezionali"Alcuni prodotti sono “bidirezionali"

• A seconda del prodotto si hanno A seconda del prodotto si hanno funzionalità diverse:funzionalità diverse:– Alcuni supportano solo scenari di invocazione Alcuni supportano solo scenari di invocazione

di metodi remotidi metodi remoti– Altri supportano scenari più complessi, in Altri supportano scenari più complessi, in

contensti transazionali End-To-Endcontensti transazionali End-To-End– Janeva, IIOP .NET e Remoting.Corba Janeva, IIOP .NET e Remoting.Corba

supportano anche l’interoperabilità con server supportano anche l’interoperabilità con server CorbaCorba

– Alcuni prodotti sono “bidirezionali"Alcuni prodotti sono “bidirezionali"

Page 45: 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

Runtime BridgesRuntime BridgesRuntime BridgesRuntime Bridges

• Alcuni articoli:Alcuni articoli:– Janeva: Janeva: http://www.devx.com/interop/Article/19916/0/page/1 http://www.devx.com/interop/Article/19916/0/page/1

– JNBridge: JNBridge: http://www.devx.com/interop/Article/19945/0/page/1http://www.devx.com/interop/Article/19945/0/page/1

• Alcuni articoli:Alcuni articoli:– Janeva: Janeva: http://www.devx.com/interop/Article/19916/0/page/1 http://www.devx.com/interop/Article/19916/0/page/1

– JNBridge: JNBridge: http://www.devx.com/interop/Article/19945/0/page/1http://www.devx.com/interop/Article/19945/0/page/1

Page 46: 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

MessagingMessagingMessagingMessaging

• Entrambe le piattaforme dispongono di Entrambe le piattaforme dispongono di una soluzione per il Messaging asincrono:una soluzione per il Messaging asincrono:– MSMQ per .NETMSMQ per .NET– JMS per JavaJMS per Java

• E’ una specifica, ogni vendor ha E’ una specifica, ogni vendor ha un’implementazione diversaun’implementazione diversa

• MQ Series di IBM è quella più diffusaMQ Series di IBM è quella più diffusa

– Altre soluzioni di terze parti (Sonic, Novell, Altre soluzioni di terze parti (Sonic, Novell, Tibco)Tibco)

• Entrambe le piattaforme dispongono di Entrambe le piattaforme dispongono di una soluzione per il Messaging asincrono:una soluzione per il Messaging asincrono:– MSMQ per .NETMSMQ per .NET– JMS per JavaJMS per Java

• E’ una specifica, ogni vendor ha E’ una specifica, ogni vendor ha un’implementazione diversaun’implementazione diversa

• MQ Series di IBM è quella più diffusaMQ Series di IBM è quella più diffusa

– Altre soluzioni di terze parti (Sonic, Novell, Altre soluzioni di terze parti (Sonic, Novell, Tibco)Tibco)

Page 47: 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

MessagingMessagingMessagingMessaging

• Soluzioni per l’interoperabilità:Soluzioni per l’interoperabilità:– MSMQ-MQSeries Bridge (presente in Host MSMQ-MQSeries Bridge (presente in Host

Integration Server)Integration Server)– MQSeries per .NET (in un SupportPac di IBM)MQSeries per .NET (in un SupportPac di IBM)

• Soluzioni per l’interoperabilità:Soluzioni per l’interoperabilità:– MSMQ-MQSeries Bridge (presente in Host MSMQ-MQSeries Bridge (presente in Host

Integration Server)Integration Server)– MQSeries per .NET (in un SupportPac di IBM)MQSeries per .NET (in un SupportPac di IBM)

Page 48: 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

Shared DatabaseShared DatabaseShared DatabaseShared Database

• Entrambi i mondi possono accedere a Entrambi i mondi possono accedere a svariati tipi di DataBasesvariati tipi di DataBase

• Si usano le tecniche conosciute e già Si usano le tecniche conosciute e già usate:usate:– ADO.NETADO.NET– JDBC/JDO/etc...JDBC/JDO/etc...

• Entrambi i mondi possono accedere a Entrambi i mondi possono accedere a svariati tipi di DataBasesvariati tipi di DataBase

• Si usano le tecniche conosciute e già Si usano le tecniche conosciute e già usate:usate:– ADO.NETADO.NET– JDBC/JDO/etc...JDBC/JDO/etc...

Page 49: 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

Integration BrokersIntegration BrokersIntegration BrokersIntegration Brokers

• Microsoft BizTalk permette di far Microsoft BizTalk permette di far comunicare piattaforme diverse, e comunicare piattaforme diverse, e permette anche di trasformare, adattare e permette anche di trasformare, adattare e gestire vari aspetti della comunicazione.gestire vari aspetti della comunicazione.

• Esistono altri prodotti simili.Esistono altri prodotti simili.

• Tutti questi prodotti possono usare Web Tutti questi prodotti possono usare Web Services o protocolli nativi per la Services o protocolli nativi per la comunicazione tra le piattaforme.comunicazione tra le piattaforme.

• Microsoft BizTalk permette di far Microsoft BizTalk permette di far comunicare piattaforme diverse, e comunicare piattaforme diverse, e permette anche di trasformare, adattare e permette anche di trasformare, adattare e gestire vari aspetti della comunicazione.gestire vari aspetti della comunicazione.

• Esistono altri prodotti simili.Esistono altri prodotti simili.

• Tutti questi prodotti possono usare Web Tutti questi prodotti possono usare Web Services o protocolli nativi per la Services o protocolli nativi per la comunicazione tra le piattaforme.comunicazione tra le piattaforme.

Page 50: 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

...e il Ritorno???...e il Ritorno???...e il Ritorno???...e il Ritorno???

• Parliamo solo di interoperabilità...Parliamo solo di interoperabilità...– chi migrerebbe mai da .NET a Java ;-)chi migrerebbe mai da .NET a Java ;-)

• Abbiamo visto che alcune delle tecnologie Abbiamo visto che alcune delle tecnologie proposte permettono anche proposte permettono anche l’interoperabilità inversal’interoperabilità inversa

• Un’altra possibilità è JNIUn’altra possibilità è JNI

• Parliamo solo di interoperabilità...Parliamo solo di interoperabilità...– chi migrerebbe mai da .NET a Java ;-)chi migrerebbe mai da .NET a Java ;-)

• Abbiamo visto che alcune delle tecnologie Abbiamo visto che alcune delle tecnologie proposte permettono anche proposte permettono anche l’interoperabilità inversal’interoperabilità inversa

• Un’altra possibilità è JNIUn’altra possibilità è JNI

Page 51: 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

Cos’è JNICos’è JNICos’è JNICos’è JNI

• Java Native InterfaceJava Native Interface– Permette a Java di richiamare metodi nativiPermette a Java di richiamare metodi nativi– Permette a codice nativo di richiamare codice Permette a codice nativo di richiamare codice

all’interno di una JVMall’interno 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 In entrambi i casi possiamo usare del codice C++ per fare da ponte fra Java codice C++ per fare da ponte fra Java e .NETe .NET

• Java Native InterfaceJava Native Interface– Permette a Java di richiamare metodi nativiPermette a Java di richiamare metodi nativi– Permette a codice nativo di richiamare codice Permette a codice nativo di richiamare codice

all’interno di una JVMall’interno 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 In entrambi i casi possiamo usare del codice C++ per fare da ponte fra Java codice C++ per fare da ponte fra Java e .NETe .NET

Page 52: 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

Hosting di controlli .NETHosting di controlli .NETHosting di controlli .NETHosting di controlli .NET

• E’ possibile inserire controlli .NET in E’ possibile inserire controlli .NET in appliacazioni Java utilizzando JNI e appliacazioni Java utilizzando JNI e l’interoperabilità COM/.NETl’interoperabilità COM/.NET– Bisogna passare da C++Bisogna passare da C++– Non è una tecnica semplice da usareNon è una tecnica semplice da usare

• Trovate un esempio qui:Trovate un esempio qui:– http://www.devx.com/interop/Article/19845/0/page/1http://www.devx.com/interop/Article/19845/0/page/1

• E’ possibile inserire controlli .NET in E’ possibile inserire controlli .NET in appliacazioni Java utilizzando JNI e appliacazioni Java utilizzando JNI e l’interoperabilità COM/.NETl’interoperabilità COM/.NET– Bisogna passare da C++Bisogna passare da C++– Non è una tecnica semplice da usareNon è una tecnica semplice da usare

• Trovate un esempio qui:Trovate un esempio qui:– http://www.devx.com/interop/Article/19845/0/page/1http://www.devx.com/interop/Article/19845/0/page/1

Page 53: 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

LibriLibriLibriLibri

• Application Interoperability: Microsoft .NET Application Interoperability: Microsoft .NET and J2EEand J2EE

• Lo trovate in libreria o su: Lo trovate in libreria o su: http://www.microsoft.com/downloads/details.aspx?http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8E7A-B896-4E5F-B3C0-FamilyId=5FBA8E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=enFCF7FF1B9D29&displaylang=en

• Application Interoperability: Microsoft .NET Application Interoperability: Microsoft .NET and J2EEand J2EE

• Lo trovate in libreria o su: Lo trovate in libreria o su: http://www.microsoft.com/downloads/details.aspx?http://www.microsoft.com/downloads/details.aspx?FamilyId=5FBA8E7A-B896-4E5F-B3C0-FamilyId=5FBA8E7A-B896-4E5F-B3C0-FCF7FF1B9D29&displaylang=enFCF7FF1B9D29&displaylang=en

Page 54: 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

LibriLibriLibriLibri

• Microsoft .NET and J2EE Interoperability Microsoft .NET and J2EE Interoperability Toolkit di Simon GuestToolkit di Simon Guest

• Microsoft .NET and J2EE Interoperability Microsoft .NET and J2EE Interoperability Toolkit di Simon GuestToolkit di Simon Guest

Page 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 Lorenzo Barbieri

LinksLinksLinksLinks

http://www.ugidotnet.org

http://forum.ugidotnet.org

http://mobile.ugidotnet.org